brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.4 KiB · 6609edc Raw
138 lines · plain
1; RUN: opt < %s | opt -S | FileCheck %s2; RUN: verify-uselistorder %s3; Basic smoke test for atomic operations.4 5define void @f(ptr %x) {6  ; CHECK: load atomic i32, ptr %x unordered, align 47  load atomic i32, ptr %x unordered, align 48  ; CHECK: load atomic volatile i32, ptr %x syncscope("singlethread") acquire, align 49  load atomic volatile i32, ptr %x syncscope("singlethread") acquire, align 410  ; CHECK: load atomic volatile i32, ptr %x syncscope("agent") acquire, align 411  load atomic volatile i32, ptr %x syncscope("agent") acquire, align 412  ; CHECK: store atomic i32 3, ptr %x release, align 413  store atomic i32 3, ptr %x release, align 414  ; CHECK: store atomic volatile i32 3, ptr %x syncscope("singlethread") monotonic, align 415  store atomic volatile i32 3, ptr %x syncscope("singlethread") monotonic, align 416  ; CHECK: store atomic volatile i32 3, ptr %x syncscope("workgroup") monotonic, align 417  store atomic volatile i32 3, ptr %x syncscope("workgroup") monotonic, align 418  ; CHECK: cmpxchg ptr %x, i32 1, i32 0 syncscope("singlethread") monotonic monotonic19  cmpxchg ptr %x, i32 1, i32 0 syncscope("singlethread") monotonic monotonic20  ; CHECK: cmpxchg ptr %x, i32 1, i32 0 syncscope("workitem") monotonic monotonic21  cmpxchg ptr %x, i32 1, i32 0 syncscope("workitem") monotonic monotonic22  ; CHECK: cmpxchg volatile ptr %x, i32 0, i32 1 acq_rel acquire23  cmpxchg volatile ptr %x, i32 0, i32 1 acq_rel acquire24  ; CHECK: cmpxchg ptr %x, i32 42, i32 0 acq_rel monotonic25  cmpxchg ptr %x, i32 42, i32 0 acq_rel monotonic26  ; CHECK: cmpxchg weak ptr %x, i32 13, i32 0 seq_cst monotonic27  cmpxchg weak ptr %x, i32 13, i32 0 seq_cst monotonic28  ; CHECK: atomicrmw add ptr %x, i32 10 seq_cst29  atomicrmw add ptr %x, i32 10 seq_cst30  ; CHECK: atomicrmw volatile xchg  ptr %x, i32 10 monotonic31  atomicrmw volatile xchg ptr %x, i32 10 monotonic32  ; CHECK: atomicrmw volatile xchg  ptr %x, i32 10 syncscope("agent") monotonic33  atomicrmw volatile xchg ptr %x, i32 10 syncscope("agent") monotonic34 35  ; CHECK: atomicrmw volatile uinc_wrap ptr %x, i32 10 monotonic36  atomicrmw volatile uinc_wrap ptr %x, i32 10 monotonic37  ; CHECK: atomicrmw volatile uinc_wrap ptr %x, i32 10 syncscope("agent") monotonic38  atomicrmw volatile uinc_wrap ptr %x, i32 10 syncscope("agent") monotonic39 40  ; CHECK: atomicrmw volatile udec_wrap ptr %x, i32 10 monotonic41  atomicrmw volatile udec_wrap ptr %x, i32 10 monotonic42  ; CHECK: atomicrmw volatile udec_wrap ptr %x, i32 10 syncscope("agent") monotonic43  atomicrmw volatile udec_wrap ptr %x, i32 10 syncscope("agent") monotonic44 45  ; CHECK: atomicrmw volatile usub_cond ptr %x, i32 10 monotonic46  atomicrmw volatile usub_cond ptr %x, i32 10 monotonic47  ; CHECK: atomicrmw volatile usub_cond ptr %x, i32 10 syncscope("agent") monotonic48  atomicrmw volatile usub_cond ptr %x, i32 10 syncscope("agent") monotonic49 50  ; CHECK: atomicrmw volatile usub_sat ptr %x, i32 10 monotonic51  atomicrmw volatile usub_sat ptr %x, i32 10 monotonic52  ; CHECK: atomicrmw volatile usub_sat ptr %x, i32 10 syncscope("agent") monotonic53  atomicrmw volatile usub_sat ptr %x, i32 10 syncscope("agent") monotonic54 55  ; CHECK : load atomic <1 x i32>, ptr %x unordered, align 456  load atomic <1 x i32>, ptr %x unordered, align 457  ; CHECK : store atomic <1 x i32> splat (i32 3), ptr %x release, align 458  store atomic <1 x i32> <i32 3>, ptr %x release, align 459  ; CHECK : load atomic <2 x i32>, ptr %x unordered, align 460  load atomic <2 x i32>, ptr %x unordered, align 461  ; CHECK : store atomic <2 x i32> <i32 3, i32 4>, ptr %x release, align 462  store atomic <2 x i32> <i32 3, i32 4>, ptr %x release, align 463 64  ; CHECK : load atomic <2 x ptr>, ptr %x unordered, align 465  load atomic <2 x ptr>, ptr %x unordered, align 466  ; CHECK : store atomic <2 x ptr> zeroinitializer, ptr %x release, align 467  store atomic <2 x ptr> zeroinitializer, ptr %x release, align 468 69  ; CHECK : load atomic <2 x float>, ptr %x unordered, align 470  load atomic <2 x float>, ptr %x unordered, align 471  ; CHECK : store atomic <2 x float> <float 3.0, float 4.0>, ptr %x release, align 472  store atomic <2 x float> <float 3.0, float 4.0>, ptr %x release, align 473 74  ; CHECK: fence syncscope("singlethread") release75  fence syncscope("singlethread") release76  ; CHECK: fence seq_cst77  fence seq_cst78  ; CHECK: fence syncscope("device") seq_cst79  fence syncscope("device") seq_cst80  ret void81}82 83define void @fp_atomics(ptr %x) {84 ; CHECK: atomicrmw fadd ptr %x, float 1.000000e+00 seq_cst85  atomicrmw fadd ptr %x, float 1.0 seq_cst86 87  ; CHECK: atomicrmw volatile fadd ptr %x, float 1.000000e+00 seq_cst88  atomicrmw volatile fadd ptr %x, float 1.0 seq_cst89 90  ; CHECK: atomicrmw fmax ptr %x, float 1.000000e+00 seq_cst91  atomicrmw fmax ptr %x, float 1.0 seq_cst92 93  ; CHECK: atomicrmw volatile fmax ptr %x, float 1.000000e+00 seq_cst94  atomicrmw volatile fmax ptr %x, float 1.0 seq_cst95 96  ; CHECK: atomicrmw fmin ptr %x, float 1.000000e+00 seq_cst97  atomicrmw fmin ptr %x, float 1.0 seq_cst98 99  ; CHECK: atomicrmw volatile fmin ptr %x, float 1.000000e+00 seq_cst100  atomicrmw volatile fmin ptr %x, float 1.0 seq_cst101 102  ; CHECK: atomicrmw fmaximum ptr %x, float 1.000000e+00 seq_cst103  atomicrmw fmaximum ptr %x, float 1.0 seq_cst104 105  ; CHECK: atomicrmw volatile fmaximum ptr %x, float 1.000000e+00 seq_cst106  atomicrmw volatile fmaximum ptr %x, float 1.0 seq_cst107 108  ; CHECK: atomicrmw fminimum ptr %x, float 1.000000e+00 seq_cst109  atomicrmw fminimum ptr %x, float 1.0 seq_cst110 111  ; CHECK: atomicrmw volatile fminimum ptr %x, float 1.000000e+00 seq_cst112  atomicrmw volatile fminimum ptr %x, float 1.0 seq_cst113 114  ret void115}116 117define void @fp_vector_atomicrmw(ptr %x, <2 x half> %val) {118  ; CHECK: %atomic.fadd = atomicrmw fadd ptr %x, <2 x half> %val seq_cst119  %atomic.fadd = atomicrmw fadd ptr %x, <2 x half> %val seq_cst120 121  ; CHECK: %atomic.fsub = atomicrmw fsub ptr %x, <2 x half> %val seq_cst122  %atomic.fsub = atomicrmw fsub ptr %x, <2 x half> %val seq_cst123 124  ; CHECK: %atomic.fmax = atomicrmw fmax ptr %x, <2 x half> %val seq_cst125  %atomic.fmax = atomicrmw fmax ptr %x, <2 x half> %val seq_cst126 127  ; CHECK: %atomic.fmin = atomicrmw fmin ptr %x, <2 x half> %val seq_cst128  %atomic.fmin = atomicrmw fmin ptr %x, <2 x half> %val seq_cst129 130  ; CHECK: %atomic.fmaximum = atomicrmw fmaximum ptr %x, <2 x half> %val seq_cst131  %atomic.fmaximum = atomicrmw fmaximum ptr %x, <2 x half> %val seq_cst132 133  ; CHECK: %atomic.fminimum = atomicrmw fminimum ptr %x, <2 x half> %val seq_cst134  %atomic.fminimum = atomicrmw fminimum ptr %x, <2 x half> %val seq_cst135 136  ret void137}138