diff options
Diffstat (limited to 'llvm/test/Transforms')
-rw-r--r-- | llvm/test/Transforms/ArgumentPromotion/naked_functions.ll | 23 | ||||
-rw-r--r-- | llvm/test/Transforms/FunctionAttrs/naked_functions.ll | 25 | ||||
-rw-r--r-- | llvm/test/Transforms/GlobalOpt/naked_functions.ll | 23 |
3 files changed, 71 insertions, 0 deletions
diff --git a/llvm/test/Transforms/ArgumentPromotion/naked_functions.ll b/llvm/test/Transforms/ArgumentPromotion/naked_functions.ll new file mode 100644 index 00000000000..70a63f4d02e --- /dev/null +++ b/llvm/test/Transforms/ArgumentPromotion/naked_functions.ll @@ -0,0 +1,23 @@ +; RUN: opt < %s -argpromotion -S | FileCheck %s + +; Don't promote paramaters of/arguments to naked functions + +@g = common global i32 0, align 4 + +define i32 @bar() { +entry: + %call = call i32 @foo(i32* @g) +; CHECK: %call = call i32 @foo(i32* @g) + ret i32 %call +} + +define internal i32 @foo(i32*) #0 { +entry: + %retval = alloca i32, align 4 + call void asm sideeffect "ldr r0, [r0] \0Abx lr \0A", ""() + unreachable +} + +; CHECK: define internal i32 @foo(i32*) + +attributes #0 = { naked } diff --git a/llvm/test/Transforms/FunctionAttrs/naked_functions.ll b/llvm/test/Transforms/FunctionAttrs/naked_functions.ll new file mode 100644 index 00000000000..d34dc0c20d9 --- /dev/null +++ b/llvm/test/Transforms/FunctionAttrs/naked_functions.ll @@ -0,0 +1,25 @@ +; RUN: opt -S -functionattrs %s | FileCheck %s +; RUN: opt -S -passes='function-attrs' %s | FileCheck %s + +; Don't change the attributes of parameters of naked functions, in particular +; don't mark them as readnone + +@g = common global i32 0, align 4 + +define i32 @bar() { +entry: + %call = call i32 @foo(i32* @g) +; CHECK: %call = call i32 @foo(i32* @g) + ret i32 %call +} + +define internal i32 @foo(i32*) #0 { +entry: + %retval = alloca i32, align 4 + call void asm sideeffect "ldr r0, [r0] \0Abx lr \0A", ""() + unreachable +} + +; CHECK: define internal i32 @foo(i32*) + +attributes #0 = { naked } diff --git a/llvm/test/Transforms/GlobalOpt/naked_functions.ll b/llvm/test/Transforms/GlobalOpt/naked_functions.ll new file mode 100644 index 00000000000..80c3aa8c3b2 --- /dev/null +++ b/llvm/test/Transforms/GlobalOpt/naked_functions.ll @@ -0,0 +1,23 @@ +; RUN: opt < %s -globalopt -S | FileCheck %s + +; Check that naked functions don't get marked with fast calling conventions + +@g = common global i32 0, align 4 + +define i32 @bar() { +entry: + %call = call i32 @foo(i32* @g) +; CHECK: %call = call i32 @foo(i32* @g) + ret i32 %call +} + +define internal i32 @foo(i32*) #0 { +entry: + %retval = alloca i32, align 4 + call void asm sideeffect "ldr r0, [r0] \0Abx lr \0A", ""() + unreachable +} + +; CHECK: define internal i32 @foo(i32*) + +attributes #0 = { naked } |