Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This is a GNU attribute that causes calls within the attributed function to be inlined where possible. It is implemented by giving such calls the alwaysinline attribute. Differential Revision: http://reviews.llvm.org/D3816 llvm-svn: 209217
- Loading branch information
Showing
7 changed files
with
86 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
// RUN: %clang_cc1 -triple=x86_64-linux-gnu %s -emit-llvm -o - | FileCheck %s | ||
|
||
void f(void) {} | ||
|
||
__attribute__((noinline)) void ni(void) {} | ||
|
||
__attribute__((flatten)) | ||
// CHECK: define void @g() | ||
void g(void) { | ||
// CHECK-NOT: call {{.*}} @f | ||
f(); | ||
// CHECK: call {{.*}} @ni | ||
ni(); | ||
} | ||
|
||
void h(void) { | ||
// CHECK: call {{.*}} @f | ||
f(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
// RUN: %clang_cc1 -triple=x86_64-linux-gnu -std=c++11 %s -emit-llvm -o - | FileCheck %s | ||
|
||
void f(void) {} | ||
|
||
[[gnu::flatten]] | ||
// CHECK: define void @_Z1gv() | ||
void g(void) { | ||
// CHECK-NOT: call {{.*}} @_Z1fv | ||
f(); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s | ||
|
||
int i __attribute__((flatten)); // expected-error {{'flatten' attribute only applies to functions}} | ||
|
||
void f1() __attribute__((flatten)); | ||
void f2() __attribute__((flatten(1))); // expected-error {{'flatten' attribute takes no arguments}} | ||
|
||
template <typename T> | ||
void tf1() __attribute__((flatten)); | ||
|
||
int f3(int __attribute__((flatten)), int); // expected-error{{'flatten' attribute only applies to functions}} | ||
|
||
struct A { | ||
int f __attribute__((flatten)); // expected-error{{'flatten' attribute only applies to functions}} | ||
void mf1() __attribute__((flatten)); | ||
static void mf2() __attribute__((flatten)); | ||
}; | ||
|
||
int ci [[gnu::flatten]]; // expected-error {{'flatten' attribute only applies to functions}} | ||
|
||
[[gnu::flatten]] void cf1(); | ||
[[gnu::flatten(1)]] void cf2(); // expected-error {{'flatten' attribute takes no arguments}} | ||
|
||
template <typename T> | ||
[[gnu::flatten]] | ||
void ctf1(); | ||
|
||
int cf3(int c[[gnu::flatten]], int); // expected-error{{'flatten' attribute only applies to functions}} | ||
|
||
struct CA { | ||
int f [[gnu::flatten]]; // expected-error{{'flatten' attribute only applies to functions}} | ||
[[gnu::flatten]] void mf1(); | ||
[[gnu::flatten]] static void mf2(); | ||
}; |