| 1 | // RUN: %clang_cc1 -triple x86_64-pc-linux -emit-llvm %s -o - | FileCheck %s |
| 2 | |
| 3 | extern void foo_alias (void) __asm ("foo"); |
| 4 | inline void foo (void) { |
| 5 | return foo_alias (); |
| 6 | } |
| 7 | extern int abs_alias (int) __asm ("abs"); |
| 8 | inline __attribute__ ((__always_inline__)) int abs (int x) { |
| 9 | return abs_alias(x); |
| 10 | } |
| 11 | extern char *strrchr_foo (const char *__s, int __c) __asm ("strrchr"); |
| 12 | extern inline __attribute__ ((__always_inline__)) __attribute__ ((__gnu_inline__)) char * strrchr_foo (const char *__s, int __c) { |
| 13 | return __builtin_strrchr (__s, __c); |
| 14 | } |
| 15 | |
| 16 | extern inline void __attribute__((always_inline, __gnu_inline__)) |
| 17 | prefetch(void) { |
| 18 | __builtin_prefetch(0, 0, 1); |
| 19 | } |
| 20 | |
| 21 | extern inline __attribute__((__always_inline__, __gnu_inline__)) void *memchr(void *__s, int __c, __SIZE_TYPE__ __n) { |
| 22 | return __builtin_memchr(__s, __c, __n); |
| 23 | } |
| 24 | |
| 25 | void f(void) { |
| 26 | foo(); |
| 27 | abs(0); |
| 28 | strrchr_foo("", '.'); |
| 29 | prefetch(); |
| 30 | memchr("", '.', 0); |
| 31 | } |
| 32 | |
| 33 | // CHECK-LABEL: define void @f() |
| 34 | // CHECK: call void @foo() |
| 35 | // CHECK: call i32 @abs(i32 0) |
| 36 | // CHECK: call i8* @strrchr( |
| 37 | // CHECK: call void @llvm.prefetch( |
| 38 | // CHECK: call i8* @memchr( |
| 39 | // CHECK: ret void |
| 40 | |
| 41 | // CHECK: declare void @foo() |
| 42 | // CHECK: declare i32 @abs(i32 |
| 43 | // CHECK: declare i8* @strrchr(i8*, i32) |
| 44 | // CHECK: declare i8* @memchr( |
| 45 | // CHECK: declare void @llvm.prefetch( |
| 46 | |