1 ; Test 32-bit atomic NANDs.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5 ; Check NANDs of a variable.
6 define i32 @f1(i32 %dummy, i32 *%src, i32 %b) {
9 ; CHECK: [[LABEL:\.[^ ]*]]:
12 ; CHECK: xilf %r0, 4294967295
13 ; CHECK: cs %r2, %r0, 0(%r3)
14 ; CHECK: jlh [[LABEL]]
16 %res = atomicrmw nand i32 *%src, i32 %b seq_cst
21 define i32 @f2(i32 %dummy, i32 *%src) {
23 ; CHECK: l %r2, 0(%r3)
24 ; CHECK: [[LABEL:\.[^ ]*]]:
27 ; CHECK: xilf %r0, 4294967295
28 ; CHECK: cs %r2, %r0, 0(%r3)
29 ; CHECK: jlh [[LABEL]]
31 %res = atomicrmw nand i32 *%src, i32 1 seq_cst
35 ; Check NANDs of the low end of the NILH range.
36 define i32 @f3(i32 %dummy, i32 *%src) {
39 ; CHECK: xilf %r0, 4294967295
41 %res = atomicrmw nand i32 *%src, i32 65535 seq_cst
45 ; Check the next value up, which must use NILF.
46 define i32 @f4(i32 %dummy, i32 *%src) {
48 ; CHECK: nilf %r0, 65536
49 ; CHECK: xilf %r0, 4294967295
51 %res = atomicrmw nand i32 *%src, i32 65536 seq_cst
55 ; Check the largest useful NILL value.
56 define i32 @f5(i32 %dummy, i32 *%src) {
58 ; CHECK: nill %r0, 65534
59 ; CHECK: xilf %r0, 4294967295
61 %res = atomicrmw nand i32 *%src, i32 -2 seq_cst
65 ; Check the low end of the NILL range.
66 define i32 @f6(i32 %dummy, i32 *%src) {
69 ; CHECK: xilf %r0, 4294967295
71 %res = atomicrmw nand i32 *%src, i32 -65536 seq_cst
75 ; Check the largest useful NILH value, which is one less than the above.
76 define i32 @f7(i32 %dummy, i32 *%src) {
78 ; CHECK: nilh %r0, 65534
79 ; CHECK: xilf %r0, 4294967295
81 %res = atomicrmw nand i32 *%src, i32 -65537 seq_cst
85 ; Check the highest useful NILF value, which is one less than the above.
86 define i32 @f8(i32 %dummy, i32 *%src) {
88 ; CHECK: nilf %r0, 4294901758
89 ; CHECK: xilf %r0, 4294967295
91 %res = atomicrmw nand i32 *%src, i32 -65538 seq_cst