| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 1 | ;; Check that runtime symbols get appropriate linkage. | 
|  | 2 |  | 
| Xinliang David Li | 7a88ad6 | 2015-10-29 04:08:31 +0000 | [diff] [blame] | 3 | ; RUN: opt < %s -mtriple=x86_64-apple-macosx10.10.0 -instrprof -S | FileCheck %s --check-prefix=OTHER --check-prefix=COMMON | 
|  | 4 | ; RUN: opt < %s -mtriple=x86_64-unknown-linux -instrprof -S | FileCheck %s --check-prefix=LINUX --check-prefix=COMMON | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 5 |  | 
| Xinliang David Li | 0812747 | 2015-12-14 23:26:27 +0000 | [diff] [blame^] | 6 | @__prf_nm_foo = hidden constant [3 x i8] c"foo" | 
|  | 7 | @__prf_nm_foo_weak = weak hidden constant [8 x i8] c"foo_weak" | 
|  | 8 | @"__prf_nm_linkage.ll:foo_internal" = internal constant [23 x i8] c"linkage.ll:foo_internal" | 
|  | 9 | @__prf_nm_foo_inline = linkonce_odr hidden constant [10 x i8] c"foo_inline" | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 10 |  | 
| Xinliang David Li | 0812747 | 2015-12-14 23:26:27 +0000 | [diff] [blame^] | 11 | ; COMMON: @__prf_cn_foo = hidden global | 
|  | 12 | ; COMMON: @__prf_dt_foo = hidden global | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 13 | define void @foo() { | 
| Xinliang David Li | 0812747 | 2015-12-14 23:26:27 +0000 | [diff] [blame^] | 14 | call void @llvm.instrprof.increment(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @__prf_nm_foo, i32 0, i32 0), i64 0, i32 1, i32 0) | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 15 | ret void | 
|  | 16 | } | 
|  | 17 |  | 
| Xinliang David Li | 0812747 | 2015-12-14 23:26:27 +0000 | [diff] [blame^] | 18 | ; COMMON: @__prf_cn_foo_weak = weak hidden global | 
|  | 19 | ; COMMON: @__prf_dt_foo_weak = weak hidden global | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 20 | define weak void @foo_weak() { | 
| Xinliang David Li | 0812747 | 2015-12-14 23:26:27 +0000 | [diff] [blame^] | 21 | call void @llvm.instrprof.increment(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @__prf_nm_foo_weak, i32 0, i32 0), i64 0, i32 1, i32 0) | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 22 | ret void | 
|  | 23 | } | 
|  | 24 |  | 
| Xinliang David Li | 0812747 | 2015-12-14 23:26:27 +0000 | [diff] [blame^] | 25 | ; COMMON: @"__prf_cn_linkage.ll:foo_internal" = internal global | 
|  | 26 | ; COMMON: @"__prf_dt_linkage.ll:foo_internal" = internal global | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 27 | define internal void @foo_internal() { | 
| Xinliang David Li | 0812747 | 2015-12-14 23:26:27 +0000 | [diff] [blame^] | 28 | call void @llvm.instrprof.increment(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @"__prf_nm_linkage.ll:foo_internal", i32 0, i32 0), i64 0, i32 1, i32 0) | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 29 | ret void | 
|  | 30 | } | 
|  | 31 |  | 
| Xinliang David Li | 0812747 | 2015-12-14 23:26:27 +0000 | [diff] [blame^] | 32 | ; COMMON: @__prf_cn_foo_inline = linkonce_odr hidden global | 
|  | 33 | ; COMMON: @__prf_dt_foo_inline = linkonce_odr hidden global | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 34 | define linkonce_odr void @foo_inline() { | 
| Xinliang David Li | 0812747 | 2015-12-14 23:26:27 +0000 | [diff] [blame^] | 35 | call void @llvm.instrprof.increment(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @__prf_nm_foo_inline, i32 0, i32 0), i64 0, i32 1, i32 0) | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 36 | ret void | 
|  | 37 | } | 
|  | 38 |  | 
|  | 39 | declare void @llvm.instrprof.increment(i8*, i64, i32, i32) | 
|  | 40 |  | 
| Xinliang David Li | 7a88ad6 | 2015-10-29 04:08:31 +0000 | [diff] [blame] | 41 | ; OTHER: @__llvm_profile_runtime = external global i32 | 
|  | 42 | ; LINUX-NOT: @__llvm_profile_runtime = external global i32 | 
| Justin Bogner | 2ce4805 | 2015-02-24 21:42:42 +0000 | [diff] [blame] | 43 |  | 
| Xinliang David Li | 7a88ad6 | 2015-10-29 04:08:31 +0000 | [diff] [blame] | 44 | ; OTHER: define linkonce_odr hidden i32 @__llvm_profile_runtime_user() {{.*}} { | 
|  | 45 | ; OTHER:   %[[REG:.*]] = load i32, i32* @__llvm_profile_runtime | 
|  | 46 | ; OTHER:   ret i32 %[[REG]] | 
|  | 47 | ; OTHER: } | 
|  | 48 | ; LINUX-NOT: define linkonce_odr hidden i32 @__llvm_profile_runtime_user() {{.*}} { | 
|  | 49 | ; LINUX-NOT:   %[[REG:.*]] = load i32, i32* @__llvm_profile_runtime |