1; Test 32-bit atomic NANDs. 2; 3; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 | FileCheck %s 4 5; Check NANDs 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, %r2 11; CHECK: nr %r0, %r4 12; CHECK: xilf %r0, 4294967295 13; CHECK: cs %r2, %r0, 0(%r3) 14; CHECK: jl [[LABEL]] 15; CHECK: br %r14 16 %res = atomicrmw nand ptr %src, i32 %b seq_cst 17 ret i32 %res 18} 19 20; Check NANDs with different constant operands. 21define i32 @f2(i32 %dummy, ptr %src) { 22; CHECK-LABEL: f2: 23; CHECK: l %r2, 0(%r3) 24; CHECK: [[LABEL:\.[^ ]*]]: 25; CHECK: lr %r0, %r2 26; CHECK: xilf %r0, 4294967295 27; CHECK: oilf %r0, 4294967294 28; CHECK: cs %r2, %r0, 0(%r3) 29; CHECK: jl [[LABEL]] 30; CHECK: br %r14 31 %res = atomicrmw nand ptr %src, i32 1 seq_cst 32 ret i32 %res 33} 34 35define i32 @f3(i32 %dummy, ptr %src) { 36; CHECK-LABEL: f3: 37; CHECK: xilf %r0, 4294967295 38; CHECK: oilh %r0, 65535 39; CHECK: br %r14 40 %res = atomicrmw nand ptr %src, i32 65535 seq_cst 41 ret i32 %res 42} 43 44define i32 @f4(i32 %dummy, ptr %src) { 45; CHECK-LABEL: f4: 46; CHECK: xilf %r0, 4294967295 47; CHECK: oilf %r0, 4294901759 48; CHECK: br %r14 49 %res = atomicrmw nand ptr %src, i32 65536 seq_cst 50 ret i32 %res 51} 52 53define i32 @f5(i32 %dummy, ptr %src) { 54; CHECK-LABEL: f5: 55; CHECK: xilf %r0, 4294967295 56; CHECK: oill %r0, 1 57; CHECK: br %r14 58 %res = atomicrmw nand ptr %src, i32 -2 seq_cst 59 ret i32 %res 60} 61 62define i32 @f6(i32 %dummy, ptr %src) { 63; CHECK-LABEL: f6: 64; CHECK: xilf %r0, 4294967295 65; CHECK: oill %r0, 65535 66; CHECK: br %r14 67 %res = atomicrmw nand ptr %src, i32 -65536 seq_cst 68 ret i32 %res 69} 70 71define i32 @f7(i32 %dummy, ptr %src) { 72; CHECK-LABEL: f7: 73; CHECK: xilf %r0, 4294967295 74; CHECK: oilh %r0, 1 75; CHECK: br %r14 76 %res = atomicrmw nand ptr %src, i32 -65537 seq_cst 77 ret i32 %res 78} 79 80define i32 @f8(i32 %dummy, ptr %src) { 81; CHECK-LABEL: f8: 82; CHECK: xilf %r0, 4294967295 83; CHECK: oilf %r0, 65537 84; CHECK: br %r14 85 %res = atomicrmw nand ptr %src, i32 -65538 seq_cst 86 ret i32 %res 87} 88