Attempt to appease buildbot after r185956 by explicitly turning setting -fma,-fma4...
[oota-llvm.git] / test / CodeGen / SystemZ / atomicrmw-nand-04.ll
1 ; Test 64-bit atomic NANDs.
2 ;
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
4
5 ; Check NANDs of a variable.
6 define i64 @f1(i64 %dummy, i64 *%src, i64 %b) {
7 ; CHECK: f1:
8 ; CHECK: lg %r2, 0(%r3)
9 ; CHECK: [[LABEL:\.[^:]*]]:
10 ; CHECK: lgr %r0, %r2
11 ; CHECK: ngr %r0, %r4
12 ; CHECK: lcgr %r0, %r0
13 ; CHECK: aghi %r0, -1
14 ; CHECK: csg %r2, %r0, 0(%r3)
15 ; CHECK: jlh [[LABEL]]
16 ; CHECK: br %r14
17   %res = atomicrmw nand i64 *%src, i64 %b seq_cst
18   ret i64 %res
19 }
20
21 ; Check NANDs of 1, which must be done using a register.
22 define i64 @f2(i64 %dummy, i64 *%src) {
23 ; CHECK: f2:
24 ; CHECK: ngr
25 ; CHECK: br %r14
26   %res = atomicrmw nand i64 *%src, i64 1 seq_cst
27   ret i64 %res
28 }
29
30 ; Check the low end of the NIHF range.
31 define i64 @f3(i64 %dummy, i64 *%src) {
32 ; CHECK: f3:
33 ; CHECK: lg %r2, 0(%r3)
34 ; CHECK: [[LABEL:\.[^:]*]]:
35 ; CHECK: lgr %r0, %r2
36 ; CHECK: nihf %r0, 0
37 ; CHECK: lcgr %r0, %r0
38 ; CHECK: aghi %r0, -1
39 ; CHECK: csg %r2, %r0, 0(%r3)
40 ; CHECK: jlh [[LABEL]]
41 ; CHECK: br %r14
42   %res = atomicrmw nand i64 *%src, i64 4294967295 seq_cst
43   ret i64 %res
44 }
45
46 ; Check the next value up, which must use a register.
47 define i64 @f4(i64 %dummy, i64 *%src) {
48 ; CHECK: f4:
49 ; CHECK: ngr
50 ; CHECK: br %r14
51   %res = atomicrmw nand i64 *%src, i64 4294967296 seq_cst
52   ret i64 %res
53 }
54
55 ; Check the low end of the NIHH range.
56 define i64 @f5(i64 %dummy, i64 *%src) {
57 ; CHECK: f5:
58 ; CHECK: nihh %r0, 0
59 ; CHECK: lcgr %r0, %r0
60 ; CHECK: aghi %r0, -1
61 ; CHECK: br %r14
62   %res = atomicrmw nand i64 *%src, i64 281474976710655 seq_cst
63   ret i64 %res
64 }
65
66 ; Check the next value up, which must use a register.
67 define i64 @f6(i64 %dummy, i64 *%src) {
68 ; CHECK: f6:
69 ; CHECK: ngr
70 ; CHECK: br %r14
71   %res = atomicrmw nand i64 *%src, i64 281474976710656 seq_cst
72   ret i64 %res
73 }
74
75 ; Check the highest useful NILL value.
76 define i64 @f7(i64 %dummy, i64 *%src) {
77 ; CHECK: f7:
78 ; CHECK: nill %r0, 65534
79 ; CHECK: lcgr %r0, %r0
80 ; CHECK: aghi %r0, -1
81 ; CHECK: br %r14
82   %res = atomicrmw nand i64 *%src, i64 -2 seq_cst
83   ret i64 %res
84 }
85
86 ; Check the low end of the NILL range.
87 define i64 @f8(i64 %dummy, i64 *%src) {
88 ; CHECK: f8:
89 ; CHECK: nill %r0, 0
90 ; CHECK: lcgr %r0, %r0
91 ; CHECK: aghi %r0, -1
92 ; CHECK: br %r14
93   %res = atomicrmw nand i64 *%src, i64 -65536 seq_cst
94   ret i64 %res
95 }
96
97 ; Check the highest useful NILH value, which is one less than the above.
98 define i64 @f9(i64 %dummy, i64 *%src) {
99 ; CHECK: f9:
100 ; CHECK: nilh %r0, 65534
101 ; CHECK: lcgr %r0, %r0
102 ; CHECK: aghi %r0, -1
103 ; CHECK: br %r14
104   %res = atomicrmw nand i64 *%src, i64 -65537 seq_cst
105   ret i64 %res
106 }
107
108 ; Check the highest useful NILF value, which is one less than the above.
109 define i64 @f10(i64 %dummy, i64 *%src) {
110 ; CHECK: f10:
111 ; CHECK: nilf %r0, 4294901758
112 ; CHECK: lcgr %r0, %r0
113 ; CHECK: aghi %r0, -1
114 ; CHECK: br %r14
115   %res = atomicrmw nand i64 *%src, i64 -65538 seq_cst
116   ret i64 %res
117 }
118
119 ; Check the low end of the NILH range.
120 define i64 @f11(i64 %dummy, i64 *%src) {
121 ; CHECK: f11:
122 ; CHECK: nilh %r0, 0
123 ; CHECK: lcgr %r0, %r0
124 ; CHECK: aghi %r0, -1
125 ; CHECK: br %r14
126   %res = atomicrmw nand i64 *%src, i64 -4294901761 seq_cst
127   ret i64 %res
128 }
129
130 ; Check the low end of the NILF range.
131 define i64 @f12(i64 %dummy, i64 *%src) {
132 ; CHECK: f12:
133 ; CHECK: nilf %r0, 0
134 ; CHECK: lcgr %r0, %r0
135 ; CHECK: aghi %r0, -1
136 ; CHECK: br %r14
137   %res = atomicrmw nand i64 *%src, i64 -4294967296 seq_cst
138   ret i64 %res
139 }
140
141 ; Check the highest useful NIHL value, which is one less than the above.
142 define i64 @f13(i64 %dummy, i64 *%src) {
143 ; CHECK: f13:
144 ; CHECK: nihl %r0, 65534
145 ; CHECK: lcgr %r0, %r0
146 ; CHECK: aghi %r0, -1
147 ; CHECK: br %r14
148   %res = atomicrmw nand i64 *%src, i64 -4294967297 seq_cst
149   ret i64 %res
150 }
151
152 ; Check the low end of the NIHL range.
153 define i64 @f14(i64 %dummy, i64 *%src) {
154 ; CHECK: f14:
155 ; CHECK: nihl %r0, 0
156 ; CHECK: lcgr %r0, %r0
157 ; CHECK: aghi %r0, -1
158 ; CHECK: br %r14
159   %res = atomicrmw nand i64 *%src, i64 -281470681743361 seq_cst
160   ret i64 %res
161 }
162
163 ; Check the highest useful NIHH value, which is 1<<32 less than the above.
164 define i64 @f15(i64 %dummy, i64 *%src) {
165 ; CHECK: f15:
166 ; CHECK: nihh %r0, 65534
167 ; CHECK: lcgr %r0, %r0
168 ; CHECK: aghi %r0, -1
169 ; CHECK: br %r14
170   %res = atomicrmw nand i64 *%src, i64 -281474976710657 seq_cst
171   ret i64 %res
172 }
173
174 ; Check the highest useful NIHF value, which is 1<<32 less than the above.
175 define i64 @f16(i64 %dummy, i64 *%src) {
176 ; CHECK: f16:
177 ; CHECK: nihf %r0, 4294901758
178 ; CHECK: lcgr %r0, %r0
179 ; CHECK: aghi %r0, -1
180 ; CHECK: br %r14
181   %res = atomicrmw nand i64 *%src, i64 -281479271677953 seq_cst
182   ret i64 %res
183 }