diff options
-rw-r--r-- | llvm/test/CodeGen/AVR/icall-func-pointer-correct-addr-space.ll | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/llvm/test/CodeGen/AVR/icall-func-pointer-correct-addr-space.ll b/llvm/test/CodeGen/AVR/icall-func-pointer-correct-addr-space.ll index 17ac29e2cdb..674eed6532e 100644 --- a/llvm/test/CodeGen/AVR/icall-func-pointer-correct-addr-space.ll +++ b/llvm/test/CodeGen/AVR/icall-func-pointer-correct-addr-space.ll @@ -1,15 +1,27 @@ ; RUN: llc -mattr=lpm,lpmw < %s -march=avr | FileCheck %s -declare void @callback(i16 zeroext) +@callbackPtr = common global void (i16)* null, align 8 +@myValuePtr = common global i16* null, align 8 -; CHECK-LABEL: foo -define void @foo() { +@externalConstant = external global i16, align 2 + +declare void @externalFunction(i16 signext) +declare void @bar(i8 signext, void (i16)*, i16*) + +; CHECK-LABEL: loadCallbackPtr +define void @loadCallbackPtr() { entry: - ; CHECK: ldi r{{[0-9]+}}, pm_lo8(callback) - ; CHECK-NEXT: ldi r{{[0-9]+}}, pm_hi8(callback) - call void @bar(i8 zeroext undef, void (i16)* @callback) + ; CHECK: ldi r{{[0-9]+}}, pm_lo8(externalFunction) + ; CHECK-NEXT: ldi r{{[0-9]+}}, pm_hi8(externalFunction) + store void (i16)* @externalFunction, void (i16)** @callbackPtr, align 8 ret void } -declare void @bar(i8 zeroext, void (i16)*) - +; CHECK-LABEL: loadValuePtr +define void @loadValuePtr() { +entry: + ; CHECK: ldi r{{[0-9]+}}, lo8(externalConstant) + ; CHECK-NEXT: ldi r{{[0-9]+}}, hi8(externalConstant) + store i16* @externalConstant, i16** @myValuePtr, align 8 + ret void +} |