diff options
author | James Molloy <james.molloy@arm.com> | 2015-11-06 10:32:53 +0000 |
---|---|---|
committer | James Molloy <james.molloy@arm.com> | 2015-11-06 10:32:53 +0000 |
commit | e6f87ca812809543444d7d5961aea2509b8a3227 (patch) | |
tree | 0484ecea76aab7032b2b590638de7650912e9e14 /llvm/test/Bitcode | |
parent | a805030ae821fa03fb76d89b9bb81ee66f676105 (diff) | |
download | bcm5719-llvm-e6f87ca812809543444d7d5961aea2509b8a3227.tar.gz bcm5719-llvm-e6f87ca812809543444d7d5961aea2509b8a3227.zip |
Add a new attribute: norecurse
This attribute allows the compiler to assume that the function never recurses into itself, either directly or indirectly (transitively). This can be used among other things to demote global variables to locals.
llvm-svn: 252282
Diffstat (limited to 'llvm/test/Bitcode')
-rw-r--r-- | llvm/test/Bitcode/attributes.ll | 10 | ||||
-rw-r--r-- | llvm/test/Bitcode/compatibility.ll | 17 | ||||
-rw-r--r-- | llvm/test/Bitcode/invalid.ll | 2 | ||||
-rw-r--r-- | llvm/test/Bitcode/invalid.ll.bc | bin | 332 -> 624 bytes |
4 files changed, 19 insertions, 10 deletions
diff --git a/llvm/test/Bitcode/attributes.ll b/llvm/test/Bitcode/attributes.ll index 0cf0745175e..e3eda4887b3 100644 --- a/llvm/test/Bitcode/attributes.ll +++ b/llvm/test/Bitcode/attributes.ll @@ -204,7 +204,7 @@ define void @f34() ; CHECK: define void @f34() { call void @nobuiltin() nobuiltin -; CHECK: call void @nobuiltin() #27 +; CHECK: call void @nobuiltin() #28 ret void; } @@ -272,6 +272,11 @@ define "string_attribute_with_value"="value" void @f46(i32 "string_attribute_wit ret void } +; CHECK: define void @f47() #27 +define void @f47() norecurse { + ret void +} + ; CHECK: attributes #0 = { noreturn } ; CHECK: attributes #1 = { nounwind } ; CHECK: attributes #2 = { readnone } @@ -299,4 +304,5 @@ define "string_attribute_with_value"="value" void @f46(i32 "string_attribute_wit ; CHECK: attributes #24 = { jumptable } ; CHECK: attributes #25 = { convergent } ; CHECK: attributes #26 = { argmemonly } -; CHECK: attributes #27 = { nobuiltin } +; CHECK: attributes #27 = { norecurse } +; CHECK: attributes #28 = { nobuiltin } diff --git a/llvm/test/Bitcode/compatibility.ll b/llvm/test/Bitcode/compatibility.ll index 4c6349c803c..73c24f0370a 100644 --- a/llvm/test/Bitcode/compatibility.ll +++ b/llvm/test/Bitcode/compatibility.ll @@ -501,6 +501,8 @@ declare void @f.uwtable() uwtable ; CHECK: declare void @f.uwtable() #30 declare void @f.kvpair() "cpu"="cortex-a8" ; CHECK:declare void @f.kvpair() #31 +declare void @f.norecurse() norecurse +; CHECK: declare void @f.norecurse() #32 ; Functions -- section declare void @f.section() section "80" @@ -559,7 +561,7 @@ declare void @f.prologuearray() prologue [4 x i32] [i32 0, i32 1, i32 2, i32 3] ; Functions -- Personality constant declare void @llvm.donothing() nounwind readnone -; CHECK: declare void @llvm.donothing() #32 +; CHECK: declare void @llvm.donothing() #33 define void @f.no_personality() personality i8 3 { ; CHECK: define void @f.no_personality() personality i8 3 invoke void @llvm.donothing() to label %normal unwind label %exception @@ -1125,7 +1127,7 @@ exit: ; CHECK: select <2 x i1> <i1 true, i1 false>, <2 x i8> <i8 2, i8 3>, <2 x i8> <i8 3, i8 2> call void @f.nobuiltin() builtin - ; CHECK: call void @f.nobuiltin() #36 + ; CHECK: call void @f.nobuiltin() #37 call fastcc noalias i32* @f.noalias() noinline ; CHECK: call fastcc noalias i32* @f.noalias() #12 @@ -1497,11 +1499,12 @@ normal: ; CHECK: attributes #29 = { "thunk" } ; CHECK: attributes #30 = { uwtable } ; CHECK: attributes #31 = { "cpu"="cortex-a8" } -; CHECK: attributes #32 = { nounwind readnone } -; CHECK: attributes #33 = { nounwind readonly argmemonly } -; CHECK: attributes #34 = { nounwind argmemonly } -; CHECK: attributes #35 = { nounwind readonly } -; CHECK: attributes #36 = { builtin } +; CHECK: attributes #32 = { norecurse } +; CHECK: attributes #33 = { nounwind readnone } +; CHECK: attributes #34 = { nounwind readonly argmemonly } +; CHECK: attributes #35 = { nounwind argmemonly } +; CHECK: attributes #36 = { nounwind readonly } +; CHECK: attributes #37 = { builtin } ;; Metadata diff --git a/llvm/test/Bitcode/invalid.ll b/llvm/test/Bitcode/invalid.ll index df9fec8772d..2f2eca94321 100644 --- a/llvm/test/Bitcode/invalid.ll +++ b/llvm/test/Bitcode/invalid.ll @@ -1,6 +1,6 @@ ; RUN: not llvm-dis < %s.bc 2>&1 | FileCheck %s -; CHECK: llvm-dis{{(\.EXE|\.exe)?}}: error: Unknown attribute kind (48) +; CHECK: llvm-dis{{(\.EXE|\.exe)?}}: error: Unknown attribute kind (50) ; invalid.ll.bc has an invalid attribute number. ; The test checks that LLVM reports the error and doesn't access freed memory diff --git a/llvm/test/Bitcode/invalid.ll.bc b/llvm/test/Bitcode/invalid.ll.bc Binary files differindex a85c3644b3a..8f7474b9e46 100644 --- a/llvm/test/Bitcode/invalid.ll.bc +++ b/llvm/test/Bitcode/invalid.ll.bc |