191 lines · plain
1; Test 64-bit atomic NANDs.2;3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s4 5; Check NANDs of a variable.6define i64 @f1(i64 %dummy, ptr %src, i64 %b) {7; CHECK-LABEL: f1:8; CHECK: lg %r2, 0(%r3)9; CHECK: [[LABEL:\.[^:]*]]:10; CHECK: lgr %r0, %r211; CHECK: ngr %r0, %r412; CHECK: lcgr %r0, %r013; CHECK: aghi %r0, -114; CHECK: csg %r2, %r0, 0(%r3)15; CHECK: jl [[LABEL]]16; CHECK: br %r1417 %res = atomicrmw nand ptr %src, i64 %b seq_cst18 ret i64 %res19}20 21; Check NANDs of 1, which are done using a register.22define i64 @f2(i64 %dummy, ptr %src) {23; CHECK-LABEL: f2:24; CHECK: lcgr %r0, %r225; CHECK: aghi %r0, -126; CHECK: oihf %r0, 429496729527; CHECK: oilf %r0, 429496729428; CHECK: br %r1429 %res = atomicrmw nand ptr %src, i64 1 seq_cst30 ret i64 %res31}32 33define i64 @f3(i64 %dummy, ptr %src) {34; CHECK-LABEL: f3:35; CHECK: lg %r2, 0(%r3)36; CHECK: [[LABEL:\.[^:]*]]:37; CHECK: lcgr %r0, %r238; CHECK: aghi %r0, -139; CHECK: oihf %r0, 429496729440; CHECK: jl [[LABEL]]41; CHECK: br %r1442 %res = atomicrmw nand ptr %src, i64 8589934591 seq_cst43 ret i64 %res44}45 46define i64 @f4(i64 %dummy, ptr %src) {47; CHECK-LABEL: f4:48; CHECK: lg %r2, 0(%r3)49; CHECK: [[LABEL:\.[^:]*]]:50; CHECK: lcgr %r0, %r251; CHECK: aghi %r0, -152; CHECK: oihf %r0, 429496729353; CHECK: csg %r2, %r0, 0(%r3)54; CHECK: jl [[LABEL]]55; CHECK: br %r1456 %res = atomicrmw nand ptr %src, i64 12884901887 seq_cst57 ret i64 %res58}59 60define i64 @f5(i64 %dummy, ptr %src) {61; CHECK-LABEL: f5:62; CHECK: lcgr %r0, %r263; CHECK: aghi %r0, -164; CHECK: oihf %r0, 429496729265; CHECK: oilf %r0, 429496729566; CHECK: br %r1467 %res = atomicrmw nand ptr %src, i64 12884901888 seq_cst68 ret i64 %res69}70 71define i64 @f6(i64 %dummy, ptr %src) {72; CHECK-LABEL: f6:73; CHECK: lcgr %r0, %r274; CHECK: aghi %r0, -175; CHECK: oihh %r0, 6553376; CHECK: br %r1477 %res = atomicrmw nand ptr %src, i64 844424930131967 seq_cst78 ret i64 %res79}80 81define i64 @f7(i64 %dummy, ptr %src) {82; CHECK-LABEL: f7:83; CHECK: lcgr %r0, %r284; CHECK: aghi %r0, -185; CHECK: oihf %r0, 429490175986; CHECK: oilf %r0, 429496729587; CHECK: br %r1488 %res = atomicrmw nand ptr %src, i64 281474976710656 seq_cst89 ret i64 %res90}91 92define i64 @f8(i64 %dummy, ptr %src) {93; CHECK-LABEL: f8:94; CHECK: lcgr %r0, %r295; CHECK: aghi %r0, -196; CHECK: oill %r0, 597; CHECK: br %r1498 %res = atomicrmw nand ptr %src, i64 -6 seq_cst99 ret i64 %res100}101 102define i64 @f9(i64 %dummy, ptr %src) {103; CHECK-LABEL: f9:104; CHECK: lcgr %r0, %r2105; CHECK: aghi %r0, -1106; CHECK: oill %r0, 65533107; CHECK: br %r14108 %res = atomicrmw nand ptr %src, i64 -65534 seq_cst109 ret i64 %res110}111 112define i64 @f10(i64 %dummy, ptr %src) {113; CHECK-LABEL: f10:114; CHECK: lcgr %r0, %r2115; CHECK: aghi %r0, -1116; CHECK: oilf %r0, 65537117; CHECK: br %r14118 %res = atomicrmw nand ptr %src, i64 -65538 seq_cst119 ret i64 %res120}121 122define i64 @f11(i64 %dummy, ptr %src) {123; CHECK-LABEL: f11:124; CHECK: lcgr %r0, %r2125; CHECK: aghi %r0, -1126; CHECK: oilh %r0, 5127; CHECK: br %r14128 %res = atomicrmw nand ptr %src, i64 -327681 seq_cst129 ret i64 %res130}131 132define i64 @f12(i64 %dummy, ptr %src) {133; CHECK-LABEL: f12:134; CHECK: lcgr %r0, %r2135; CHECK: aghi %r0, -1136; CHECK: oilh %r0, 65533137; CHECK: br %r14138 %res = atomicrmw nand ptr %src, i64 -4294770689 seq_cst139 ret i64 %res140}141 142define i64 @f13(i64 %dummy, ptr %src) {143; CHECK-LABEL: f13:144; CHECK: lcgr %r0, %r2145; CHECK: aghi %r0, -1146; CHECK: oilf %r0, 4294967293147; CHECK: br %r14148 %res = atomicrmw nand ptr %src, i64 -4294967294 seq_cst149 ret i64 %res150}151 152define i64 @f14(i64 %dummy, ptr %src) {153; CHECK-LABEL: f14:154; CHECK: lcgr %r0, %r2155; CHECK: aghi %r0, -1156; CHECK: oihl %r0, 5157; CHECK: br %r14158 %res = atomicrmw nand ptr %src, i64 -21474836481 seq_cst159 ret i64 %res160}161 162define i64 @f15(i64 %dummy, ptr %src) {163; CHECK-LABEL: f15:164; CHECK: lcgr %r0, %r2165; CHECK: aghi %r0, -1166; CHECK: oihl %r0, 65533167; CHECK: br %r14168 %res = atomicrmw nand ptr %src, i64 -281462091808769 seq_cst169 ret i64 %res170}171 172define i64 @f16(i64 %dummy, ptr %src) {173; CHECK-LABEL: f16:174; CHECK: lcgr %r0, %r2175; CHECK: aghi %r0, -1176; CHECK: oihh %r0, 5177; CHECK: br %r14178 %res = atomicrmw nand ptr %src, i64 -1407374883553281 seq_cst179 ret i64 %res180}181 182define i64 @f17(i64 %dummy, ptr %src) {183; CHECK-LABEL: f17:184; CHECK: lcgr %r0, %r2185; CHECK: aghi %r0, -1186; CHECK: oihf %r0, 65537187; CHECK: br %r14188 %res = atomicrmw nand ptr %src, i64 -281479271677953 seq_cst189 ret i64 %res190}191