summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/FunctionAttrs/naked_functions.ll
diff options
context:
space:
mode:
authorLuke Cheeseman <luke.cheeseman@arm.com>2018-02-22 14:42:08 +0000
committerLuke Cheeseman <luke.cheeseman@arm.com>2018-02-22 14:42:08 +0000
commit6c1e6bbe0c609489ef49f9d64f1370a43e05c19c (patch)
tree42f8f4b2437344e153ec13ac4fcf82182d1f75ed /llvm/test/Transforms/FunctionAttrs/naked_functions.ll
parent92b73711138b3d37855fb527a538c85b293f37a7 (diff)
downloadbcm5719-llvm-6c1e6bbe0c609489ef49f9d64f1370a43e05c19c.tar.gz
bcm5719-llvm-6c1e6bbe0c609489ef49f9d64f1370a43e05c19c.zip
[FunctionAttrs][ArgumentPromotion][GlobalOpt] Disable some optimisations passes for naked functions
- Fix for bug 36078. - Prevent the functionattrs, function-attrs, globalopt and argpromotion passes from changing naked functions. - These passes can perform some alterations to the functions that should not be applied. An example is removing parameters that are seemingly not used because they are only referenced in the inline assembly. Another example is marking the function as fastcc. llvm-svn: 325788
Diffstat (limited to 'llvm/test/Transforms/FunctionAttrs/naked_functions.ll')
-rw-r--r--llvm/test/Transforms/FunctionAttrs/naked_functions.ll25
1 files changed, 25 insertions, 0 deletions
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 }
OpenPOWER on IntegriCloud