@@ -271,14 +271,15 @@ define i64 @scalar_i64_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind {
271
271
define i16 @scalar_i16_signed_reg_reg (i16 %a1 , i16 %a2 ) nounwind {
272
272
; CHECK-LABEL: scalar_i16_signed_reg_reg:
273
273
; CHECK: // %bb.0:
274
- ; CHECK-NEXT: sxth w9, w1
275
- ; CHECK-NEXT: sxth w10, w0
276
- ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
277
- ; CHECK-NEXT: subs w9, w10, w9
278
- ; CHECK-NEXT: cneg w9, w9, mi
279
- ; CHECK-NEXT: cneg w8, w8, le
280
- ; CHECK-NEXT: lsr w9, w9, #1
281
- ; CHECK-NEXT: madd w0, w9, w8, w0
274
+ ; CHECK-NEXT: sxth w8, w1
275
+ ; CHECK-NEXT: sxth w9, w0
276
+ ; CHECK-NEXT: subs w8, w9, w8
277
+ ; CHECK-NEXT: cset w9, gt
278
+ ; CHECK-NEXT: cneg w8, w8, mi
279
+ ; CHECK-NEXT: sbfx w9, w9, #0, #1
280
+ ; CHECK-NEXT: lsr w8, w8, #1
281
+ ; CHECK-NEXT: orr w9, w9, #0x1
282
+ ; CHECK-NEXT: madd w0, w8, w9, w0
282
283
; CHECK-NEXT: ret
283
284
%t3 = icmp sgt i16 %a1 , %a2 ; signed
284
285
%t4 = select i1 %t3 , i16 -1 , i16 1
@@ -294,14 +295,15 @@ define i16 @scalar_i16_signed_reg_reg(i16 %a1, i16 %a2) nounwind {
294
295
define i16 @scalar_i16_unsigned_reg_reg (i16 %a1 , i16 %a2 ) nounwind {
295
296
; CHECK-LABEL: scalar_i16_unsigned_reg_reg:
296
297
; CHECK: // %bb.0:
297
- ; CHECK-NEXT: and w9, w1, #0xffff
298
- ; CHECK-NEXT: and w10, w0, #0xffff
299
- ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
300
- ; CHECK-NEXT: subs w9, w10, w9
301
- ; CHECK-NEXT: cneg w9, w9, mi
302
- ; CHECK-NEXT: cneg w8, w8, ls
303
- ; CHECK-NEXT: lsr w9, w9, #1
304
- ; CHECK-NEXT: madd w0, w9, w8, w0
298
+ ; CHECK-NEXT: and w8, w1, #0xffff
299
+ ; CHECK-NEXT: and w9, w0, #0xffff
300
+ ; CHECK-NEXT: subs w8, w9, w8
301
+ ; CHECK-NEXT: cset w9, hi
302
+ ; CHECK-NEXT: cneg w8, w8, mi
303
+ ; CHECK-NEXT: sbfx w9, w9, #0, #1
304
+ ; CHECK-NEXT: lsr w8, w8, #1
305
+ ; CHECK-NEXT: orr w9, w9, #0x1
306
+ ; CHECK-NEXT: madd w0, w8, w9, w0
305
307
; CHECK-NEXT: ret
306
308
%t3 = icmp ugt i16 %a1 , %a2
307
309
%t4 = select i1 %t3 , i16 -1 , i16 1
@@ -319,14 +321,15 @@ define i16 @scalar_i16_unsigned_reg_reg(i16 %a1, i16 %a2) nounwind {
319
321
define i16 @scalar_i16_signed_mem_reg (ptr %a1_addr , i16 %a2 ) nounwind {
320
322
; CHECK-LABEL: scalar_i16_signed_mem_reg:
321
323
; CHECK: // %bb.0:
322
- ; CHECK-NEXT: sxth w9, w1
323
- ; CHECK-NEXT: ldrsh w10, [x0]
324
- ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
325
- ; CHECK-NEXT: subs w9, w10, w9
326
- ; CHECK-NEXT: cneg w9, w9, mi
327
- ; CHECK-NEXT: cneg w8, w8, le
328
- ; CHECK-NEXT: lsr w9, w9, #1
329
- ; CHECK-NEXT: madd w0, w9, w8, w10
324
+ ; CHECK-NEXT: sxth w8, w1
325
+ ; CHECK-NEXT: ldrsh w9, [x0]
326
+ ; CHECK-NEXT: subs w8, w9, w8
327
+ ; CHECK-NEXT: cset w10, gt
328
+ ; CHECK-NEXT: cneg w8, w8, mi
329
+ ; CHECK-NEXT: sbfx w10, w10, #0, #1
330
+ ; CHECK-NEXT: lsr w8, w8, #1
331
+ ; CHECK-NEXT: orr w10, w10, #0x1
332
+ ; CHECK-NEXT: madd w0, w8, w10, w9
330
333
; CHECK-NEXT: ret
331
334
%a1 = load i16 , ptr %a1_addr
332
335
%t3 = icmp sgt i16 %a1 , %a2 ; signed
@@ -343,14 +346,15 @@ define i16 @scalar_i16_signed_mem_reg(ptr %a1_addr, i16 %a2) nounwind {
343
346
define i16 @scalar_i16_signed_reg_mem (i16 %a1 , ptr %a2_addr ) nounwind {
344
347
; CHECK-LABEL: scalar_i16_signed_reg_mem:
345
348
; CHECK: // %bb.0:
346
- ; CHECK-NEXT: sxth w9, w0
347
- ; CHECK-NEXT: ldrsh w10, [x1]
348
- ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
349
- ; CHECK-NEXT: subs w9, w9, w10
350
- ; CHECK-NEXT: cneg w9, w9, mi
351
- ; CHECK-NEXT: cneg w8, w8, le
352
- ; CHECK-NEXT: lsr w9, w9, #1
353
- ; CHECK-NEXT: madd w0, w9, w8, w0
349
+ ; CHECK-NEXT: sxth w8, w0
350
+ ; CHECK-NEXT: ldrsh w9, [x1]
351
+ ; CHECK-NEXT: subs w8, w8, w9
352
+ ; CHECK-NEXT: cset w9, gt
353
+ ; CHECK-NEXT: cneg w8, w8, mi
354
+ ; CHECK-NEXT: sbfx w9, w9, #0, #1
355
+ ; CHECK-NEXT: lsr w8, w8, #1
356
+ ; CHECK-NEXT: orr w9, w9, #0x1
357
+ ; CHECK-NEXT: madd w0, w8, w9, w0
354
358
; CHECK-NEXT: ret
355
359
%a2 = load i16 , ptr %a2_addr
356
360
%t3 = icmp sgt i16 %a1 , %a2 ; signed
@@ -367,14 +371,15 @@ define i16 @scalar_i16_signed_reg_mem(i16 %a1, ptr %a2_addr) nounwind {
367
371
define i16 @scalar_i16_signed_mem_mem (ptr %a1_addr , ptr %a2_addr ) nounwind {
368
372
; CHECK-LABEL: scalar_i16_signed_mem_mem:
369
373
; CHECK: // %bb.0:
370
- ; CHECK-NEXT: ldrsh w9, [x0]
371
- ; CHECK-NEXT: ldrsh w10, [x1]
372
- ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
373
- ; CHECK-NEXT: subs w10, w9, w10
374
- ; CHECK-NEXT: cneg w10, w10, mi
375
- ; CHECK-NEXT: cneg w8, w8, le
376
- ; CHECK-NEXT: lsr w10, w10, #1
377
- ; CHECK-NEXT: madd w0, w10, w8, w9
374
+ ; CHECK-NEXT: ldrsh w8, [x0]
375
+ ; CHECK-NEXT: ldrsh w9, [x1]
376
+ ; CHECK-NEXT: subs w9, w8, w9
377
+ ; CHECK-NEXT: cset w10, gt
378
+ ; CHECK-NEXT: cneg w9, w9, mi
379
+ ; CHECK-NEXT: sbfx w10, w10, #0, #1
380
+ ; CHECK-NEXT: lsr w9, w9, #1
381
+ ; CHECK-NEXT: orr w10, w10, #0x1
382
+ ; CHECK-NEXT: madd w0, w9, w10, w8
378
383
; CHECK-NEXT: ret
379
384
%a1 = load i16 , ptr %a1_addr
380
385
%a2 = load i16 , ptr %a2_addr
@@ -398,14 +403,15 @@ define i16 @scalar_i16_signed_mem_mem(ptr %a1_addr, ptr %a2_addr) nounwind {
398
403
define i8 @scalar_i8_signed_reg_reg (i8 %a1 , i8 %a2 ) nounwind {
399
404
; CHECK-LABEL: scalar_i8_signed_reg_reg:
400
405
; CHECK: // %bb.0:
401
- ; CHECK-NEXT: sxtb w9, w1
402
- ; CHECK-NEXT: sxtb w10, w0
403
- ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
404
- ; CHECK-NEXT: subs w9, w10, w9
405
- ; CHECK-NEXT: cneg w9, w9, mi
406
- ; CHECK-NEXT: cneg w8, w8, le
407
- ; CHECK-NEXT: lsr w9, w9, #1
408
- ; CHECK-NEXT: madd w0, w9, w8, w0
406
+ ; CHECK-NEXT: sxtb w8, w1
407
+ ; CHECK-NEXT: sxtb w9, w0
408
+ ; CHECK-NEXT: subs w8, w9, w8
409
+ ; CHECK-NEXT: cset w9, gt
410
+ ; CHECK-NEXT: cneg w8, w8, mi
411
+ ; CHECK-NEXT: sbfx w9, w9, #0, #1
412
+ ; CHECK-NEXT: lsr w8, w8, #1
413
+ ; CHECK-NEXT: orr w9, w9, #0x1
414
+ ; CHECK-NEXT: madd w0, w8, w9, w0
409
415
; CHECK-NEXT: ret
410
416
%t3 = icmp sgt i8 %a1 , %a2 ; signed
411
417
%t4 = select i1 %t3 , i8 -1 , i8 1
@@ -421,14 +427,15 @@ define i8 @scalar_i8_signed_reg_reg(i8 %a1, i8 %a2) nounwind {
421
427
define i8 @scalar_i8_unsigned_reg_reg (i8 %a1 , i8 %a2 ) nounwind {
422
428
; CHECK-LABEL: scalar_i8_unsigned_reg_reg:
423
429
; CHECK: // %bb.0:
424
- ; CHECK-NEXT: and w9, w1, #0xff
425
- ; CHECK-NEXT: and w10, w0, #0xff
426
- ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
427
- ; CHECK-NEXT: subs w9, w10, w9
428
- ; CHECK-NEXT: cneg w9, w9, mi
429
- ; CHECK-NEXT: cneg w8, w8, ls
430
- ; CHECK-NEXT: lsr w9, w9, #1
431
- ; CHECK-NEXT: madd w0, w9, w8, w0
430
+ ; CHECK-NEXT: and w8, w1, #0xff
431
+ ; CHECK-NEXT: and w9, w0, #0xff
432
+ ; CHECK-NEXT: subs w8, w9, w8
433
+ ; CHECK-NEXT: cset w9, hi
434
+ ; CHECK-NEXT: cneg w8, w8, mi
435
+ ; CHECK-NEXT: sbfx w9, w9, #0, #1
436
+ ; CHECK-NEXT: lsr w8, w8, #1
437
+ ; CHECK-NEXT: orr w9, w9, #0x1
438
+ ; CHECK-NEXT: madd w0, w8, w9, w0
432
439
; CHECK-NEXT: ret
433
440
%t3 = icmp ugt i8 %a1 , %a2
434
441
%t4 = select i1 %t3 , i8 -1 , i8 1
@@ -446,14 +453,15 @@ define i8 @scalar_i8_unsigned_reg_reg(i8 %a1, i8 %a2) nounwind {
446
453
define i8 @scalar_i8_signed_mem_reg (ptr %a1_addr , i8 %a2 ) nounwind {
447
454
; CHECK-LABEL: scalar_i8_signed_mem_reg:
448
455
; CHECK: // %bb.0:
449
- ; CHECK-NEXT: sxtb w9, w1
450
- ; CHECK-NEXT: ldrsb w10, [x0]
451
- ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
452
- ; CHECK-NEXT: subs w9, w10, w9
453
- ; CHECK-NEXT: cneg w9, w9, mi
454
- ; CHECK-NEXT: cneg w8, w8, le
455
- ; CHECK-NEXT: lsr w9, w9, #1
456
- ; CHECK-NEXT: madd w0, w9, w8, w10
456
+ ; CHECK-NEXT: sxtb w8, w1
457
+ ; CHECK-NEXT: ldrsb w9, [x0]
458
+ ; CHECK-NEXT: subs w8, w9, w8
459
+ ; CHECK-NEXT: cset w10, gt
460
+ ; CHECK-NEXT: cneg w8, w8, mi
461
+ ; CHECK-NEXT: sbfx w10, w10, #0, #1
462
+ ; CHECK-NEXT: lsr w8, w8, #1
463
+ ; CHECK-NEXT: orr w10, w10, #0x1
464
+ ; CHECK-NEXT: madd w0, w8, w10, w9
457
465
; CHECK-NEXT: ret
458
466
%a1 = load i8 , ptr %a1_addr
459
467
%t3 = icmp sgt i8 %a1 , %a2 ; signed
@@ -470,14 +478,15 @@ define i8 @scalar_i8_signed_mem_reg(ptr %a1_addr, i8 %a2) nounwind {
470
478
define i8 @scalar_i8_signed_reg_mem (i8 %a1 , ptr %a2_addr ) nounwind {
471
479
; CHECK-LABEL: scalar_i8_signed_reg_mem:
472
480
; CHECK: // %bb.0:
473
- ; CHECK-NEXT: sxtb w9, w0
474
- ; CHECK-NEXT: ldrsb w10, [x1]
475
- ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
476
- ; CHECK-NEXT: subs w9, w9, w10
477
- ; CHECK-NEXT: cneg w9, w9, mi
478
- ; CHECK-NEXT: cneg w8, w8, le
479
- ; CHECK-NEXT: lsr w9, w9, #1
480
- ; CHECK-NEXT: madd w0, w9, w8, w0
481
+ ; CHECK-NEXT: sxtb w8, w0
482
+ ; CHECK-NEXT: ldrsb w9, [x1]
483
+ ; CHECK-NEXT: subs w8, w8, w9
484
+ ; CHECK-NEXT: cset w9, gt
485
+ ; CHECK-NEXT: cneg w8, w8, mi
486
+ ; CHECK-NEXT: sbfx w9, w9, #0, #1
487
+ ; CHECK-NEXT: lsr w8, w8, #1
488
+ ; CHECK-NEXT: orr w9, w9, #0x1
489
+ ; CHECK-NEXT: madd w0, w8, w9, w0
481
490
; CHECK-NEXT: ret
482
491
%a2 = load i8 , ptr %a2_addr
483
492
%t3 = icmp sgt i8 %a1 , %a2 ; signed
@@ -494,14 +503,15 @@ define i8 @scalar_i8_signed_reg_mem(i8 %a1, ptr %a2_addr) nounwind {
494
503
define i8 @scalar_i8_signed_mem_mem (ptr %a1_addr , ptr %a2_addr ) nounwind {
495
504
; CHECK-LABEL: scalar_i8_signed_mem_mem:
496
505
; CHECK: // %bb.0:
497
- ; CHECK-NEXT: ldrsb w9, [x0]
498
- ; CHECK-NEXT: ldrsb w10, [x1]
499
- ; CHECK-NEXT: mov w8, #-1 // =0xffffffff
500
- ; CHECK-NEXT: subs w10, w9, w10
501
- ; CHECK-NEXT: cneg w10, w10, mi
502
- ; CHECK-NEXT: cneg w8, w8, le
503
- ; CHECK-NEXT: lsr w10, w10, #1
504
- ; CHECK-NEXT: madd w0, w10, w8, w9
506
+ ; CHECK-NEXT: ldrsb w8, [x0]
507
+ ; CHECK-NEXT: ldrsb w9, [x1]
508
+ ; CHECK-NEXT: subs w9, w8, w9
509
+ ; CHECK-NEXT: cset w10, gt
510
+ ; CHECK-NEXT: cneg w9, w9, mi
511
+ ; CHECK-NEXT: sbfx w10, w10, #0, #1
512
+ ; CHECK-NEXT: lsr w9, w9, #1
513
+ ; CHECK-NEXT: orr w10, w10, #0x1
514
+ ; CHECK-NEXT: madd w0, w9, w10, w8
505
515
; CHECK-NEXT: ret
506
516
%a1 = load i8 , ptr %a1_addr
507
517
%a2 = load i8 , ptr %a2_addr
0 commit comments