mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-27 13:16:08 +00:00

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
20 lines
773 B
C
20 lines
773 B
C
// 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
|
|
|
|
// 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;
|
|
}
|
|
|
|
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"{{.*}} }
|