blob: 2c38ad3e58f761e7ebf4f291623227d7dc5f5375 [file] [log] [blame]
Saleem Abdulrasool532dcbc2016-06-07 03:15:07 +00001; RUN: llc -mtriple thumbv7--windows-itanium %s -o - | FileCheck %s
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +00002
3@i = thread_local global i32 0
4@j = external thread_local global i32
5@k = internal thread_local global i32 0
6@l = hidden thread_local global i32 0
7@m = external hidden thread_local global i32
8@n = thread_local global i16 0
9@o = thread_local global i8 0
10
11define i32 @f() {
12 %1 = load i32, i32* @i
13 ret i32 %1
14}
15
16; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
17
Kristof Beylseecb3532017-06-28 07:07:03 +000018; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000019; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
20; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
21; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
22
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000023; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
24
Reid Kleckner741d8a22016-10-13 00:55:24 +000025; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000026
27; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
28
Saleem Abdulrasool532dcbc2016-06-07 03:15:07 +000029; CHECK: [[CPI]]:
30; CHECK-NEXT: .long i(SECREL32)
31
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000032define i32 @e() {
33 %1 = load i32, i32* @j
34 ret i32 %1
35}
36
37; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
38
Kristof Beylseecb3532017-06-28 07:07:03 +000039; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000040; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
41; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
42; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
43
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000044; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
45
Reid Kleckner741d8a22016-10-13 00:55:24 +000046; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000047
48; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
49
Saleem Abdulrasool532dcbc2016-06-07 03:15:07 +000050; CHECK: [[CPI]]:
51; CHECK-NEXT: .long j(SECREL32)
52
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000053define i32 @d() {
54 %1 = load i32, i32* @k
55 ret i32 %1
56}
57
58; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
59
Kristof Beylseecb3532017-06-28 07:07:03 +000060; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000061; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
62; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
63; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
64
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000065; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
66
Reid Kleckner741d8a22016-10-13 00:55:24 +000067; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000068
69; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
70
Saleem Abdulrasool532dcbc2016-06-07 03:15:07 +000071; CHECK: [[CPI]]:
72; CHECK-NEXT: .long k(SECREL32)
73
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000074define i32 @c() {
75 %1 = load i32, i32* @l
76 ret i32 %1
77}
78
79; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
80
Kristof Beylseecb3532017-06-28 07:07:03 +000081; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000082; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
83; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
84; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
85
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000086; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
87
Reid Kleckner741d8a22016-10-13 00:55:24 +000088; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000089
90; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
91
Saleem Abdulrasool532dcbc2016-06-07 03:15:07 +000092; CHECK: [[CPI]]:
93; CHECK-NEXT: .long l(SECREL32)
94
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +000095define i32 @b() {
96 %1 = load i32, i32* @m
97 ret i32 %1
98}
99
100; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
101
Kristof Beylseecb3532017-06-28 07:07:03 +0000102; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000103; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
104; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
105; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
106
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000107; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
108
Reid Kleckner741d8a22016-10-13 00:55:24 +0000109; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000110
111; CHECK-NEXT: ldr r0, {{\[}}[[TLS]], [[SLOT]]]
112
Saleem Abdulrasool532dcbc2016-06-07 03:15:07 +0000113; CHECK: [[CPI]]:
114; CHECK: .long m(SECREL32)
115
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000116define i16 @a() {
117 %1 = load i16, i16* @n
118 ret i16 %1
119}
120
121; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
122
Kristof Beylseecb3532017-06-28 07:07:03 +0000123; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000124; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
125; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
126; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
127
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000128; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
129
Reid Kleckner741d8a22016-10-13 00:55:24 +0000130; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000131
132; CHECK-NEXT: ldrh r0, {{\[}}[[TLS]], [[SLOT]]]
133
Saleem Abdulrasool532dcbc2016-06-07 03:15:07 +0000134; CHECK: [[CPI]]:
135; CHECK: .long n(SECREL32)
136
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000137define i8 @Z() {
138 %1 = load i8, i8* @o
139 ret i8 %1
140}
141
142; CHECK: mrc p15, #0, [[TEB:r[0-9]]], c13, c0, #2
143
Kristof Beylseecb3532017-06-28 07:07:03 +0000144; CHECK: ldr [[TLS_POINTER:r[0-9]]], {{\[}}[[TEB]], #44]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000145; CHECK: movw [[TLS_INDEX:r[0-9]]], :lower16:_tls_index
146; CHECK-NEXT: movt [[TLS_INDEX]], :upper16:_tls_index
147; CHECK-NEXT: ldr [[INDEX:r[0-9]]], {{\[}}[[TLS_INDEX]]]
148
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000149; CHECK-NEXT: ldr{{.w}} [[TLS:r[0-9]]], {{\[}}[[TLS_POINTER]], [[INDEX]], lsl #2]
150
Reid Kleckner741d8a22016-10-13 00:55:24 +0000151; CHECK-NEXT: ldr [[SLOT:r[0-9]]], [[CPI:\.LCPI[0-9]+_[0-9]+]]
Saleem Abdulrasoolf36005a2016-02-03 18:21:59 +0000152
153; CHECK-NEXT: ldrb r0, {{\[}}[[TLS]], [[SLOT]]]
154
Saleem Abdulrasool532dcbc2016-06-07 03:15:07 +0000155; CHECK: [[CPI]]:
156; CHECK-NEXT: .long o(SECREL32)
157