Skip to content

Commit 24d5c4f

Browse files
authored
AtomicExpand: Switch X86 test to generated checks (#162968)
1 parent 0746ff3 commit 24d5c4f

File tree

1 file changed

+117
-79
lines changed

1 file changed

+117
-79
lines changed

llvm/test/Transforms/AtomicExpand/X86/expand-atomic-non-integer.ll

Lines changed: 117 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,152 +1,190 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
12
; RUN: opt -S %s -passes=atomic-expand -mtriple=x86_64-linux-gnu | FileCheck %s
23

34
; This file tests the functions `llvm::convertAtomicLoadToIntegerType` and
4-
; `llvm::convertAtomicStoreToIntegerType`. If X86 stops using this
5+
; `llvm::convertAtomicStoreToIntegerType`. If X86 stops using this
56
; functionality, please move this test to a target which still is.
67

78
define float @float_load_expand(ptr %ptr) {
8-
; CHECK-LABEL: @float_load_expand
9-
; CHECK: %1 = load atomic i32, ptr %ptr unordered, align 4
10-
; CHECK: %2 = bitcast i32 %1 to float
11-
; CHECK: ret float %2
9+
; CHECK-LABEL: define float @float_load_expand(
10+
; CHECK-SAME: ptr [[PTR:%.*]]) {
11+
; CHECK-NEXT: [[TMP1:%.*]] = load atomic i32, ptr [[PTR]] unordered, align 4
12+
; CHECK-NEXT: [[TMP2:%.*]] = bitcast i32 [[TMP1]] to float
13+
; CHECK-NEXT: ret float [[TMP2]]
14+
;
1215
%res = load atomic float, ptr %ptr unordered, align 4
1316
ret float %res
1417
}
1518

1619
define float @float_load_expand_seq_cst(ptr %ptr) {
17-
; CHECK-LABEL: @float_load_expand_seq_cst
18-
; CHECK: %1 = load atomic i32, ptr %ptr seq_cst, align 4
19-
; CHECK: %2 = bitcast i32 %1 to float
20-
; CHECK: ret float %2
20+
; CHECK-LABEL: define float @float_load_expand_seq_cst(
21+
; CHECK-SAME: ptr [[PTR:%.*]]) {
22+
; CHECK-NEXT: [[TMP1:%.*]] = load atomic i32, ptr [[PTR]] seq_cst, align 4
23+
; CHECK-NEXT: [[TMP2:%.*]] = bitcast i32 [[TMP1]] to float
24+
; CHECK-NEXT: ret float [[TMP2]]
25+
;
2126
%res = load atomic float, ptr %ptr seq_cst, align 4
2227
ret float %res
2328
}
2429

2530
define float @float_load_expand_vol(ptr %ptr) {
26-
; CHECK-LABEL: @float_load_expand_vol
27-
; CHECK: %1 = load atomic volatile i32, ptr %ptr unordered, align 4
28-
; CHECK: %2 = bitcast i32 %1 to float
29-
; CHECK: ret float %2
31+
; CHECK-LABEL: define float @float_load_expand_vol(
32+
; CHECK-SAME: ptr [[PTR:%.*]]) {
33+
; CHECK-NEXT: [[TMP1:%.*]] = load atomic volatile i32, ptr [[PTR]] unordered, align 4
34+
; CHECK-NEXT: [[TMP2:%.*]] = bitcast i32 [[TMP1]] to float
35+
; CHECK-NEXT: ret float [[TMP2]]
36+
;
3037
%res = load atomic volatile float, ptr %ptr unordered, align 4
3138
ret float %res
3239
}
3340

3441
define float @float_load_expand_addr1(ptr addrspace(1) %ptr) {
35-
; CHECK-LABEL: @float_load_expand_addr1
36-
; CHECK: %1 = load atomic i32, ptr addrspace(1) %ptr unordered, align 4
37-
; CHECK: %2 = bitcast i32 %1 to float
38-
; CHECK: ret float %2
42+
; CHECK-LABEL: define float @float_load_expand_addr1(
43+
; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]]) {
44+
; CHECK-NEXT: [[TMP1:%.*]] = load atomic i32, ptr addrspace(1) [[PTR]] unordered, align 4
45+
; CHECK-NEXT: [[TMP2:%.*]] = bitcast i32 [[TMP1]] to float
46+
; CHECK-NEXT: ret float [[TMP2]]
47+
;
3948
%res = load atomic float, ptr addrspace(1) %ptr unordered, align 4
4049
ret float %res
4150
}
4251

4352
define void @float_store_expand(ptr %ptr, float %v) {
44-
; CHECK-LABEL: @float_store_expand
45-
; CHECK: %1 = bitcast float %v to i32
46-
; CHECK: store atomic i32 %1, ptr %ptr unordered, align 4
53+
; CHECK-LABEL: define void @float_store_expand(
54+
; CHECK-SAME: ptr [[PTR:%.*]], float [[V:%.*]]) {
55+
; CHECK-NEXT: [[TMP1:%.*]] = bitcast float [[V]] to i32
56+
; CHECK-NEXT: store atomic i32 [[TMP1]], ptr [[PTR]] unordered, align 4
57+
; CHECK-NEXT: ret void
58+
;
4759
store atomic float %v, ptr %ptr unordered, align 4
4860
ret void
4961
}
5062

5163
define void @float_store_expand_seq_cst(ptr %ptr, float %v) {
52-
; CHECK-LABEL: @float_store_expand_seq_cst
53-
; CHECK: %1 = bitcast float %v to i32
54-
; CHECK: store atomic i32 %1, ptr %ptr seq_cst, align 4
64+
; CHECK-LABEL: define void @float_store_expand_seq_cst(
65+
; CHECK-SAME: ptr [[PTR:%.*]], float [[V:%.*]]) {
66+
; CHECK-NEXT: [[TMP1:%.*]] = bitcast float [[V]] to i32
67+
; CHECK-NEXT: store atomic i32 [[TMP1]], ptr [[PTR]] seq_cst, align 4
68+
; CHECK-NEXT: ret void
69+
;
5570
store atomic float %v, ptr %ptr seq_cst, align 4
5671
ret void
5772
}
5873

5974
define void @float_store_expand_vol(ptr %ptr, float %v) {
60-
; CHECK-LABEL: @float_store_expand_vol
61-
; CHECK: %1 = bitcast float %v to i32
62-
; CHECK: store atomic volatile i32 %1, ptr %ptr unordered, align 4
75+
; CHECK-LABEL: define void @float_store_expand_vol(
76+
; CHECK-SAME: ptr [[PTR:%.*]], float [[V:%.*]]) {
77+
; CHECK-NEXT: [[TMP1:%.*]] = bitcast float [[V]] to i32
78+
; CHECK-NEXT: store atomic volatile i32 [[TMP1]], ptr [[PTR]] unordered, align 4
79+
; CHECK-NEXT: ret void
80+
;
6381
store atomic volatile float %v, ptr %ptr unordered, align 4
6482
ret void
6583
}
6684

6785
define void @float_store_expand_addr1(ptr addrspace(1) %ptr, float %v) {
68-
; CHECK-LABEL: @float_store_expand_addr1
69-
; CHECK: %1 = bitcast float %v to i32
70-
; CHECK: store atomic i32 %1, ptr addrspace(1) %ptr unordered, align 4
86+
; CHECK-LABEL: define void @float_store_expand_addr1(
87+
; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]], float [[V:%.*]]) {
88+
; CHECK-NEXT: [[TMP1:%.*]] = bitcast float [[V]] to i32
89+
; CHECK-NEXT: store atomic i32 [[TMP1]], ptr addrspace(1) [[PTR]] unordered, align 4
90+
; CHECK-NEXT: ret void
91+
;
7192
store atomic float %v, ptr addrspace(1) %ptr unordered, align 4
7293
ret void
7394
}
7495

7596
define void @pointer_cmpxchg_expand(ptr %ptr, ptr %v) {
76-
; CHECK-LABEL: @pointer_cmpxchg_expand
77-
; CHECK: %1 = ptrtoint ptr %v to i64
78-
; CHECK: %2 = cmpxchg ptr %ptr, i64 0, i64 %1 seq_cst monotonic
79-
; CHECK: %3 = extractvalue { i64, i1 } %2, 0
80-
; CHECK: %4 = extractvalue { i64, i1 } %2, 1
81-
; CHECK: %5 = inttoptr i64 %3 to ptr
82-
; CHECK: %6 = insertvalue { ptr, i1 } poison, ptr %5, 0
83-
; CHECK: %7 = insertvalue { ptr, i1 } %6, i1 %4, 1
97+
; CHECK-LABEL: define void @pointer_cmpxchg_expand(
98+
; CHECK-SAME: ptr [[PTR:%.*]], ptr [[V:%.*]]) {
99+
; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[V]] to i64
100+
; CHECK-NEXT: [[TMP2:%.*]] = cmpxchg ptr [[PTR]], i64 0, i64 [[TMP1]] seq_cst monotonic, align 8
101+
; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0
102+
; CHECK-NEXT: [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1
103+
; CHECK-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr
104+
; CHECK-NEXT: [[TMP6:%.*]] = insertvalue { ptr, i1 } poison, ptr [[TMP5]], 0
105+
; CHECK-NEXT: [[TMP7:%.*]] = insertvalue { ptr, i1 } [[TMP6]], i1 [[TMP4]], 1
106+
; CHECK-NEXT: ret void
107+
;
84108
cmpxchg ptr %ptr, ptr null, ptr %v seq_cst monotonic
85109
ret void
86110
}
87111

88112
define void @pointer_cmpxchg_expand2(ptr %ptr, ptr %v) {
89-
; CHECK-LABEL: @pointer_cmpxchg_expand2
90-
; CHECK: %1 = ptrtoint ptr %v to i64
91-
; CHECK: %2 = cmpxchg ptr %ptr, i64 0, i64 %1 release monotonic
92-
; CHECK: %3 = extractvalue { i64, i1 } %2, 0
93-
; CHECK: %4 = extractvalue { i64, i1 } %2, 1
94-
; CHECK: %5 = inttoptr i64 %3 to ptr
95-
; CHECK: %6 = insertvalue { ptr, i1 } poison, ptr %5, 0
96-
; CHECK: %7 = insertvalue { ptr, i1 } %6, i1 %4, 1
113+
; CHECK-LABEL: define void @pointer_cmpxchg_expand2(
114+
; CHECK-SAME: ptr [[PTR:%.*]], ptr [[V:%.*]]) {
115+
; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[V]] to i64
116+
; CHECK-NEXT: [[TMP2:%.*]] = cmpxchg ptr [[PTR]], i64 0, i64 [[TMP1]] release monotonic, align 8
117+
; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0
118+
; CHECK-NEXT: [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1
119+
; CHECK-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr
120+
; CHECK-NEXT: [[TMP6:%.*]] = insertvalue { ptr, i1 } poison, ptr [[TMP5]], 0
121+
; CHECK-NEXT: [[TMP7:%.*]] = insertvalue { ptr, i1 } [[TMP6]], i1 [[TMP4]], 1
122+
; CHECK-NEXT: ret void
123+
;
97124
cmpxchg ptr %ptr, ptr null, ptr %v release monotonic
98125
ret void
99126
}
100127

101128
define void @pointer_cmpxchg_expand3(ptr %ptr, ptr %v) {
102-
; CHECK-LABEL: @pointer_cmpxchg_expand3
103-
; CHECK: %1 = ptrtoint ptr %v to i64
104-
; CHECK: %2 = cmpxchg ptr %ptr, i64 0, i64 %1 seq_cst seq_cst
105-
; CHECK: %3 = extractvalue { i64, i1 } %2, 0
106-
; CHECK: %4 = extractvalue { i64, i1 } %2, 1
107-
; CHECK: %5 = inttoptr i64 %3 to ptr
108-
; CHECK: %6 = insertvalue { ptr, i1 } poison, ptr %5, 0
109-
; CHECK: %7 = insertvalue { ptr, i1 } %6, i1 %4, 1
129+
; CHECK-LABEL: define void @pointer_cmpxchg_expand3(
130+
; CHECK-SAME: ptr [[PTR:%.*]], ptr [[V:%.*]]) {
131+
; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[V]] to i64
132+
; CHECK-NEXT: [[TMP2:%.*]] = cmpxchg ptr [[PTR]], i64 0, i64 [[TMP1]] seq_cst seq_cst, align 8
133+
; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0
134+
; CHECK-NEXT: [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1
135+
; CHECK-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr
136+
; CHECK-NEXT: [[TMP6:%.*]] = insertvalue { ptr, i1 } poison, ptr [[TMP5]], 0
137+
; CHECK-NEXT: [[TMP7:%.*]] = insertvalue { ptr, i1 } [[TMP6]], i1 [[TMP4]], 1
138+
; CHECK-NEXT: ret void
139+
;
110140
cmpxchg ptr %ptr, ptr null, ptr %v seq_cst seq_cst
111141
ret void
112142
}
113143

114144
define void @pointer_cmpxchg_expand4(ptr %ptr, ptr %v) {
115-
; CHECK-LABEL: @pointer_cmpxchg_expand4
116-
; CHECK: %1 = ptrtoint ptr %v to i64
117-
; CHECK: %2 = cmpxchg weak ptr %ptr, i64 0, i64 %1 seq_cst seq_cst
118-
; CHECK: %3 = extractvalue { i64, i1 } %2, 0
119-
; CHECK: %4 = extractvalue { i64, i1 } %2, 1
120-
; CHECK: %5 = inttoptr i64 %3 to ptr
121-
; CHECK: %6 = insertvalue { ptr, i1 } poison, ptr %5, 0
122-
; CHECK: %7 = insertvalue { ptr, i1 } %6, i1 %4, 1
145+
; CHECK-LABEL: define void @pointer_cmpxchg_expand4(
146+
; CHECK-SAME: ptr [[PTR:%.*]], ptr [[V:%.*]]) {
147+
; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[V]] to i64
148+
; CHECK-NEXT: [[TMP2:%.*]] = cmpxchg weak ptr [[PTR]], i64 0, i64 [[TMP1]] seq_cst seq_cst, align 8
149+
; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0
150+
; CHECK-NEXT: [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1
151+
; CHECK-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr
152+
; CHECK-NEXT: [[TMP6:%.*]] = insertvalue { ptr, i1 } poison, ptr [[TMP5]], 0
153+
; CHECK-NEXT: [[TMP7:%.*]] = insertvalue { ptr, i1 } [[TMP6]], i1 [[TMP4]], 1
154+
; CHECK-NEXT: ret void
155+
;
123156
cmpxchg weak ptr %ptr, ptr null, ptr %v seq_cst seq_cst
124157
ret void
125158
}
126159

127160
define void @pointer_cmpxchg_expand5(ptr %ptr, ptr %v) {
128-
; CHECK-LABEL: @pointer_cmpxchg_expand5
129-
; CHECK: %1 = ptrtoint ptr %v to i64
130-
; CHECK: %2 = cmpxchg volatile ptr %ptr, i64 0, i64 %1 seq_cst seq_cst
131-
; CHECK: %3 = extractvalue { i64, i1 } %2, 0
132-
; CHECK: %4 = extractvalue { i64, i1 } %2, 1
133-
; CHECK: %5 = inttoptr i64 %3 to ptr
134-
; CHECK: %6 = insertvalue { ptr, i1 } poison, ptr %5, 0
135-
; CHECK: %7 = insertvalue { ptr, i1 } %6, i1 %4, 1
161+
; CHECK-LABEL: define void @pointer_cmpxchg_expand5(
162+
; CHECK-SAME: ptr [[PTR:%.*]], ptr [[V:%.*]]) {
163+
; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr [[V]] to i64
164+
; CHECK-NEXT: [[TMP2:%.*]] = cmpxchg volatile ptr [[PTR]], i64 0, i64 [[TMP1]] seq_cst seq_cst, align 8
165+
; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0
166+
; CHECK-NEXT: [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1
167+
; CHECK-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr
168+
; CHECK-NEXT: [[TMP6:%.*]] = insertvalue { ptr, i1 } poison, ptr [[TMP5]], 0
169+
; CHECK-NEXT: [[TMP7:%.*]] = insertvalue { ptr, i1 } [[TMP6]], i1 [[TMP4]], 1
170+
; CHECK-NEXT: ret void
171+
;
136172
cmpxchg volatile ptr %ptr, ptr null, ptr %v seq_cst seq_cst
137173
ret void
138174
}
139175

140-
define void @pointer_cmpxchg_expand6(ptr addrspace(1) %ptr,
141-
ptr addrspace(2) %v) {
142-
; CHECK-LABEL: @pointer_cmpxchg_expand6
143-
; CHECK: %1 = ptrtoint ptr addrspace(2) %v to i64
144-
; CHECK: %2 = cmpxchg ptr addrspace(1) %ptr, i64 0, i64 %1 seq_cst seq_cst
145-
; CHECK: %3 = extractvalue { i64, i1 } %2, 0
146-
; CHECK: %4 = extractvalue { i64, i1 } %2, 1
147-
; CHECK: %5 = inttoptr i64 %3 to ptr addrspace(2)
148-
; CHECK: %6 = insertvalue { ptr addrspace(2), i1 } poison, ptr addrspace(2) %5, 0
149-
; CHECK: %7 = insertvalue { ptr addrspace(2), i1 } %6, i1 %4, 1
176+
define void @pointer_cmpxchg_expand6(ptr addrspace(1) %ptr, ptr addrspace(2) %v) {
177+
; CHECK-LABEL: define void @pointer_cmpxchg_expand6(
178+
; CHECK-SAME: ptr addrspace(1) [[PTR:%.*]], ptr addrspace(2) [[V:%.*]]) {
179+
; CHECK-NEXT: [[TMP1:%.*]] = ptrtoint ptr addrspace(2) [[V]] to i64
180+
; CHECK-NEXT: [[TMP2:%.*]] = cmpxchg ptr addrspace(1) [[PTR]], i64 0, i64 [[TMP1]] seq_cst seq_cst, align 8
181+
; CHECK-NEXT: [[TMP3:%.*]] = extractvalue { i64, i1 } [[TMP2]], 0
182+
; CHECK-NEXT: [[TMP4:%.*]] = extractvalue { i64, i1 } [[TMP2]], 1
183+
; CHECK-NEXT: [[TMP5:%.*]] = inttoptr i64 [[TMP3]] to ptr addrspace(2)
184+
; CHECK-NEXT: [[TMP6:%.*]] = insertvalue { ptr addrspace(2), i1 } poison, ptr addrspace(2) [[TMP5]], 0
185+
; CHECK-NEXT: [[TMP7:%.*]] = insertvalue { ptr addrspace(2), i1 } [[TMP6]], i1 [[TMP4]], 1
186+
; CHECK-NEXT: ret void
187+
;
150188
cmpxchg ptr addrspace(1) %ptr, ptr addrspace(2) null, ptr addrspace(2) %v seq_cst seq_cst
151189
ret void
152190
}

0 commit comments

Comments
 (0)