[ARM] More MVE compare vector splat combines for ANDs
[llvm-complete.git] / test / CodeGen / SystemZ / int-cmp-13.ll
blobfda4496a961aa887f444521c3b79a9e750b42c27
1 ; Test 64-bit equality comparisons in which the second operand is a constant.
3 ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5 ; Check comparisons with 0.
6 define double @f1(double %a, double %b, i64 %i1) {
7 ; CHECK-LABEL: f1:
8 ; CHECK: cgije %r2, 0
9 ; CHECK: ldr %f0, %f2
10 ; CHECK: br %r14
11   %cond = icmp eq i64 %i1, 0
12   %tmp = select i1 %cond, double %a, double %b
13   %res = fadd double %tmp, 1.0
14   ret double %res
17 ; Check the high end of the CGIJ range.
18 define double @f2(double %a, double %b, i64 %i1) {
19 ; CHECK-LABEL: f2:
20 ; CHECK: cgije %r2, 127
21 ; CHECK: ldr %f0, %f2
22 ; CHECK: br %r14
23   %cond = icmp eq i64 %i1, 127
24   %tmp = select i1 %cond, double %a, double %b
25   %res = fadd double %tmp, 1.0
26   ret double %res
29 ; Check the next value up, which must use CGHI instead.
30 define double @f3(double %a, double %b, i64 %i1) {
31 ; CHECK-LABEL: f3:
32 ; CHECK: cghi %r2, 128
33 ; CHECK-NEXT: je
34 ; CHECK: ldr %f0, %f2
35 ; CHECK: br %r14
36   %cond = icmp eq i64 %i1, 128
37   %tmp = select i1 %cond, double %a, double %b
38   %res = fadd double %tmp, 1.0
39   ret double %res
42 ; Check the high end of the CGHI range.
43 define double @f4(double %a, double %b, i64 %i1) {
44 ; CHECK-LABEL: f4:
45 ; CHECK: cghi %r2, 32767
46 ; CHECK-NEXT: je
47 ; CHECK: ldr %f0, %f2
48 ; CHECK: br %r14
49   %cond = icmp eq i64 %i1, 32767
50   %tmp = select i1 %cond, double %a, double %b
51   %res = fadd double %tmp, 1.0
52   ret double %res
55 ; Check the next value up, which must use CGFI.
56 define double @f5(double %a, double %b, i64 %i1) {
57 ; CHECK-LABEL: f5:
58 ; CHECK: cgfi %r2, 32768
59 ; CHECK-NEXT: je
60 ; CHECK: ldr %f0, %f2
61 ; CHECK: br %r14
62   %cond = icmp eq i64 %i1, 32768
63   %tmp = select i1 %cond, double %a, double %b
64   %res = fadd double %tmp, 1.0
65   ret double %res
68 ; Check the high end of the CGFI range.
69 define double @f6(double %a, double %b, i64 %i1) {
70 ; CHECK-LABEL: f6:
71 ; CHECK: cgfi %r2, 2147483647
72 ; CHECK-NEXT: je
73 ; CHECK: ldr %f0, %f2
74 ; CHECK: br %r14
75   %cond = icmp eq i64 %i1, 2147483647
76   %tmp = select i1 %cond, double %a, double %b
77   %res = fadd double %tmp, 1.0
78   ret double %res
81 ; Check the next value up, which should use CLGFI instead.
82 define double @f7(double %a, double %b, i64 %i1) {
83 ; CHECK-LABEL: f7:
84 ; CHECK: clgfi %r2, 2147483648
85 ; CHECK-NEXT: je
86 ; CHECK: ldr %f0, %f2
87 ; CHECK: br %r14
88   %cond = icmp eq i64 %i1, 2147483648
89   %tmp = select i1 %cond, double %a, double %b
90   %res = fadd double %tmp, 1.0
91   ret double %res
94 ; Check the high end of the CLGFI range.
95 define double @f8(double %a, double %b, i64 %i1) {
96 ; CHECK-LABEL: f8:
97 ; CHECK: clgfi %r2, 4294967295
98 ; CHECK-NEXT: je
99 ; CHECK: ldr %f0, %f2
100 ; CHECK: br %r14
101   %cond = icmp eq i64 %i1, 4294967295
102   %tmp = select i1 %cond, double %a, double %b
103   %res = fadd double %tmp, 1.0
104   ret double %res
107 ; Check the next value up, which must use a register comparison.
108 define double @f9(double %a, double %b, i64 %i1) {
109 ; CHECK-LABEL: f9:
110 ; CHECK: cgrje %r2,
111 ; CHECK: ldr %f0, %f2
112 ; CHECK: br %r14
113   %cond = icmp eq i64 %i1, 4294967296
114   %tmp = select i1 %cond, double %a, double %b
115   %res = fadd double %tmp, 1.0
116   ret double %res
119 ; Check the high end of the negative CGIJ range.
120 define double @f10(double %a, double %b, i64 %i1) {
121 ; CHECK-LABEL: f10:
122 ; CHECK: cgije %r2, -1
123 ; CHECK: ldr %f0, %f2
124 ; CHECK: br %r14
125   %cond = icmp eq i64 %i1, -1
126   %tmp = select i1 %cond, double %a, double %b
127   %res = fadd double %tmp, 1.0
128   ret double %res
131 ; Check the low end of the CGIJ range.
132 define double @f11(double %a, double %b, i64 %i1) {
133 ; CHECK-LABEL: f11:
134 ; CHECK: cgije %r2, -128
135 ; CHECK: ldr %f0, %f2
136 ; CHECK: br %r14
137   %cond = icmp eq i64 %i1, -128
138   %tmp = select i1 %cond, double %a, double %b
139   %res = fadd double %tmp, 1.0
140   ret double %res
143 ; Check the next value down, which must use CGHI instead.
144 define double @f12(double %a, double %b, i64 %i1) {
145 ; CHECK-LABEL: f12:
146 ; CHECK: cghi %r2, -129
147 ; CHECK-NEXT: je
148 ; CHECK: ldr %f0, %f2
149 ; CHECK: br %r14
150   %cond = icmp eq i64 %i1, -129
151   %tmp = select i1 %cond, double %a, double %b
152   %res = fadd double %tmp, 1.0
153   ret double %res
156 ; Check the low end of the CGHI range.
157 define double @f13(double %a, double %b, i64 %i1) {
158 ; CHECK-LABEL: f13:
159 ; CHECK: cghi %r2, -32768
160 ; CHECK-NEXT: je
161 ; CHECK: ldr %f0, %f2
162 ; CHECK: br %r14
163   %cond = icmp eq i64 %i1, -32768
164   %tmp = select i1 %cond, double %a, double %b
165   %res = fadd double %tmp, 1.0
166   ret double %res
169 ; Check the next value down, which must use CGFI instead.
170 define double @f14(double %a, double %b, i64 %i1) {
171 ; CHECK-LABEL: f14:
172 ; CHECK: cgfi %r2, -32769
173 ; CHECK-NEXT: je
174 ; CHECK: ldr %f0, %f2
175 ; CHECK: br %r14
176   %cond = icmp eq i64 %i1, -32769
177   %tmp = select i1 %cond, double %a, double %b
178   %res = fadd double %tmp, 1.0
179   ret double %res
182 ; Check the low end of the CGFI range.
183 define double @f15(double %a, double %b, i64 %i1) {
184 ; CHECK-LABEL: f15:
185 ; CHECK: cgfi %r2, -2147483648
186 ; CHECK-NEXT: je
187 ; CHECK: ldr %f0, %f2
188 ; CHECK: br %r14
189   %cond = icmp eq i64 %i1, -2147483648
190   %tmp = select i1 %cond, double %a, double %b
191   %res = fadd double %tmp, 1.0
192   ret double %res
195 ; Check the next value down, which must use register comparison.
196 define double @f16(double %a, double %b, i64 %i1) {
197 ; CHECK-LABEL: f16:
198 ; CHECK: cgrje
199 ; CHECK: ldr %f0, %f2
200 ; CHECK: br %r14
201   %cond = icmp eq i64 %i1, -2147483649
202   %tmp = select i1 %cond, double %a, double %b
203   %res = fadd double %tmp, 1.0
204   ret double %res