brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · ae9d045 Raw
95 lines · plain
1; Test 32-bit atomic subtractions.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s4 5; Check subtraction of a variable.6define i32 @f1(i32 %dummy, ptr %src, i32 %b) {7; CHECK-LABEL: f1:8; CHECK: l %r2, 0(%r3)9; CHECK: [[LABEL:\.[^:]*]]:10; CHECK: lr %r0, %r211; CHECK: sr %r0, %r412; CHECK: cs %r2, %r0, 0(%r3)13; CHECK: jl [[LABEL]]14; CHECK: br %r1415  %res = atomicrmw sub ptr %src, i32 %b seq_cst16  ret i32 %res17}18 19; Check subtraction of 1, which can use AHI.20define i32 @f2(i32 %dummy, ptr %src) {21; CHECK-LABEL: f2:22; CHECK: l %r2, 0(%r3)23; CHECK: [[LABEL:\.[^:]*]]:24; CHECK: lr %r0, %r225; CHECK: ahi %r0, -126; CHECK: cs %r2, %r0, 0(%r3)27; CHECK: jl [[LABEL]]28; CHECK: br %r1429  %res = atomicrmw sub ptr %src, i32 1 seq_cst30  ret i32 %res31}32 33; Check the low end of the AHI range.34define i32 @f3(i32 %dummy, ptr %src) {35; CHECK-LABEL: f3:36; CHECK: ahi %r0, -3276837; CHECK: br %r1438  %res = atomicrmw sub ptr %src, i32 32768 seq_cst39  ret i32 %res40}41 42; Check the next value down, which must use AFI.43define i32 @f4(i32 %dummy, ptr %src) {44; CHECK-LABEL: f4:45; CHECK: afi %r0, -3276946; CHECK: br %r1447  %res = atomicrmw sub ptr %src, i32 32769 seq_cst48  ret i32 %res49}50 51; Check the low end of the AFI range.52define i32 @f5(i32 %dummy, ptr %src) {53; CHECK-LABEL: f5:54; CHECK: afi %r0, -214748364855; CHECK: br %r1456  %res = atomicrmw sub ptr %src, i32 2147483648 seq_cst57  ret i32 %res58}59 60; Check the next value up, which gets treated as a positive operand.61define i32 @f6(i32 %dummy, ptr %src) {62; CHECK-LABEL: f6:63; CHECK: afi %r0, 214748364764; CHECK: br %r1465  %res = atomicrmw sub ptr %src, i32 2147483649 seq_cst66  ret i32 %res67}68 69; Check subtraction of -1, which can use AHI.70define i32 @f7(i32 %dummy, ptr %src) {71; CHECK-LABEL: f7:72; CHECK: ahi %r0, 173; CHECK: br %r1474  %res = atomicrmw sub ptr %src, i32 -1 seq_cst75  ret i32 %res76}77 78; Check the high end of the AHI range.79define i32 @f8(i32 %dummy, ptr %src) {80; CHECK-LABEL: f8:81; CHECK: ahi %r0, 3276782; CHECK: br %r1483  %res = atomicrmw sub ptr %src, i32 -32767 seq_cst84  ret i32 %res85}86 87; Check the next value down, which must use AFI instead.88define i32 @f9(i32 %dummy, ptr %src) {89; CHECK-LABEL: f9:90; CHECK: afi %r0, 3276891; CHECK: br %r1492  %res = atomicrmw sub ptr %src, i32 -32768 seq_cst93  ret i32 %res94}95