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