[SystemZ] Add CodeGen test cases
[oota-llvm.git] / test / CodeGen / SystemZ / atomicrmw-nand-03.ll
1 ; Test 32-bit atomic NANDs.
2 ;
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5 ; Check NANDs of a variable.
6 define i32 @f1(i32 %dummy, i32 *%src, i32 %b) {
7 ; CHECK: 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: j{{g?}}lh [[LABEL]]
15 ; CHECK: br %r14
16   %res = atomicrmw nand i32 *%src, i32 %b seq_cst
17   ret i32 %res
18 }
19
20 ; Check NANDs of 1.
21 define i32 @f2(i32 %dummy, i32 *%src) {
22 ; CHECK: f2:
23 ; CHECK: l %r2, 0(%r3)
24 ; CHECK: [[LABEL:\.[^ ]*]]:
25 ; CHECK: lr %r0, %r2
26 ; CHECK: nilf %r0, 1
27 ; CHECK: xilf %r0, 4294967295
28 ; CHECK: cs %r2, %r0, 0(%r3)
29 ; CHECK: j{{g?}}lh [[LABEL]]
30 ; CHECK: br %r14
31   %res = atomicrmw nand i32 *%src, i32 1 seq_cst
32   ret i32 %res
33 }
34
35 ; Check NANDs of the low end of the NILH range.
36 define i32 @f3(i32 %dummy, i32 *%src) {
37 ; CHECK: f3:
38 ; CHECK: nilh %r0, 0
39 ; CHECK: xilf %r0, 4294967295
40 ; CHECK: br %r14
41   %res = atomicrmw nand i32 *%src, i32 65535 seq_cst
42   ret i32 %res
43 }
44
45 ; Check the next value up, which must use NILF.
46 define i32 @f4(i32 %dummy, i32 *%src) {
47 ; CHECK: f4:
48 ; CHECK: nilf %r0, 65536
49 ; CHECK: xilf %r0, 4294967295
50 ; CHECK: br %r14
51   %res = atomicrmw nand i32 *%src, i32 65536 seq_cst
52   ret i32 %res
53 }
54
55 ; Check the largest useful NILL value.
56 define i32 @f5(i32 %dummy, i32 *%src) {
57 ; CHECK: f5:
58 ; CHECK: nill %r0, 65534
59 ; CHECK: xilf %r0, 4294967295
60 ; CHECK: br %r14
61   %res = atomicrmw nand i32 *%src, i32 -2 seq_cst
62   ret i32 %res
63 }
64
65 ; Check the low end of the NILL range.
66 define i32 @f6(i32 %dummy, i32 *%src) {
67 ; CHECK: f6:
68 ; CHECK: nill %r0, 0
69 ; CHECK: xilf %r0, 4294967295
70 ; CHECK: br %r14
71   %res = atomicrmw nand i32 *%src, i32 -65536 seq_cst
72   ret i32 %res
73 }
74
75 ; Check the largest useful NILH value, which is one less than the above.
76 define i32 @f7(i32 %dummy, i32 *%src) {
77 ; CHECK: f7:
78 ; CHECK: nilh %r0, 65534
79 ; CHECK: xilf %r0, 4294967295
80 ; CHECK: br %r14
81   %res = atomicrmw nand i32 *%src, i32 -65537 seq_cst
82   ret i32 %res
83 }
84
85 ; Check the highest useful NILF value, which is one less than the above.
86 define i32 @f8(i32 %dummy, i32 *%src) {
87 ; CHECK: f8:
88 ; CHECK: nilf %r0, 4294901758
89 ; CHECK: xilf %r0, 4294967295
90 ; CHECK: br %r14
91   %res = atomicrmw nand i32 *%src, i32 -65538 seq_cst
92   ret i32 %res
93 }