diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2015-06-25 23:50:40 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2015-06-25 23:50:40 +0000 |
| commit | 41011f6706e37cecab4797e4e95a9273ca999930 (patch) | |
| tree | d2b0a3abb20ca1f302c27d03261c29cc27b4f790 /clang/test/CodeGen/pr9614.c | |
| parent | 26ffc5f7fb63dc00e68a3c7199441a396bcfbad9 (diff) | |
| download | bcm5719-llvm-41011f6706e37cecab4797e4e95a9273ca999930.tar.gz bcm5719-llvm-41011f6706e37cecab4797e4e95a9273ca999930.zip | |
[CodeGen] Restrict isTriviallyRecursive to predefined lib functions forwarding to lib functions
isTriviallyRecursive is only supposed to guard functions part of the
implementation.
This fixes PR23953.
llvm-svn: 240735
Diffstat (limited to 'clang/test/CodeGen/pr9614.c')
| -rw-r--r-- | clang/test/CodeGen/pr9614.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/clang/test/CodeGen/pr9614.c b/clang/test/CodeGen/pr9614.c index 53abef1801d..de21dbbb23f 100644 --- a/clang/test/CodeGen/pr9614.c +++ b/clang/test/CodeGen/pr9614.c @@ -4,26 +4,35 @@ extern void foo_alias (void) __asm ("foo"); inline void foo (void) { return foo_alias (); } -extern void bar_alias (void) __asm ("bar"); -inline __attribute__ ((__always_inline__)) void bar (void) { - return bar_alias (); +extern int abs_alias (int) __asm ("abs"); +inline __attribute__ ((__always_inline__)) int abs (int x) { + return abs_alias(x); } extern char *strrchr_foo (const char *__s, int __c) __asm ("strrchr"); extern inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * strrchr_foo (const char *__s, int __c) { return __builtin_strrchr (__s, __c); } + +extern inline void __attribute__((always_inline, __gnu_inline__)) +prefetch(void) { + __builtin_prefetch(0, 0, 1); +} + void f(void) { foo(); - bar(); + abs(0); strrchr_foo("", '.'); + prefetch(); } // CHECK-LABEL: define void @f() // CHECK: call void @foo() -// CHECK-NEXT: call void @bar() -// CHECK-NEXT: call i8* @strrchr( -// CHECK-NEXT: ret void +// CHECK: call i32 @abs(i32 0) +// CHECK: call i8* @strrchr( +// CHECK: call void @llvm.prefetch( +// CHECK: ret void // CHECK: declare void @foo() -// CHECK: declare void @bar() +// CHECK: declare i32 @abs(i32 // CHECK: declare i8* @strrchr(i8*, i32) +// CHECK: declare void @llvm.prefetch( |

