Lines Matching refs:atomic

7 ; Check transforms involving atomic operations
11 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* [[P:%.*]] seq_cst, align 4
15 %x = load atomic i32, i32* %p seq_cst, align 4
49 ; Forwarding from a stronger ordered atomic is fine
52 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* [[P:%.*]] seq_cst, align 4
56 %x = load atomic i32, i32* %p seq_cst, align 4
57 %y = load atomic i32, i32* %p unordered, align 4
62 ; Forwarding from a non-atomic is not. (The earlier load
63 ; could in priciple be promoted to atomic and then forwarded,
64 ; but we can't just drop the atomic from the load.)
67 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* [[P:%.*]] unordered, align 4
71 %x = load atomic i32, i32* %p unordered, align 4
77 ; Forwarding atomic to atomic is fine
80 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* [[P:%.*]] unordered, align 4
84 %x = load atomic i32, i32* %p unordered, align 4
85 %y = load atomic i32, i32* %p unordered, align 4
93 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* [[P:%.*]] seq_cst, align 4
94 ; CHECK-NEXT: [[Y:%.*]] = load atomic i32, i32* [[P]] monotonic, align 4
98 %x = load atomic i32, i32* %p seq_cst, align 4
99 %y = load atomic i32, i32* %p monotonic, align 4
107 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* [[P:%.*]] seq_cst, align 4
108 ; CHECK-NEXT: [[Y:%.*]] = load atomic i32, i32* [[P]] acquire, align 4
112 %x = load atomic i32, i32* %p seq_cst, align 4
113 %y = load atomic i32, i32* %p acquire, align 4
125 %x = load atomic i32, i32* null unordered, align 4
131 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null unordered, align 4294967296
134 %x = load atomic i32, i32* null unordered, align 4
141 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null monotonic, align 4294967296
144 %x = load atomic i32, i32* null monotonic, align 4
150 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null monotonic, align 4294967296
153 %x = load atomic i32, i32* null monotonic, align 4
160 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null seq_cst, align 4294967296
163 %x = load atomic i32, i32* null seq_cst, align 4
169 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* null seq_cst, align 4294967296
172 %x = load atomic i32, i32* null seq_cst, align 4
180 ; CHECK-NEXT: store atomic i32 poison, i32* null unordered, align 4294967296
183 store atomic i32 0, i32* null unordered, align 4
189 ; CHECK-NEXT: store atomic i32 0, i32* null unordered, align 4294967296
192 store atomic i32 0, i32* null unordered, align 4
199 ; CHECK-NEXT: store atomic i32 0, i32* null monotonic, align 4294967296
202 store atomic i32 0, i32* null monotonic, align 4
208 ; CHECK-NEXT: store atomic i32 0, i32* null monotonic, align 4294967296
211 store atomic i32 0, i32* null monotonic, align 4
218 ; CHECK-NEXT: store atomic i32 0, i32* null seq_cst, align 4294967296
221 store atomic i32 0, i32* null seq_cst, align 4
227 ; CHECK-NEXT: store atomic i32 0, i32* null seq_cst, align 4294967296
230 store atomic i32 0, i32* null seq_cst, align 4
239 ; CHECK-NEXT: [[A_VAL:%.*]] = load atomic i32, i32* @a unordered, align 4
240 ; CHECK-NEXT: [[B_VAL:%.*]] = load atomic i32, i32* @b unordered, align 4
245 %x = load atomic i32, i32* %addr unordered, align 4
253 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* [[ADDR]] monotonic, align 4
257 %x = load atomic i32, i32* %addr monotonic, align 4
265 ; CHECK-NEXT: [[X:%.*]] = load atomic i32, i32* [[ADDR]] seq_cst, align 4
269 %x = load atomic i32, i32* %addr seq_cst, align 4
282 ; CHECK-NEXT: store atomic i32 [[STOREMERGE]], i32* @a unordered, align 4
288 store atomic i32 1, i32* @a unordered, align 4
291 store atomic i32 2, i32* @a unordered, align 4
303 ; CHECK-NEXT: store atomic i32 1, i32* @a monotonic, align 4
306 ; CHECK-NEXT: store atomic i32 2, i32* @a monotonic, align 4
314 store atomic i32 1, i32* @a monotonic, align 4
317 store atomic i32 2, i32* @a monotonic, align 4
328 ; CHECK-NEXT: [[X:%.*]] = load atomic float, float* [[P:%.*]] unordered, align 4
330 ; CHECK-NEXT: store atomic float [[X]], float* [[P]] unordered, align 4
333 %x = load atomic float, float* %p unordered, align 4
335 store atomic float %x, float* %p unordered, align 4
342 ; CHECK-NEXT: [[X:%.*]] = load atomic float, float* [[P:%.*]] seq_cst, align 4
344 ; CHECK-NEXT: store atomic float [[X]], float* [[P]] seq_cst, align 4
347 %x = load atomic float, float* %p seq_cst, align 4
349 store atomic float %x, float* %p seq_cst, align 4
356 ; CHECK-NEXT: store atomic i8* [[V:%.*]], i8** [[TMP1]] unordered, align 4
360 store atomic i32* %cast, i32** %p unordered, align 4
367 ; CHECK-NEXT: store atomic i32* [[CAST]], i32** [[P:%.*]] monotonic, align 4
371 store atomic i32* %cast, i32** %p monotonic, align 4
389 ; CHECK-NEXT: store atomic i8* [[L]], i8** [[P2:%.*]] seq_cst, align 8
393 store atomic i8* %l, i8** %p2 seq_cst, align 8
397 ;; At the moment, we can't form atomic vectors by folding since these are
402 ; CHECK-NEXT: [[LOAD:%.*]] = load atomic i64, i64* [[P:%.*]] unordered, align 8
406 %load = load atomic i64, i64* %p unordered, align 8
415 ; CHECK-NEXT: store atomic i64 [[TMP1]], i64* [[TMP2]] unordered, align 8
420 store atomic i64 %1, i64* %2 unordered, align 8
431 %v = load atomic i32, i32* @c seq_cst, align 4
439 %v = load atomic i8, i8* bitcast (i32* @c to i8*) seq_cst, align 1
445 ; CHECK-NEXT: [[TMP1:%.*]] = load atomic i32, i32* @g seq_cst, align 4
448 load atomic i32, i32* @g seq_cst, align 4