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