@@ -139,28 +139,25 @@ define i16 @abd_ext_i16(i16 %a, i16 %b) nounwind {
139
139
define i16 @abd_ext_i16_i32 (i16 %a , i32 %b ) nounwind {
140
140
; X86-LABEL: abd_ext_i16_i32:
141
141
; X86: # %bb.0:
142
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
143
- ; X86-NEXT: movswl {{[0-9]+}}(%esp), %eax
144
- ; X86-NEXT: movl %eax, %edx
145
- ; X86-NEXT: subl %ecx, %edx
146
- ; X86-NEXT: negl %edx
142
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
143
+ ; X86-NEXT: movswl {{[0-9]+}}(%esp), %ecx
144
+ ; X86-NEXT: movl %ecx, %edx
145
+ ; X86-NEXT: subl %eax, %edx
147
146
; X86-NEXT: subl %ecx, %eax
148
- ; X86-NEXT: cmovlel %edx, %eax
147
+ ; X86-NEXT: cmovll %edx, %eax
149
148
; X86-NEXT: negl %eax
150
149
; X86-NEXT: # kill: def $ax killed $ax killed $eax
151
150
; X86-NEXT: retl
152
151
;
153
152
; X64-LABEL: abd_ext_i16_i32:
154
153
; X64: # %bb.0:
155
- ; X64-NEXT: # kill: def $edi killed $edi def $rdi
156
- ; X64-NEXT: movswq %di, %rcx
157
- ; X64-NEXT: movslq %esi, %rax
158
- ; X64-NEXT: subq %rax, %rcx
159
- ; X64-NEXT: movq %rcx, %rax
160
- ; X64-NEXT: negq %rax
161
- ; X64-NEXT: cmovsq %rcx, %rax
154
+ ; X64-NEXT: movswl %di, %ecx
155
+ ; X64-NEXT: movl %edi, %eax
156
+ ; X64-NEXT: subl %esi, %eax
157
+ ; X64-NEXT: subl %ecx, %esi
158
+ ; X64-NEXT: cmovgel %esi, %eax
162
159
; X64-NEXT: negl %eax
163
- ; X64-NEXT: # kill: def $ax killed $ax killed $rax
160
+ ; X64-NEXT: # kill: def $ax killed $ax killed $eax
164
161
; X64-NEXT: retq
165
162
%aext = sext i16 %a to i64
166
163
%bext = sext i32 %b to i64
@@ -205,26 +202,22 @@ define i16 @abd_ext_i16_undef(i16 %a, i16 %b) nounwind {
205
202
define i32 @abd_ext_i32 (i32 %a , i32 %b ) nounwind {
206
203
; X86-LABEL: abd_ext_i32:
207
204
; X86: # %bb.0:
208
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
209
205
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
210
- ; X86-NEXT: movl %eax , %edx
211
- ; X86-NEXT: subl %ecx, %edx
212
- ; X86-NEXT: negl %edx
206
+ ; X86-NEXT: movl {{[0-9]+}}(%esp) , %ecx
207
+ ; X86-NEXT: movl %ecx, %edx
208
+ ; X86-NEXT: subl %eax, %edx
213
209
; X86-NEXT: subl %ecx, %eax
214
- ; X86-NEXT: cmovlel %edx, %eax
210
+ ; X86-NEXT: cmovll %edx, %eax
215
211
; X86-NEXT: negl %eax
216
212
; X86-NEXT: retl
217
213
;
218
214
; X64-LABEL: abd_ext_i32:
219
215
; X64: # %bb.0:
220
- ; X64-NEXT: movslq %esi, %rax
221
- ; X64-NEXT: movslq %edi, %rcx
222
- ; X64-NEXT: subq %rax, %rcx
223
- ; X64-NEXT: movq %rcx, %rax
224
- ; X64-NEXT: negq %rax
225
- ; X64-NEXT: cmovsq %rcx, %rax
216
+ ; X64-NEXT: movl %edi, %eax
217
+ ; X64-NEXT: subl %esi, %eax
218
+ ; X64-NEXT: subl %edi, %esi
219
+ ; X64-NEXT: cmovgel %esi, %eax
226
220
; X64-NEXT: negl %eax
227
- ; X64-NEXT: # kill: def $eax killed $eax killed $rax
228
221
; X64-NEXT: retq
229
222
%aext = sext i32 %a to i64
230
223
%bext = sext i32 %b to i64
@@ -238,27 +231,23 @@ define i32 @abd_ext_i32(i32 %a, i32 %b) nounwind {
238
231
define i32 @abd_ext_i32_i16 (i32 %a , i16 %b ) nounwind {
239
232
; X86-LABEL: abd_ext_i32_i16:
240
233
; X86: # %bb.0:
241
- ; X86-NEXT: movswl {{[0-9]+}}(%esp), %ecx
242
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
243
- ; X86-NEXT: movl %eax, %edx
244
- ; X86-NEXT: subl %ecx, %edx
245
- ; X86-NEXT: negl %edx
234
+ ; X86-NEXT: movswl {{[0-9]+}}(%esp), %eax
235
+ ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
236
+ ; X86-NEXT: movl %ecx, %edx
237
+ ; X86-NEXT: subl %eax, %edx
246
238
; X86-NEXT: subl %ecx, %eax
247
- ; X86-NEXT: cmovlel %edx, %eax
239
+ ; X86-NEXT: cmovll %edx, %eax
248
240
; X86-NEXT: negl %eax
249
241
; X86-NEXT: retl
250
242
;
251
243
; X64-LABEL: abd_ext_i32_i16:
252
244
; X64: # %bb.0:
253
- ; X64-NEXT: # kill: def $esi killed $esi def $rsi
254
- ; X64-NEXT: movswq %si, %rax
255
- ; X64-NEXT: movslq %edi, %rcx
256
- ; X64-NEXT: subq %rax, %rcx
257
- ; X64-NEXT: movq %rcx, %rax
258
- ; X64-NEXT: negq %rax
259
- ; X64-NEXT: cmovsq %rcx, %rax
245
+ ; X64-NEXT: movswl %si, %eax
246
+ ; X64-NEXT: movl %edi, %ecx
247
+ ; X64-NEXT: subl %eax, %ecx
248
+ ; X64-NEXT: subl %edi, %eax
249
+ ; X64-NEXT: cmovll %ecx, %eax
260
250
; X64-NEXT: negl %eax
261
- ; X64-NEXT: # kill: def $eax killed $eax killed $rax
262
251
; X64-NEXT: retq
263
252
%aext = sext i32 %a to i64
264
253
%bext = sext i16 %b to i64
@@ -272,26 +261,22 @@ define i32 @abd_ext_i32_i16(i32 %a, i16 %b) nounwind {
272
261
define i32 @abd_ext_i32_undef (i32 %a , i32 %b ) nounwind {
273
262
; X86-LABEL: abd_ext_i32_undef:
274
263
; X86: # %bb.0:
275
- ; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
276
264
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
277
- ; X86-NEXT: movl %eax , %edx
278
- ; X86-NEXT: subl %ecx, %edx
279
- ; X86-NEXT: negl %edx
265
+ ; X86-NEXT: movl {{[0-9]+}}(%esp) , %ecx
266
+ ; X86-NEXT: movl %ecx, %edx
267
+ ; X86-NEXT: subl %eax, %edx
280
268
; X86-NEXT: subl %ecx, %eax
281
- ; X86-NEXT: cmovlel %edx, %eax
269
+ ; X86-NEXT: cmovll %edx, %eax
282
270
; X86-NEXT: negl %eax
283
271
; X86-NEXT: retl
284
272
;
285
273
; X64-LABEL: abd_ext_i32_undef:
286
274
; X64: # %bb.0:
287
- ; X64-NEXT: movslq %esi, %rax
288
- ; X64-NEXT: movslq %edi, %rcx
289
- ; X64-NEXT: subq %rax, %rcx
290
- ; X64-NEXT: movq %rcx, %rax
291
- ; X64-NEXT: negq %rax
292
- ; X64-NEXT: cmovsq %rcx, %rax
275
+ ; X64-NEXT: movl %edi, %eax
276
+ ; X64-NEXT: subl %esi, %eax
277
+ ; X64-NEXT: subl %edi, %esi
278
+ ; X64-NEXT: cmovgel %esi, %eax
293
279
; X64-NEXT: negl %eax
294
- ; X64-NEXT: # kill: def $eax killed $eax killed $rax
295
280
; X64-NEXT: retq
296
281
%aext = sext i32 %a to i64
297
282
%bext = sext i32 %b to i64
@@ -332,9 +317,8 @@ define i64 @abd_ext_i64(i64 %a, i64 %b) nounwind {
332
317
; X64: # %bb.0:
333
318
; X64-NEXT: movq %rdi, %rax
334
319
; X64-NEXT: subq %rsi, %rax
335
- ; X64-NEXT: negq %rax
336
- ; X64-NEXT: subq %rsi, %rdi
337
- ; X64-NEXT: cmovgq %rdi, %rax
320
+ ; X64-NEXT: subq %rdi, %rsi
321
+ ; X64-NEXT: cmovgeq %rsi, %rax
338
322
; X64-NEXT: negq %rax
339
323
; X64-NEXT: retq
340
324
%aext = sext i64 %a to i128
@@ -376,9 +360,8 @@ define i64 @abd_ext_i64_undef(i64 %a, i64 %b) nounwind {
376
360
; X64: # %bb.0:
377
361
; X64-NEXT: movq %rdi, %rax
378
362
; X64-NEXT: subq %rsi, %rax
379
- ; X64-NEXT: negq %rax
380
- ; X64-NEXT: subq %rsi, %rdi
381
- ; X64-NEXT: cmovgq %rdi, %rax
363
+ ; X64-NEXT: subq %rdi, %rsi
364
+ ; X64-NEXT: cmovgeq %rsi, %rax
382
365
; X64-NEXT: negq %rax
383
366
; X64-NEXT: retq
384
367
%aext = sext i64 %a to i128
0 commit comments