diff options
| author | Akira Hatanaka <ahatanaka@apple.com> | 2015-11-13 00:42:21 +0000 |
|---|---|---|
| committer | Akira Hatanaka <ahatanaka@apple.com> | 2015-11-13 00:42:21 +0000 |
| commit | 7828b1e604f22e81815a3c2fc357e319f2807bb8 (patch) | |
| tree | 0a15c5c8a42974829ad072a1e891cf4cb664ec6c /clang/test/CodeGen/attr-disable-tail-calls.c | |
| parent | c9dd057e3ccdbe44dd2aa2fd0303ff9a26c45f15 (diff) | |
| download | bcm5719-llvm-7828b1e604f22e81815a3c2fc357e319f2807bb8.tar.gz bcm5719-llvm-7828b1e604f22e81815a3c2fc357e319f2807bb8.zip | |
Add support for function attribute 'disable_tail_calls'.
The ``disable_tail_calls`` attribute instructs the backend to not
perform tail call optimization inside the marked function.
For example,
int callee(int);
int foo(int a) __attribute__((disable_tail_calls)) {
return callee(a); // This call is not tail-call optimized.
}
Note that this attribute is different from 'not_tail_called', which
prevents tail-call optimization to the marked function.
rdar://problem/8973573
Differential Revision: http://reviews.llvm.org/D12547
llvm-svn: 252986
Diffstat (limited to 'clang/test/CodeGen/attr-disable-tail-calls.c')
| -rw-r--r-- | clang/test/CodeGen/attr-disable-tail-calls.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/clang/test/CodeGen/attr-disable-tail-calls.c b/clang/test/CodeGen/attr-disable-tail-calls.c index 81413492ff3..d47b14fe8ba 100644 --- a/clang/test/CodeGen/attr-disable-tail-calls.c +++ b/clang/test/CodeGen/attr-disable-tail-calls.c @@ -1,11 +1,19 @@ -// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 %s -emit-llvm -mdisable-tail-calls -o - | FileCheck %s -check-prefix=CHECK -check-prefix=DISABLE -// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 %s -emit-llvm -o - | FileCheck %s -check-prefix=CHECK -check-prefix=ENABLE +// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 %s -emit-llvm -mdisable-tail-calls -o - | FileCheck %s -check-prefix=DISABLE +// RUN: %clang_cc1 -triple x86_64-apple-macosx10.7.0 %s -emit-llvm -o - | FileCheck %s -check-prefix=ENABLE -// CHECK: define i32 @f1() [[ATTR:#[0-9]+]] { +// DISABLE: define i32 @f1() [[ATTRTRUE:#[0-9]+]] { +// DISABLE: define i32 @f2() [[ATTRTRUE]] { +// ENABLE: define i32 @f1() [[ATTRFALSE:#[0-9]+]] { +// ENABLE: define i32 @f2() [[ATTRTRUE:#[0-9]+]] { int f1() { return 0; } -// DISABLE: attributes [[ATTR]] = { {{.*}} "disable-tail-calls"="true" {{.*}} } -// ENABLE: attributes [[ATTR]] = { {{.*}} "disable-tail-calls"="false" {{.*}} } +int f2() __attribute__((disable_tail_calls)) { + return 0; +} + +// DISABLE: attributes [[ATTRTRUE]] = { {{.*}}"disable-tail-calls"="true"{{.*}} } +// ENABLE: attributes [[ATTRFALSE]] = { {{.*}}"disable-tail-calls"="false"{{.*}} } +// ENABLE: attributes [[ATTRTRUE]] = { {{.*}}"disable-tail-calls"="true"{{.*}} } |

