1 ; Test 32-bit ANDs in which the second operand is constant.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5 ; ANDs with 1 should use RISBG
6 define i32 @f1(i32 %a) {
8 ; CHECK: risbg %r2, %r2, 63, 191, 0
15 define i32 @f2(i32 %a) {
17 ; CHECK: risbg %r2, %r2, 62, 190, 0
24 define i32 @f3(i32 %a) {
26 ; CHECK: risbg %r2, %r2, 62, 191, 0
33 define i32 @f4(i32 %a) {
35 ; CHECK: risbg %r2, %r2, 61, 189, 0
41 ; Check the lowest useful NILF value.
42 define i32 @f5(i32 %a) {
50 ; Check the highest 16-bit constant that must be handled by NILF.
51 define i32 @f6(i32 %a) {
53 ; CHECK: nilf %r2, 65533
55 %and = and i32 %a, 65533
59 ; ANDs of 0xffff are zero extensions from i16.
60 define i32 @f7(i32 %a) {
62 ; CHECK: llhr %r2, %r2
64 %and = and i32 %a, 65535
68 ; Check the next value up, which can use RISBG.
69 define i32 @f8(i32 %a) {
71 ; CHECK: risbg %r2, %r2, 47, 175, 0
73 %and = and i32 %a, 65536
77 ; Check the next value up, which must again use NILF.
78 define i32 @f9(i32 %a) {
80 ; CHECK: nilf %r2, 65537
82 %and = and i32 %a, 65537
86 ; This value is in range of NILH, but we use RISBG instead.
87 define i32 @f10(i32 %a) {
89 ; CHECK: risbg %r2, %r2, 47, 191, 0
91 %and = and i32 %a, 131071
95 ; Check the lowest useful NILH value.
96 define i32 @f11(i32 %a) {
100 %and = and i32 %a, 196607
104 ; Check the highest useful NILH value.
105 define i32 @f12(i32 %a) {
107 ; CHECK: nilh %r2, 65530
109 %and = and i32 %a, -327681
113 ; Check the equivalent of NILH of 65531, which can use RISBG.
114 define i32 @f13(i32 %a) {
116 ; CHECK: risbg %r2, %r2, 46, 172, 0
118 %and = and i32 %a, -262145
123 define i32 @f14(i32 %a) {
125 ; CHECK: risbg %r2, %r2, 48, 173, 0
127 %and = and i32 %a, -196609
132 define i32 @f15(i32 %a) {
134 ; CHECK: risbg %r2, %r2, 47, 173, 0
136 %and = and i32 %a, -131073
140 ; Check the highest useful NILF value.
141 define i32 @f16(i32 %a) {
143 ; CHECK: nilf %r2, 4294901758
145 %and = and i32 %a, -65538
149 ; Check the next value up, which is the equivalent of an NILH of 65534.
150 ; We use RISBG instead.
151 define i32 @f17(i32 %a) {
153 ; CHECK: risbg %r2, %r2, 48, 174, 0
155 %and = and i32 %a, -65537
159 ; Check the next value up, which can also use RISBG.
160 define i32 @f18(i32 %a) {
162 ; CHECK: risbg %r2, %r2, 32, 175, 0
164 %and = and i32 %a, -65536
169 define i32 @f19(i32 %a) {
171 ; CHECK: risbg %r2, %r2, 63, 175, 0
173 %and = and i32 %a, -65535
177 ; Check the next value up again, which is the lowest useful NILL value.
178 define i32 @f20(i32 %a) {
182 %and = and i32 %a, -65534
186 ; Check the highest useful NILL value.
187 define i32 @f21(i32 %a) {
189 ; CHECK: nill %r2, 65530
191 %and = and i32 %a, -6
195 ; Check the next value up, which can use RISBG.
196 define i32 @f22(i32 %a) {
198 ; CHECK: risbg %r2, %r2, 62, 188, 0
200 %and = and i32 %a, -5
205 define i32 @f23(i32 %a) {
207 ; CHECK: risbg %r2, %r2, 32, 189, 0
209 %and = and i32 %a, -4
214 define i32 @f24(i32 %a) {
216 ; CHECK: risbg %r2, %r2, 63, 189, 0
218 %and = and i32 %a, -3
222 ; Check the last useful mask.
223 define i32 @f25(i32 %a) {
225 ; CHECK: risbg %r2, %r2, 32, 190, 0
227 %and = and i32 %a, -2