Mercurial > hg > CbC > CbC_llvm
comparison test/CodeGen/SystemZ/int-cmp-32.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 |
---|---|
4 | 4 |
5 ; Check ordered comparisons with 0. | 5 ; Check ordered comparisons with 0. |
6 define double @f1(double %a, double %b, i32 *%ptr) { | 6 define double @f1(double %a, double %b, i32 *%ptr) { |
7 ; CHECK-LABEL: f1: | 7 ; CHECK-LABEL: f1: |
8 ; CHECK: chsi 0(%r2), 0 | 8 ; CHECK: chsi 0(%r2), 0 |
9 ; CHECK-NEXT: jl | 9 ; CHECK-NEXT: blr %r14 |
10 ; CHECK: ldr %f0, %f2 | 10 ; CHECK: ldr %f0, %f2 |
11 ; CHECK: br %r14 | 11 ; CHECK: br %r14 |
12 %val = load i32 , i32 *%ptr | 12 %val = load i32 , i32 *%ptr |
13 %cond = icmp slt i32 %val, 0 | 13 %cond = icmp slt i32 %val, 0 |
14 %res = select i1 %cond, double %a, double %b | 14 %res = select i1 %cond, double %a, double %b |
17 | 17 |
18 ; Check ordered comparisons with 1. | 18 ; Check ordered comparisons with 1. |
19 define double @f2(double %a, double %b, i32 *%ptr) { | 19 define double @f2(double %a, double %b, i32 *%ptr) { |
20 ; CHECK-LABEL: f2: | 20 ; CHECK-LABEL: f2: |
21 ; CHECK: chsi 0(%r2), 0 | 21 ; CHECK: chsi 0(%r2), 0 |
22 ; CHECK-NEXT: jle | 22 ; CHECK-NEXT: bler %r14 |
23 ; CHECK: ldr %f0, %f2 | 23 ; CHECK: ldr %f0, %f2 |
24 ; CHECK: br %r14 | 24 ; CHECK: br %r14 |
25 %val = load i32 , i32 *%ptr | 25 %val = load i32 , i32 *%ptr |
26 %cond = icmp slt i32 %val, 1 | 26 %cond = icmp slt i32 %val, 1 |
27 %res = select i1 %cond, double %a, double %b | 27 %res = select i1 %cond, double %a, double %b |
30 | 30 |
31 ; Check ordered comparisons with the high end of the signed 16-bit range. | 31 ; Check ordered comparisons with the high end of the signed 16-bit range. |
32 define double @f3(double %a, double %b, i32 *%ptr) { | 32 define double @f3(double %a, double %b, i32 *%ptr) { |
33 ; CHECK-LABEL: f3: | 33 ; CHECK-LABEL: f3: |
34 ; CHECK: chsi 0(%r2), 32767 | 34 ; CHECK: chsi 0(%r2), 32767 |
35 ; CHECK-NEXT: jl | 35 ; CHECK-NEXT: blr %r14 |
36 ; CHECK: ldr %f0, %f2 | 36 ; CHECK: ldr %f0, %f2 |
37 ; CHECK: br %r14 | 37 ; CHECK: br %r14 |
38 %val = load i32 , i32 *%ptr | 38 %val = load i32 , i32 *%ptr |
39 %cond = icmp slt i32 %val, 32767 | 39 %cond = icmp slt i32 %val, 32767 |
40 %res = select i1 %cond, double %a, double %b | 40 %res = select i1 %cond, double %a, double %b |
54 | 54 |
55 ; Check ordered comparisons with -1. | 55 ; Check ordered comparisons with -1. |
56 define double @f5(double %a, double %b, i32 *%ptr) { | 56 define double @f5(double %a, double %b, i32 *%ptr) { |
57 ; CHECK-LABEL: f5: | 57 ; CHECK-LABEL: f5: |
58 ; CHECK: chsi 0(%r2), -1 | 58 ; CHECK: chsi 0(%r2), -1 |
59 ; CHECK-NEXT: jl | 59 ; CHECK-NEXT: blr %r14 |
60 ; CHECK: ldr %f0, %f2 | 60 ; CHECK: ldr %f0, %f2 |
61 ; CHECK: br %r14 | 61 ; CHECK: br %r14 |
62 %val = load i32 , i32 *%ptr | 62 %val = load i32 , i32 *%ptr |
63 %cond = icmp slt i32 %val, -1 | 63 %cond = icmp slt i32 %val, -1 |
64 %res = select i1 %cond, double %a, double %b | 64 %res = select i1 %cond, double %a, double %b |
67 | 67 |
68 ; Check ordered comparisons with the low end of the 16-bit signed range. | 68 ; Check ordered comparisons with the low end of the 16-bit signed range. |
69 define double @f6(double %a, double %b, i32 *%ptr) { | 69 define double @f6(double %a, double %b, i32 *%ptr) { |
70 ; CHECK-LABEL: f6: | 70 ; CHECK-LABEL: f6: |
71 ; CHECK: chsi 0(%r2), -32768 | 71 ; CHECK: chsi 0(%r2), -32768 |
72 ; CHECK-NEXT: jl | 72 ; CHECK-NEXT: blr %r14 |
73 ; CHECK: ldr %f0, %f2 | 73 ; CHECK: ldr %f0, %f2 |
74 ; CHECK: br %r14 | 74 ; CHECK: br %r14 |
75 %val = load i32 , i32 *%ptr | 75 %val = load i32 , i32 *%ptr |
76 %cond = icmp slt i32 %val, -32768 | 76 %cond = icmp slt i32 %val, -32768 |
77 %res = select i1 %cond, double %a, double %b | 77 %res = select i1 %cond, double %a, double %b |
91 | 91 |
92 ; Check equality comparisons with 0. | 92 ; Check equality comparisons with 0. |
93 define double @f8(double %a, double %b, i32 *%ptr) { | 93 define double @f8(double %a, double %b, i32 *%ptr) { |
94 ; CHECK-LABEL: f8: | 94 ; CHECK-LABEL: f8: |
95 ; CHECK: chsi 0(%r2), 0 | 95 ; CHECK: chsi 0(%r2), 0 |
96 ; CHECK-NEXT: je | 96 ; CHECK-NEXT: ber %r14 |
97 ; CHECK: ldr %f0, %f2 | 97 ; CHECK: ldr %f0, %f2 |
98 ; CHECK: br %r14 | 98 ; CHECK: br %r14 |
99 %val = load i32 , i32 *%ptr | 99 %val = load i32 , i32 *%ptr |
100 %cond = icmp eq i32 %val, 0 | 100 %cond = icmp eq i32 %val, 0 |
101 %res = select i1 %cond, double %a, double %b | 101 %res = select i1 %cond, double %a, double %b |
104 | 104 |
105 ; Check equality comparisons with 1. | 105 ; Check equality comparisons with 1. |
106 define double @f9(double %a, double %b, i32 *%ptr) { | 106 define double @f9(double %a, double %b, i32 *%ptr) { |
107 ; CHECK-LABEL: f9: | 107 ; CHECK-LABEL: f9: |
108 ; CHECK: chsi 0(%r2), 1 | 108 ; CHECK: chsi 0(%r2), 1 |
109 ; CHECK-NEXT: je | 109 ; CHECK-NEXT: ber %r14 |
110 ; CHECK: ldr %f0, %f2 | 110 ; CHECK: ldr %f0, %f2 |
111 ; CHECK: br %r14 | 111 ; CHECK: br %r14 |
112 %val = load i32 , i32 *%ptr | 112 %val = load i32 , i32 *%ptr |
113 %cond = icmp eq i32 %val, 1 | 113 %cond = icmp eq i32 %val, 1 |
114 %res = select i1 %cond, double %a, double %b | 114 %res = select i1 %cond, double %a, double %b |
117 | 117 |
118 ; Check equality comparisons with the high end of the signed 16-bit range. | 118 ; Check equality comparisons with the high end of the signed 16-bit range. |
119 define double @f10(double %a, double %b, i32 *%ptr) { | 119 define double @f10(double %a, double %b, i32 *%ptr) { |
120 ; CHECK-LABEL: f10: | 120 ; CHECK-LABEL: f10: |
121 ; CHECK: chsi 0(%r2), 32767 | 121 ; CHECK: chsi 0(%r2), 32767 |
122 ; CHECK-NEXT: je | 122 ; CHECK-NEXT: ber %r14 |
123 ; CHECK: ldr %f0, %f2 | 123 ; CHECK: ldr %f0, %f2 |
124 ; CHECK: br %r14 | 124 ; CHECK: br %r14 |
125 %val = load i32 , i32 *%ptr | 125 %val = load i32 , i32 *%ptr |
126 %cond = icmp eq i32 %val, 32767 | 126 %cond = icmp eq i32 %val, 32767 |
127 %res = select i1 %cond, double %a, double %b | 127 %res = select i1 %cond, double %a, double %b |
141 | 141 |
142 ; Check equality comparisons with -1. | 142 ; Check equality comparisons with -1. |
143 define double @f12(double %a, double %b, i32 *%ptr) { | 143 define double @f12(double %a, double %b, i32 *%ptr) { |
144 ; CHECK-LABEL: f12: | 144 ; CHECK-LABEL: f12: |
145 ; CHECK: chsi 0(%r2), -1 | 145 ; CHECK: chsi 0(%r2), -1 |
146 ; CHECK-NEXT: je | 146 ; CHECK-NEXT: ber %r14 |
147 ; CHECK: ldr %f0, %f2 | 147 ; CHECK: ldr %f0, %f2 |
148 ; CHECK: br %r14 | 148 ; CHECK: br %r14 |
149 %val = load i32 , i32 *%ptr | 149 %val = load i32 , i32 *%ptr |
150 %cond = icmp eq i32 %val, -1 | 150 %cond = icmp eq i32 %val, -1 |
151 %res = select i1 %cond, double %a, double %b | 151 %res = select i1 %cond, double %a, double %b |
154 | 154 |
155 ; Check equality comparisons with the low end of the 16-bit signed range. | 155 ; Check equality comparisons with the low end of the 16-bit signed range. |
156 define double @f13(double %a, double %b, i32 *%ptr) { | 156 define double @f13(double %a, double %b, i32 *%ptr) { |
157 ; CHECK-LABEL: f13: | 157 ; CHECK-LABEL: f13: |
158 ; CHECK: chsi 0(%r2), -32768 | 158 ; CHECK: chsi 0(%r2), -32768 |
159 ; CHECK-NEXT: je | 159 ; CHECK-NEXT: ber %r14 |
160 ; CHECK: ldr %f0, %f2 | 160 ; CHECK: ldr %f0, %f2 |
161 ; CHECK: br %r14 | 161 ; CHECK: br %r14 |
162 %val = load i32 , i32 *%ptr | 162 %val = load i32 , i32 *%ptr |
163 %cond = icmp eq i32 %val, -32768 | 163 %cond = icmp eq i32 %val, -32768 |
164 %res = select i1 %cond, double %a, double %b | 164 %res = select i1 %cond, double %a, double %b |
178 | 178 |
179 ; Check the high end of the CHSI range. | 179 ; Check the high end of the CHSI range. |
180 define double @f15(double %a, double %b, i32 %i1, i32 *%base) { | 180 define double @f15(double %a, double %b, i32 %i1, i32 *%base) { |
181 ; CHECK-LABEL: f15: | 181 ; CHECK-LABEL: f15: |
182 ; CHECK: chsi 4092(%r3), 0 | 182 ; CHECK: chsi 4092(%r3), 0 |
183 ; CHECK-NEXT: jl | 183 ; CHECK-NEXT: blr %r14 |
184 ; CHECK: ldr %f0, %f2 | 184 ; CHECK: ldr %f0, %f2 |
185 ; CHECK: br %r14 | 185 ; CHECK: br %r14 |
186 %ptr = getelementptr i32, i32 *%base, i64 1023 | 186 %ptr = getelementptr i32, i32 *%base, i64 1023 |
187 %val = load i32 , i32 *%ptr | 187 %val = load i32 , i32 *%ptr |
188 %cond = icmp slt i32 %val, 0 | 188 %cond = icmp slt i32 %val, 0 |
193 ; Check the next word up, which needs separate address logic, | 193 ; Check the next word up, which needs separate address logic, |
194 define double @f16(double %a, double %b, i32 *%base) { | 194 define double @f16(double %a, double %b, i32 *%base) { |
195 ; CHECK-LABEL: f16: | 195 ; CHECK-LABEL: f16: |
196 ; CHECK: aghi %r2, 4096 | 196 ; CHECK: aghi %r2, 4096 |
197 ; CHECK: chsi 0(%r2), 0 | 197 ; CHECK: chsi 0(%r2), 0 |
198 ; CHECK-NEXT: jl | 198 ; CHECK-NEXT: blr %r14 |
199 ; CHECK: ldr %f0, %f2 | 199 ; CHECK: ldr %f0, %f2 |
200 ; CHECK: br %r14 | 200 ; CHECK: br %r14 |
201 %ptr = getelementptr i32, i32 *%base, i64 1024 | 201 %ptr = getelementptr i32, i32 *%base, i64 1024 |
202 %val = load i32 , i32 *%ptr | 202 %val = load i32 , i32 *%ptr |
203 %cond = icmp slt i32 %val, 0 | 203 %cond = icmp slt i32 %val, 0 |
208 ; Check negative offsets, which also need separate address logic. | 208 ; Check negative offsets, which also need separate address logic. |
209 define double @f17(double %a, double %b, i32 *%base) { | 209 define double @f17(double %a, double %b, i32 *%base) { |
210 ; CHECK-LABEL: f17: | 210 ; CHECK-LABEL: f17: |
211 ; CHECK: aghi %r2, -4 | 211 ; CHECK: aghi %r2, -4 |
212 ; CHECK: chsi 0(%r2), 0 | 212 ; CHECK: chsi 0(%r2), 0 |
213 ; CHECK-NEXT: jl | 213 ; CHECK-NEXT: blr %r14 |
214 ; CHECK: ldr %f0, %f2 | 214 ; CHECK: ldr %f0, %f2 |
215 ; CHECK: br %r14 | 215 ; CHECK: br %r14 |
216 %ptr = getelementptr i32, i32 *%base, i64 -1 | 216 %ptr = getelementptr i32, i32 *%base, i64 -1 |
217 %val = load i32 , i32 *%ptr | 217 %val = load i32 , i32 *%ptr |
218 %cond = icmp slt i32 %val, 0 | 218 %cond = icmp slt i32 %val, 0 |
223 ; Check that CHSI does not allow indices. | 223 ; Check that CHSI does not allow indices. |
224 define double @f18(double %a, double %b, i64 %base, i64 %index) { | 224 define double @f18(double %a, double %b, i64 %base, i64 %index) { |
225 ; CHECK-LABEL: f18: | 225 ; CHECK-LABEL: f18: |
226 ; CHECK: agr {{%r2, %r3|%r3, %r2}} | 226 ; CHECK: agr {{%r2, %r3|%r3, %r2}} |
227 ; CHECK: chsi 0({{%r[23]}}), 0 | 227 ; CHECK: chsi 0({{%r[23]}}), 0 |
228 ; CHECK-NEXT: jl | 228 ; CHECK-NEXT: blr %r14 |
229 ; CHECK: ldr %f0, %f2 | 229 ; CHECK: ldr %f0, %f2 |
230 ; CHECK: br %r14 | 230 ; CHECK: br %r14 |
231 %add = add i64 %base, %index | 231 %add = add i64 %base, %index |
232 %ptr = inttoptr i64 %add to i32 * | 232 %ptr = inttoptr i64 %add to i32 * |
233 %val = load i32 , i32 *%ptr | 233 %val = load i32 , i32 *%ptr |