Mercurial > hg > CbC > CbC_llvm
comparison test/CodeGen/SystemZ/int-cmp-05.ll @ 120:1172e4bd9c6f
update 4.0.0
author | mir3636 |
---|---|
date | Fri, 25 Nov 2016 19:14:25 +0900 |
parents | afa8332a0e37 |
children | c2174574ed3a |
comparison
equal
deleted
inserted
replaced
101:34baf5011add | 120:1172e4bd9c6f |
---|---|
6 | 6 |
7 ; Check signed register comparison. | 7 ; Check signed register comparison. |
8 define double @f1(double %a, double %b, i64 %i1, i32 %unext) { | 8 define double @f1(double %a, double %b, i64 %i1, i32 %unext) { |
9 ; CHECK-LABEL: f1: | 9 ; CHECK-LABEL: f1: |
10 ; CHECK: cgfr %r2, %r3 | 10 ; CHECK: cgfr %r2, %r3 |
11 ; CHECK-NEXT: jl | 11 ; CHECK-NEXT: blr %r14 |
12 ; CHECK: ldr %f0, %f2 | 12 ; CHECK: ldr %f0, %f2 |
13 ; CHECK: br %r14 | 13 ; CHECK: br %r14 |
14 %i2 = sext i32 %unext to i64 | 14 %i2 = sext i32 %unext to i64 |
15 %cond = icmp slt i64 %i1, %i2 | 15 %cond = icmp slt i64 %i1, %i2 |
16 %res = select i1 %cond, double %a, double %b | 16 %res = select i1 %cond, double %a, double %b |
30 | 30 |
31 ; Check register equality. | 31 ; Check register equality. |
32 define double @f3(double %a, double %b, i64 %i1, i32 %unext) { | 32 define double @f3(double %a, double %b, i64 %i1, i32 %unext) { |
33 ; CHECK-LABEL: f3: | 33 ; CHECK-LABEL: f3: |
34 ; CHECK: cgfr %r2, %r3 | 34 ; CHECK: cgfr %r2, %r3 |
35 ; CHECK-NEXT: je | 35 ; CHECK-NEXT: ber %r14 |
36 ; CHECK: ldr %f0, %f2 | 36 ; CHECK: ldr %f0, %f2 |
37 ; CHECK: br %r14 | 37 ; CHECK: br %r14 |
38 %i2 = sext i32 %unext to i64 | 38 %i2 = sext i32 %unext to i64 |
39 %cond = icmp eq i64 %i1, %i2 | 39 %cond = icmp eq i64 %i1, %i2 |
40 %res = select i1 %cond, double %a, double %b | 40 %res = select i1 %cond, double %a, double %b |
43 | 43 |
44 ; Check register inequality. | 44 ; Check register inequality. |
45 define double @f4(double %a, double %b, i64 %i1, i32 %unext) { | 45 define double @f4(double %a, double %b, i64 %i1, i32 %unext) { |
46 ; CHECK-LABEL: f4: | 46 ; CHECK-LABEL: f4: |
47 ; CHECK: cgfr %r2, %r3 | 47 ; CHECK: cgfr %r2, %r3 |
48 ; CHECK-NEXT: jlh | 48 ; CHECK-NEXT: blhr %r14 |
49 ; CHECK: ldr %f0, %f2 | 49 ; CHECK: ldr %f0, %f2 |
50 ; CHECK: br %r14 | 50 ; CHECK: br %r14 |
51 %i2 = sext i32 %unext to i64 | 51 %i2 = sext i32 %unext to i64 |
52 %cond = icmp ne i64 %i1, %i2 | 52 %cond = icmp ne i64 %i1, %i2 |
53 %res = select i1 %cond, double %a, double %b | 53 %res = select i1 %cond, double %a, double %b |
56 | 56 |
57 ; Check signed comparison with memory. | 57 ; Check signed comparison with memory. |
58 define double @f5(double %a, double %b, i64 %i1, i32 *%ptr) { | 58 define double @f5(double %a, double %b, i64 %i1, i32 *%ptr) { |
59 ; CHECK-LABEL: f5: | 59 ; CHECK-LABEL: f5: |
60 ; CHECK: cgf %r2, 0(%r3) | 60 ; CHECK: cgf %r2, 0(%r3) |
61 ; CHECK-NEXT: jl | 61 ; CHECK-NEXT: blr %r14 |
62 ; CHECK: ldr %f0, %f2 | 62 ; CHECK: ldr %f0, %f2 |
63 ; CHECK: br %r14 | 63 ; CHECK: br %r14 |
64 %unext = load i32 , i32 *%ptr | 64 %unext = load i32 , i32 *%ptr |
65 %i2 = sext i32 %unext to i64 | 65 %i2 = sext i32 %unext to i64 |
66 %cond = icmp slt i64 %i1, %i2 | 66 %cond = icmp slt i64 %i1, %i2 |
82 | 82 |
83 ; Check memory equality. | 83 ; Check memory equality. |
84 define double @f7(double %a, double %b, i64 %i1, i32 *%ptr) { | 84 define double @f7(double %a, double %b, i64 %i1, i32 *%ptr) { |
85 ; CHECK-LABEL: f7: | 85 ; CHECK-LABEL: f7: |
86 ; CHECK: cgf %r2, 0(%r3) | 86 ; CHECK: cgf %r2, 0(%r3) |
87 ; CHECK-NEXT: je | 87 ; CHECK-NEXT: ber %r14 |
88 ; CHECK: ldr %f0, %f2 | 88 ; CHECK: ldr %f0, %f2 |
89 ; CHECK: br %r14 | 89 ; CHECK: br %r14 |
90 %unext = load i32 , i32 *%ptr | 90 %unext = load i32 , i32 *%ptr |
91 %i2 = sext i32 %unext to i64 | 91 %i2 = sext i32 %unext to i64 |
92 %cond = icmp eq i64 %i1, %i2 | 92 %cond = icmp eq i64 %i1, %i2 |
96 | 96 |
97 ; Check memory inequality. | 97 ; Check memory inequality. |
98 define double @f8(double %a, double %b, i64 %i1, i32 *%ptr) { | 98 define double @f8(double %a, double %b, i64 %i1, i32 *%ptr) { |
99 ; CHECK-LABEL: f8: | 99 ; CHECK-LABEL: f8: |
100 ; CHECK: cgf %r2, 0(%r3) | 100 ; CHECK: cgf %r2, 0(%r3) |
101 ; CHECK-NEXT: jlh | 101 ; CHECK-NEXT: blhr %r14 |
102 ; CHECK: ldr %f0, %f2 | 102 ; CHECK: ldr %f0, %f2 |
103 ; CHECK: br %r14 | 103 ; CHECK: br %r14 |
104 %unext = load i32 , i32 *%ptr | 104 %unext = load i32 , i32 *%ptr |
105 %i2 = sext i32 %unext to i64 | 105 %i2 = sext i32 %unext to i64 |
106 %cond = icmp ne i64 %i1, %i2 | 106 %cond = icmp ne i64 %i1, %i2 |
110 | 110 |
111 ; Check the high end of the aligned CGF range. | 111 ; Check the high end of the aligned CGF range. |
112 define double @f9(double %a, double %b, i64 %i1, i32 *%base) { | 112 define double @f9(double %a, double %b, i64 %i1, i32 *%base) { |
113 ; CHECK-LABEL: f9: | 113 ; CHECK-LABEL: f9: |
114 ; CHECK: cgf %r2, 524284(%r3) | 114 ; CHECK: cgf %r2, 524284(%r3) |
115 ; CHECK-NEXT: jl | 115 ; CHECK-NEXT: blr %r14 |
116 ; CHECK: ldr %f0, %f2 | 116 ; CHECK: ldr %f0, %f2 |
117 ; CHECK: br %r14 | 117 ; CHECK: br %r14 |
118 %ptr = getelementptr i32, i32 *%base, i64 131071 | 118 %ptr = getelementptr i32, i32 *%base, i64 131071 |
119 %unext = load i32 , i32 *%ptr | 119 %unext = load i32 , i32 *%ptr |
120 %i2 = sext i32 %unext to i64 | 120 %i2 = sext i32 %unext to i64 |
127 ; Other sequences besides this one would be OK. | 127 ; Other sequences besides this one would be OK. |
128 define double @f10(double %a, double %b, i64 %i1, i32 *%base) { | 128 define double @f10(double %a, double %b, i64 %i1, i32 *%base) { |
129 ; CHECK-LABEL: f10: | 129 ; CHECK-LABEL: f10: |
130 ; CHECK: agfi %r3, 524288 | 130 ; CHECK: agfi %r3, 524288 |
131 ; CHECK: cgf %r2, 0(%r3) | 131 ; CHECK: cgf %r2, 0(%r3) |
132 ; CHECK-NEXT: jl | 132 ; CHECK-NEXT: blr %r14 |
133 ; CHECK: ldr %f0, %f2 | 133 ; CHECK: ldr %f0, %f2 |
134 ; CHECK: br %r14 | 134 ; CHECK: br %r14 |
135 %ptr = getelementptr i32, i32 *%base, i64 131072 | 135 %ptr = getelementptr i32, i32 *%base, i64 131072 |
136 %unext = load i32 , i32 *%ptr | 136 %unext = load i32 , i32 *%ptr |
137 %i2 = sext i32 %unext to i64 | 137 %i2 = sext i32 %unext to i64 |
142 | 142 |
143 ; Check the high end of the negative aligned CGF range. | 143 ; Check the high end of the negative aligned CGF range. |
144 define double @f11(double %a, double %b, i64 %i1, i32 *%base) { | 144 define double @f11(double %a, double %b, i64 %i1, i32 *%base) { |
145 ; CHECK-LABEL: f11: | 145 ; CHECK-LABEL: f11: |
146 ; CHECK: cgf %r2, -4(%r3) | 146 ; CHECK: cgf %r2, -4(%r3) |
147 ; CHECK-NEXT: jl | 147 ; CHECK-NEXT: blr %r14 |
148 ; CHECK: ldr %f0, %f2 | 148 ; CHECK: ldr %f0, %f2 |
149 ; CHECK: br %r14 | 149 ; CHECK: br %r14 |
150 %ptr = getelementptr i32, i32 *%base, i64 -1 | 150 %ptr = getelementptr i32, i32 *%base, i64 -1 |
151 %unext = load i32 , i32 *%ptr | 151 %unext = load i32 , i32 *%ptr |
152 %i2 = sext i32 %unext to i64 | 152 %i2 = sext i32 %unext to i64 |
157 | 157 |
158 ; Check the low end of the CGF range. | 158 ; Check the low end of the CGF range. |
159 define double @f12(double %a, double %b, i64 %i1, i32 *%base) { | 159 define double @f12(double %a, double %b, i64 %i1, i32 *%base) { |
160 ; CHECK-LABEL: f12: | 160 ; CHECK-LABEL: f12: |
161 ; CHECK: cgf %r2, -524288(%r3) | 161 ; CHECK: cgf %r2, -524288(%r3) |
162 ; CHECK-NEXT: jl | 162 ; CHECK-NEXT: blr %r14 |
163 ; CHECK: ldr %f0, %f2 | 163 ; CHECK: ldr %f0, %f2 |
164 ; CHECK: br %r14 | 164 ; CHECK: br %r14 |
165 %ptr = getelementptr i32, i32 *%base, i64 -131072 | 165 %ptr = getelementptr i32, i32 *%base, i64 -131072 |
166 %unext = load i32 , i32 *%ptr | 166 %unext = load i32 , i32 *%ptr |
167 %i2 = sext i32 %unext to i64 | 167 %i2 = sext i32 %unext to i64 |
174 ; Other sequences besides this one would be OK. | 174 ; Other sequences besides this one would be OK. |
175 define double @f13(double %a, double %b, i64 %i1, i32 *%base) { | 175 define double @f13(double %a, double %b, i64 %i1, i32 *%base) { |
176 ; CHECK-LABEL: f13: | 176 ; CHECK-LABEL: f13: |
177 ; CHECK: agfi %r3, -524292 | 177 ; CHECK: agfi %r3, -524292 |
178 ; CHECK: cgf %r2, 0(%r3) | 178 ; CHECK: cgf %r2, 0(%r3) |
179 ; CHECK-NEXT: jl | 179 ; CHECK-NEXT: blr %r14 |
180 ; CHECK: ldr %f0, %f2 | 180 ; CHECK: ldr %f0, %f2 |
181 ; CHECK: br %r14 | 181 ; CHECK: br %r14 |
182 %ptr = getelementptr i32, i32 *%base, i64 -131073 | 182 %ptr = getelementptr i32, i32 *%base, i64 -131073 |
183 %unext = load i32 , i32 *%ptr | 183 %unext = load i32 , i32 *%ptr |
184 %i2 = sext i32 %unext to i64 | 184 %i2 = sext i32 %unext to i64 |
189 | 189 |
190 ; Check that CGF allows an index. | 190 ; Check that CGF allows an index. |
191 define double @f14(double %a, double %b, i64 %i1, i64 %base, i64 %index) { | 191 define double @f14(double %a, double %b, i64 %i1, i64 %base, i64 %index) { |
192 ; CHECK-LABEL: f14: | 192 ; CHECK-LABEL: f14: |
193 ; CHECK: cgf %r2, 524284({{%r4,%r3|%r3,%r4}}) | 193 ; CHECK: cgf %r2, 524284({{%r4,%r3|%r3,%r4}}) |
194 ; CHECK-NEXT: jl | 194 ; CHECK-NEXT: blr %r14 |
195 ; CHECK: ldr %f0, %f2 | 195 ; CHECK: ldr %f0, %f2 |
196 ; CHECK: br %r14 | 196 ; CHECK: br %r14 |
197 %add1 = add i64 %base, %index | 197 %add1 = add i64 %base, %index |
198 %add2 = add i64 %add1, 524284 | 198 %add2 = add i64 %add1, 524284 |
199 %ptr = inttoptr i64 %add2 to i32 * | 199 %ptr = inttoptr i64 %add2 to i32 * |
293 | 293 |
294 ; Check the comparison can be reversed if that allows CGFR to be used. | 294 ; Check the comparison can be reversed if that allows CGFR to be used. |
295 define double @f16(double %a, double %b, i64 %i1, i32 %unext) { | 295 define double @f16(double %a, double %b, i64 %i1, i32 %unext) { |
296 ; CHECK-LABEL: f16: | 296 ; CHECK-LABEL: f16: |
297 ; CHECK: cgfr %r2, %r3 | 297 ; CHECK: cgfr %r2, %r3 |
298 ; CHECK-NEXT: jh | 298 ; CHECK-NEXT: bhr %r14 |
299 ; CHECK: ldr %f0, %f2 | 299 ; CHECK: ldr %f0, %f2 |
300 ; CHECK: br %r14 | 300 ; CHECK: br %r14 |
301 %i2 = sext i32 %unext to i64 | 301 %i2 = sext i32 %unext to i64 |
302 %cond = icmp slt i64 %i2, %i1 | 302 %cond = icmp slt i64 %i2, %i1 |
303 %res = select i1 %cond, double %a, double %b | 303 %res = select i1 %cond, double %a, double %b |
306 | 306 |
307 ; Likewise CGF. | 307 ; Likewise CGF. |
308 define double @f17(double %a, double %b, i64 %i2, i32 *%ptr) { | 308 define double @f17(double %a, double %b, i64 %i2, i32 *%ptr) { |
309 ; CHECK-LABEL: f17: | 309 ; CHECK-LABEL: f17: |
310 ; CHECK: cgf %r2, 0(%r3) | 310 ; CHECK: cgf %r2, 0(%r3) |
311 ; CHECK-NEXT: jh {{\.L.*}} | 311 ; CHECK-NEXT: bhr %r14 |
312 ; CHECK: ldr %f0, %f2 | 312 ; CHECK: ldr %f0, %f2 |
313 ; CHECK: br %r14 | 313 ; CHECK: br %r14 |
314 %unext = load i32 , i32 *%ptr | 314 %unext = load i32 , i32 *%ptr |
315 %i1 = sext i32 %unext to i64 | 315 %i1 = sext i32 %unext to i64 |
316 %cond = icmp slt i64 %i1, %i2 | 316 %cond = icmp slt i64 %i1, %i2 |