1
1
// Test that the use of thread local variables would be wrapped by @llvm.threadlocal.address intrinsics.
2
2
// RUN: %clang_cc1 -std=c++11 -emit-llvm -triple x86_64 -o - %s -disable-llvm-passes | FileCheck %s
3
3
// RUN: %clang_cc1 -std=c++11 -emit-llvm -triple aarch64 -o - -O1 %s | FileCheck %s -check-prefix=CHECK-O1
4
- // RUN: %clang_cc1 -std=c++11 -no-opaque-pointers -emit-llvm -triple x86_64 -o - %s -disable-llvm-passes | FileCheck %s -check-prefix=CHECK-NOOPAQUE
5
4
thread_local int i;
6
5
int g () {
7
6
i++;
@@ -29,16 +28,6 @@ int g() {
29
28
// CHECK-O1-NEXT: %[[INC:.+]] = add nsw i32 %[[VAL]], 1
30
29
// CHECK-O1-NEXT: store i32 %[[INC]], ptr %[[I_ADDR]]
31
30
// CHECK-O1-NEXT: ret i32 %[[INC]]
32
- //
33
- // CHECK-NOOPAQUE-LABEL: @_Z1gv
34
- // CHECK-NOOPAQUE-NEXT: entry:
35
- // CHECK-NOOPAQUE-NEXT: %[[I_ADDR:.+]] = call align 4 i32* @llvm.threadlocal.address.p0i32(i32* align 4 @i)
36
- // CHECK-NOOPAQUE-NEXT: %[[VAL:.+]] = load i32, i32* %[[I_ADDR]]
37
- // CHECK-NOOPAQUE-NEXT: %[[INC:.+]] = add nsw i32 %[[VAL]], 1
38
- // CHECK-NOOPAQUE-NEXT: store i32 %[[INC]], i32* %[[I_ADDR]]
39
- // CHECK-NOOPAQUE-NEXT: %[[IA2:.+]] = call align 4 i32* @llvm.threadlocal.address.p0i32(i32* align 4 @i)
40
- // CHECK-NOOPAQUE-NEXT: %[[RET:.+]] = load i32, i32* %[[IA2]], align 4
41
- // CHECK-NOOPAQUE-NEXT: ret i32 %[[RET]]
42
31
int f () {
43
32
thread_local int j = 0 ;
44
33
j++;
@@ -62,14 +51,4 @@ int f() {
62
51
// CHECK-O1-NEXT: store i32 %[[INC]], ptr %[[J_ADDR]]
63
52
// CHECK-O1-NEXT: ret i32 %[[INC]]
64
53
//
65
- // CHECK-NOOPAQUE: @_Z1fv()
66
- // CHECK-NOOPAQUE-NEXT: entry
67
- // CHECK-NOOPAQUE-NEXT: %[[JA:.+]] = call align 4 i32* @llvm.threadlocal.address.p0i32(i32* align 4 @_ZZ1fvE1j)
68
- // CHECK-NOOPAQUE-NEXT: %[[VA:.+]] = load i32, i32* %[[JA]]
69
- // CHECK-NOOPAQUE-NEXT: %[[INC:.+]] = add nsw i32 %[[VA]], 1
70
- // CHECK-NOOPAQUE-NEXT: store i32 %[[INC]], i32* %[[JA]], align 4
71
- // CHECK-NOOPAQUE-NEXT: %[[JA2:.+]] = call align 4 i32* @llvm.threadlocal.address.p0i32(i32* align 4 @_ZZ1fvE1j)
72
- // CHECK-NOOPAQUE-NEXT: %[[RET:.+]] = load i32, i32* %[[JA2]], align 4
73
- // CHECK-NOOPAQUE-NEXT: ret i32 %[[RET]]
74
- //
75
54
// CHECK: attributes #[[ATTR_NUM]] = { nocallback nofree nosync nounwind readnone speculatable willreturn }
0 commit comments