@@ -10,9 +10,8 @@ define i1 @test_xor1(i8 %x, i8 %y, i8 %z) {
10
10
; CHECK-LABEL: @test_xor1(
11
11
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X:%.*]], -1
12
12
; CHECK-NEXT: call void @use.i8(i8 [[XOR]])
13
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i8 [[XOR]], [[Y:%.*]]
14
- ; CHECK-NEXT: [[NZ:%.*]] = xor i8 [[Z:%.*]], -1
15
- ; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[XOR2]], [[NZ]]
13
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i8 [[X]], [[Y:%.*]]
14
+ ; CHECK-NEXT: [[R:%.*]] = icmp sgt i8 [[TMP1]], [[Z:%.*]]
16
15
; CHECK-NEXT: ret i1 [[R]]
17
16
;
18
17
%xor = xor i8 %x , -1
@@ -26,11 +25,10 @@ define i1 @test_xor1(i8 %x, i8 %y, i8 %z) {
26
25
; test for ~z <= (x ^ ~y)
27
26
define i1 @test_xor2 (i8 %x , i8 %y , i8 %z ) {
28
27
; CHECK-LABEL: @test_xor2(
29
- ; CHECK-NEXT: [[NZ:%.*]] = xor i8 [[Z:%.*]], -1
30
28
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[Y:%.*]], -1
31
29
; CHECK-NEXT: call void @use.i8(i8 [[XOR]])
32
- ; CHECK-NEXT: [[XOR2 :%.*]] = xor i8 [[XOR ]], [[X:%.*]]
33
- ; CHECK-NEXT: [[R:%.*]] = icmp sge i8 [[XOR2 ]], [[NZ ]]
30
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i8 [[Y ]], [[X:%.*]]
31
+ ; CHECK-NEXT: [[R:%.*]] = icmp sle i8 [[TMP1 ]], [[Z:%.* ]]
34
32
; CHECK-NEXT: ret i1 [[R]]
35
33
;
36
34
%nz = xor i8 %z , -1
@@ -44,11 +42,10 @@ define i1 @test_xor2(i8 %x, i8 %y, i8 %z) {
44
42
; test for ~z > (~x ^ y)
45
43
define i1 @test_xor3 (i8 %x , i8 %y , i8 %z ) {
46
44
; CHECK-LABEL: @test_xor3(
47
- ; CHECK-NEXT: [[NZ:%.*]] = xor i8 [[Z:%.*]], -1
48
45
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X:%.*]], -1
49
46
; CHECK-NEXT: call void @use.i8(i8 [[XOR]])
50
- ; CHECK-NEXT: [[XOR2 :%.*]] = xor i8 [[XOR ]], [[Y:%.*]]
51
- ; CHECK-NEXT: [[R:%.*]] = icmp slt i8 [[XOR2 ]], [[NZ ]]
47
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i8 [[X ]], [[Y:%.*]]
48
+ ; CHECK-NEXT: [[R:%.*]] = icmp sgt i8 [[TMP1 ]], [[Z:%.* ]]
52
49
; CHECK-NEXT: ret i1 [[R]]
53
50
;
54
51
%nz = xor i8 %z , -1
@@ -89,11 +86,10 @@ define i1 @test_xor_eq(i8 %x, i8 %y, i8 %z) {
89
86
; other tests
90
87
define i1 @test_xor4 (i8 %x , i8 %y , i8 %z ) {
91
88
; CHECK-LABEL: @test_xor4(
92
- ; CHECK-NEXT: [[NZ:%.*]] = xor i8 [[Z:%.*]], -1
93
89
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X:%.*]], -1
94
90
; CHECK-NEXT: call void @use.i8(i8 [[XOR]])
95
- ; CHECK-NEXT: [[XOR2 :%.*]] = xor i8 [[XOR ]], [[Y:%.*]]
96
- ; CHECK-NEXT: [[R:%.*]] = icmp sge i8 [[XOR2 ]], [[NZ ]]
91
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i8 [[X ]], [[Y:%.*]]
92
+ ; CHECK-NEXT: [[R:%.*]] = icmp sle i8 [[TMP1 ]], [[Z:%.* ]]
97
93
; CHECK-NEXT: ret i1 [[R]]
98
94
;
99
95
%nz = xor i8 %z , -1
@@ -106,11 +102,10 @@ define i1 @test_xor4(i8 %x, i8 %y, i8 %z) {
106
102
107
103
define i1 @test_xor5 (i8 %x , i8 %y , i8 %z ) {
108
104
; CHECK-LABEL: @test_xor5(
109
- ; CHECK-NEXT: [[NZ:%.*]] = xor i8 [[Z:%.*]], -1
110
105
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X:%.*]], -1
111
106
; CHECK-NEXT: call void @use.i8(i8 [[XOR]])
112
- ; CHECK-NEXT: [[XOR2 :%.*]] = xor i8 [[XOR ]], [[Y:%.*]]
113
- ; CHECK-NEXT: [[R:%.*]] = icmp ult i8 [[XOR2 ]], [[NZ ]]
107
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i8 [[X ]], [[Y:%.*]]
108
+ ; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[TMP1 ]], [[Z:%.* ]]
114
109
; CHECK-NEXT: ret i1 [[R]]
115
110
;
116
111
%nz = xor i8 %z , -1
@@ -123,11 +118,10 @@ define i1 @test_xor5(i8 %x, i8 %y, i8 %z) {
123
118
124
119
define i1 @test_xor6 (i8 %x , i8 %y , i8 %z ) {
125
120
; CHECK-LABEL: @test_xor6(
126
- ; CHECK-NEXT: [[NZ:%.*]] = xor i8 [[Z:%.*]], -1
127
121
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X:%.*]], -1
128
122
; CHECK-NEXT: call void @use.i8(i8 [[XOR]])
129
- ; CHECK-NEXT: [[XOR2 :%.*]] = xor i8 [[XOR ]], [[Y:%.*]]
130
- ; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[XOR2 ]], [[NZ ]]
123
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i8 [[X ]], [[Y:%.*]]
124
+ ; CHECK-NEXT: [[R:%.*]] = icmp uge i8 [[TMP1 ]], [[Z:%.* ]]
131
125
; CHECK-NEXT: ret i1 [[R]]
132
126
;
133
127
%nz = xor i8 %z , -1
@@ -140,11 +134,10 @@ define i1 @test_xor6(i8 %x, i8 %y, i8 %z) {
140
134
141
135
define i1 @test_xor7 (i8 %x , i8 %y , i8 %z ) {
142
136
; CHECK-LABEL: @test_xor7(
143
- ; CHECK-NEXT: [[NZ:%.*]] = xor i8 [[Z:%.*]], -1
144
137
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X:%.*]], -1
145
138
; CHECK-NEXT: call void @use.i8(i8 [[XOR]])
146
- ; CHECK-NEXT: [[XOR2 :%.*]] = xor i8 [[XOR ]], [[Y:%.*]]
147
- ; CHECK-NEXT: [[R:%.*]] = icmp ugt i8 [[XOR2 ]], [[NZ ]]
139
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i8 [[X ]], [[Y:%.*]]
140
+ ; CHECK-NEXT: [[R:%.*]] = icmp ult i8 [[TMP1 ]], [[Z:%.* ]]
148
141
; CHECK-NEXT: ret i1 [[R]]
149
142
;
150
143
%nz = xor i8 %z , -1
@@ -157,11 +150,10 @@ define i1 @test_xor7(i8 %x, i8 %y, i8 %z) {
157
150
158
151
define i1 @test_xor8 (i8 %x , i8 %y , i8 %z ) {
159
152
; CHECK-LABEL: @test_xor8(
160
- ; CHECK-NEXT: [[NZ:%.*]] = xor i8 [[Z:%.*]], -1
161
153
; CHECK-NEXT: [[XOR:%.*]] = xor i8 [[X:%.*]], -1
162
154
; CHECK-NEXT: call void @use.i8(i8 [[XOR]])
163
- ; CHECK-NEXT: [[XOR2 :%.*]] = xor i8 [[XOR ]], [[Y:%.*]]
164
- ; CHECK-NEXT: [[R:%.*]] = icmp uge i8 [[XOR2 ]], [[NZ ]]
155
+ ; CHECK-NEXT: [[TMP1 :%.*]] = xor i8 [[X ]], [[Y:%.*]]
156
+ ; CHECK-NEXT: [[R:%.*]] = icmp ule i8 [[TMP1 ]], [[Z:%.* ]]
165
157
; CHECK-NEXT: ret i1 [[R]]
166
158
;
167
159
%nz = xor i8 %z , -1
@@ -175,9 +167,8 @@ define i1 @test_xor8(i8 %x, i8 %y, i8 %z) {
175
167
; test (~a ^ b) < ~a
176
168
define i1 @test_slt_xor (i32 %x , i32 %y ) {
177
169
; CHECK-LABEL: @test_slt_xor(
178
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[X:%.*]], -1
179
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[XOR1]], [[Y:%.*]]
180
- ; CHECK-NEXT: [[R:%.*]] = icmp slt i32 [[XOR2]], [[XOR1]]
170
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
171
+ ; CHECK-NEXT: [[R:%.*]] = icmp sgt i32 [[TMP1]], [[X]]
181
172
; CHECK-NEXT: ret i1 [[R]]
182
173
;
183
174
%xor1 = xor i32 %x , -1
@@ -189,9 +180,8 @@ define i1 @test_slt_xor(i32 %x, i32 %y) {
189
180
; test (a ^ ~b) <= ~b
190
181
define i1 @test_sle_xor (i32 %x , i32 %y ) {
191
182
; CHECK-LABEL: @test_sle_xor(
192
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[Y:%.*]], -1
193
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[XOR1]], [[X:%.*]]
194
- ; CHECK-NEXT: [[R:%.*]] = icmp sle i32 [[XOR2]], [[XOR1]]
183
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[Y:%.*]], [[X:%.*]]
184
+ ; CHECK-NEXT: [[R:%.*]] = icmp sge i32 [[TMP1]], [[Y]]
195
185
; CHECK-NEXT: ret i1 [[R]]
196
186
;
197
187
%xor1 = xor i32 %y , -1
@@ -203,9 +193,8 @@ define i1 @test_sle_xor(i32 %x, i32 %y) {
203
193
; test ~a > (~a ^ b)
204
194
define i1 @test_sgt_xor (i32 %x , i32 %y ) {
205
195
; CHECK-LABEL: @test_sgt_xor(
206
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[X:%.*]], -1
207
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[XOR1]], [[Y:%.*]]
208
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i32 [[XOR2]], [[XOR1]]
196
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
197
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP1]], [[X]]
209
198
; CHECK-NEXT: ret i1 [[CMP]]
210
199
;
211
200
%xor1 = xor i32 %x , -1
@@ -216,9 +205,8 @@ define i1 @test_sgt_xor(i32 %x, i32 %y) {
216
205
217
206
define i1 @test_sge_xor (i32 %x , i32 %y ) {
218
207
; CHECK-LABEL: @test_sge_xor(
219
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[X:%.*]], -1
220
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[XOR1]], [[Y:%.*]]
221
- ; CHECK-NEXT: [[CMP:%.*]] = icmp sge i32 [[XOR2]], [[XOR1]]
208
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
209
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp sle i32 [[TMP1]], [[X]]
222
210
; CHECK-NEXT: ret i1 [[CMP]]
223
211
;
224
212
%xor1 = xor i32 %x , -1
@@ -229,9 +217,8 @@ define i1 @test_sge_xor(i32 %x, i32 %y) {
229
217
230
218
define i1 @test_ult_xor (i32 %x , i32 %y ) {
231
219
; CHECK-LABEL: @test_ult_xor(
232
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[X:%.*]], -1
233
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[XOR1]], [[Y:%.*]]
234
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[XOR2]], [[XOR1]]
220
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
221
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[TMP1]], [[X]]
235
222
; CHECK-NEXT: ret i1 [[CMP]]
236
223
;
237
224
%xor1 = xor i32 %x , -1
@@ -242,9 +229,8 @@ define i1 @test_ult_xor(i32 %x, i32 %y) {
242
229
243
230
define i1 @test_ule_xor (i32 %x , i32 %y ) {
244
231
; CHECK-LABEL: @test_ule_xor(
245
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[X:%.*]], -1
246
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[XOR1]], [[Y:%.*]]
247
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ule i32 [[XOR2]], [[XOR1]]
232
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
233
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i32 [[TMP1]], [[X]]
248
234
; CHECK-NEXT: ret i1 [[CMP]]
249
235
;
250
236
%xor1 = xor i32 %x , -1
@@ -255,9 +241,8 @@ define i1 @test_ule_xor(i32 %x, i32 %y) {
255
241
256
242
define i1 @test_ugt_xor (i32 %x , i32 %y ) {
257
243
; CHECK-LABEL: @test_ugt_xor(
258
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[X:%.*]], -1
259
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[XOR1]], [[Y:%.*]]
260
- ; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i32 [[XOR2]], [[XOR1]]
244
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
245
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ult i32 [[TMP1]], [[X]]
261
246
; CHECK-NEXT: ret i1 [[CMP]]
262
247
;
263
248
%xor1 = xor i32 %x , -1
@@ -268,9 +253,8 @@ define i1 @test_ugt_xor(i32 %x, i32 %y) {
268
253
269
254
define i1 @test_uge_xor (i32 %x , i32 %y ) {
270
255
; CHECK-LABEL: @test_uge_xor(
271
- ; CHECK-NEXT: [[XOR1:%.*]] = xor i32 [[X:%.*]], -1
272
- ; CHECK-NEXT: [[XOR2:%.*]] = xor i32 [[XOR1]], [[Y:%.*]]
273
- ; CHECK-NEXT: [[CMP:%.*]] = icmp uge i32 [[XOR2]], [[XOR1]]
256
+ ; CHECK-NEXT: [[TMP1:%.*]] = xor i32 [[X:%.*]], [[Y:%.*]]
257
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ule i32 [[TMP1]], [[X]]
274
258
; CHECK-NEXT: ret i1 [[CMP]]
275
259
;
276
260
%xor1 = xor i32 %x , -1
0 commit comments