@@ -287,7 +287,6 @@ define i32 @safe_add_underflow_neg(i8 zeroext %a) {
287
287
; LA32-LABEL: safe_add_underflow_neg:
288
288
; LA32: # %bb.0:
289
289
; LA32-NEXT: addi.w $a0, $a0, -2
290
- ; LA32-NEXT: andi $a0, $a0, 255
291
290
; LA32-NEXT: sltui $a0, $a0, 251
292
291
; LA32-NEXT: ori $a1, $zero, 16
293
292
; LA32-NEXT: masknez $a1, $a1, $a0
@@ -299,7 +298,6 @@ define i32 @safe_add_underflow_neg(i8 zeroext %a) {
299
298
; LA64-LABEL: safe_add_underflow_neg:
300
299
; LA64: # %bb.0:
301
300
; LA64-NEXT: addi.d $a0, $a0, -2
302
- ; LA64-NEXT: andi $a0, $a0, 255
303
301
; LA64-NEXT: sltui $a0, $a0, 251
304
302
; LA64-NEXT: ori $a1, $zero, 16
305
303
; LA64-NEXT: masknez $a1, $a1, $a0
@@ -344,8 +342,7 @@ define i32 @sext_sub_underflow(i8 zeroext %a) {
344
342
; LA32-LABEL: sext_sub_underflow:
345
343
; LA32: # %bb.0:
346
344
; LA32-NEXT: addi.w $a0, $a0, -6
347
- ; LA32-NEXT: andi $a0, $a0, 255
348
- ; LA32-NEXT: ori $a1, $zero, 250
345
+ ; LA32-NEXT: addi.w $a1, $zero, -6
349
346
; LA32-NEXT: sltu $a0, $a1, $a0
350
347
; LA32-NEXT: ori $a1, $zero, 16
351
348
; LA32-NEXT: masknez $a1, $a1, $a0
@@ -357,8 +354,7 @@ define i32 @sext_sub_underflow(i8 zeroext %a) {
357
354
; LA64-LABEL: sext_sub_underflow:
358
355
; LA64: # %bb.0:
359
356
; LA64-NEXT: addi.d $a0, $a0, -6
360
- ; LA64-NEXT: andi $a0, $a0, 255
361
- ; LA64-NEXT: ori $a1, $zero, 250
357
+ ; LA64-NEXT: addi.w $a1, $zero, -6
362
358
; LA64-NEXT: sltu $a0, $a1, $a0
363
359
; LA64-NEXT: ori $a1, $zero, 16
364
360
; LA64-NEXT: masknez $a1, $a1, $a0
@@ -401,7 +397,6 @@ define i32 @safe_sub_underflow_neg(i8 zeroext %a) {
401
397
; LA32-LABEL: safe_sub_underflow_neg:
402
398
; LA32: # %bb.0:
403
399
; LA32-NEXT: addi.w $a0, $a0, -4
404
- ; LA32-NEXT: andi $a0, $a0, 255
405
400
; LA32-NEXT: ori $a1, $zero, 250
406
401
; LA32-NEXT: sltu $a0, $a1, $a0
407
402
; LA32-NEXT: ori $a1, $zero, 16
@@ -414,7 +409,6 @@ define i32 @safe_sub_underflow_neg(i8 zeroext %a) {
414
409
; LA64-LABEL: safe_sub_underflow_neg:
415
410
; LA64: # %bb.0:
416
411
; LA64-NEXT: addi.d $a0, $a0, -4
417
- ; LA64-NEXT: andi $a0, $a0, 255
418
412
; LA64-NEXT: ori $a1, $zero, 250
419
413
; LA64-NEXT: sltu $a0, $a1, $a0
420
414
; LA64-NEXT: ori $a1, $zero, 16
@@ -433,8 +427,7 @@ define i32 @sext_sub_underflow_neg(i8 zeroext %a) {
433
427
; LA32-LABEL: sext_sub_underflow_neg:
434
428
; LA32: # %bb.0:
435
429
; LA32-NEXT: addi.w $a0, $a0, -4
436
- ; LA32-NEXT: andi $a0, $a0, 255
437
- ; LA32-NEXT: sltui $a0, $a0, 253
430
+ ; LA32-NEXT: sltui $a0, $a0, -3
438
431
; LA32-NEXT: ori $a1, $zero, 16
439
432
; LA32-NEXT: masknez $a1, $a1, $a0
440
433
; LA32-NEXT: ori $a2, $zero, 8
@@ -445,8 +438,7 @@ define i32 @sext_sub_underflow_neg(i8 zeroext %a) {
445
438
; LA64-LABEL: sext_sub_underflow_neg:
446
439
; LA64: # %bb.0:
447
440
; LA64-NEXT: addi.d $a0, $a0, -4
448
- ; LA64-NEXT: andi $a0, $a0, 255
449
- ; LA64-NEXT: sltui $a0, $a0, 253
441
+ ; LA64-NEXT: sltui $a0, $a0, -3
450
442
; LA64-NEXT: ori $a1, $zero, 16
451
443
; LA64-NEXT: masknez $a1, $a1, $a0
452
444
; LA64-NEXT: ori $a2, $zero, 8
@@ -476,19 +468,17 @@ entry:
476
468
define i32 @safe_sub_var_imm (ptr nocapture readonly %b ) local_unnamed_addr #1 {
477
469
; LA32-LABEL: safe_sub_var_imm:
478
470
; LA32: # %bb.0: # %entry
479
- ; LA32-NEXT: ld.b $a0, $a0, 0
480
- ; LA32-NEXT: addi.w $a0, $a0, 8
481
- ; LA32-NEXT: andi $a0, $a0, 255
482
- ; LA32-NEXT: ori $a1, $zero, 252
471
+ ; LA32-NEXT: ld.bu $a0, $a0, 0
472
+ ; LA32-NEXT: addi.w $a0, $a0, -248
473
+ ; LA32-NEXT: addi.w $a1, $zero, -4
483
474
; LA32-NEXT: sltu $a0, $a1, $a0
484
475
; LA32-NEXT: ret
485
476
;
486
477
; LA64-LABEL: safe_sub_var_imm:
487
478
; LA64: # %bb.0: # %entry
488
- ; LA64-NEXT: ld.b $a0, $a0, 0
489
- ; LA64-NEXT: addi.d $a0, $a0, 8
490
- ; LA64-NEXT: andi $a0, $a0, 255
491
- ; LA64-NEXT: ori $a1, $zero, 252
479
+ ; LA64-NEXT: ld.bu $a0, $a0, 0
480
+ ; LA64-NEXT: addi.d $a0, $a0, -248
481
+ ; LA64-NEXT: addi.w $a1, $zero, -4
492
482
; LA64-NEXT: sltu $a0, $a1, $a0
493
483
; LA64-NEXT: ret
494
484
entry:
@@ -533,11 +523,10 @@ define i8 @convert_add_order(i8 zeroext %arg) {
533
523
; LA32-NEXT: ori $a1, $a0, 1
534
524
; LA32-NEXT: sltui $a2, $a1, 50
535
525
; LA32-NEXT: addi.w $a1, $a1, -40
536
- ; LA32-NEXT: andi $a1, $a1, 255
537
526
; LA32-NEXT: sltui $a1, $a1, 20
538
527
; LA32-NEXT: ori $a3, $zero, 2
539
528
; LA32-NEXT: sub.w $a1, $a3, $a1
540
- ; LA32-NEXT: addi.w $a3, $zero, -1
529
+ ; LA32-NEXT: ori $a3, $zero, 255
541
530
; LA32-NEXT: masknez $a3, $a3, $a2
542
531
; LA32-NEXT: maskeqz $a1, $a1, $a2
543
532
; LA32-NEXT: or $a1, $a1, $a3
@@ -549,11 +538,10 @@ define i8 @convert_add_order(i8 zeroext %arg) {
549
538
; LA64-NEXT: ori $a1, $a0, 1
550
539
; LA64-NEXT: sltui $a2, $a1, 50
551
540
; LA64-NEXT: addi.d $a1, $a1, -40
552
- ; LA64-NEXT: andi $a1, $a1, 255
553
541
; LA64-NEXT: sltui $a1, $a1, 20
554
542
; LA64-NEXT: ori $a3, $zero, 2
555
543
; LA64-NEXT: sub.d $a1, $a3, $a1
556
- ; LA64-NEXT: addi.w $a3, $zero, -1
544
+ ; LA64-NEXT: ori $a3, $zero, 255
557
545
; LA64-NEXT: masknez $a3, $a3, $a2
558
546
; LA64-NEXT: maskeqz $a1, $a1, $a2
559
547
; LA64-NEXT: or $a1, $a1, $a3
@@ -574,9 +562,8 @@ define i8 @underflow_if_sub(i32 %arg, i8 zeroext %arg1) {
574
562
; LA32: # %bb.0:
575
563
; LA32-NEXT: slt $a2, $zero, $a0
576
564
; LA32-NEXT: and $a0, $a2, $a0
577
- ; LA32-NEXT: addi.w $a0, $a0, -11
578
- ; LA32-NEXT: andi $a2, $a0, 247
579
- ; LA32-NEXT: sltu $a1, $a2, $a1
565
+ ; LA32-NEXT: addi.w $a0, $a0, 245
566
+ ; LA32-NEXT: sltu $a1, $a0, $a1
580
567
; LA32-NEXT: maskeqz $a0, $a0, $a1
581
568
; LA32-NEXT: ori $a2, $zero, 100
582
569
; LA32-NEXT: masknez $a1, $a2, $a1
@@ -588,9 +575,8 @@ define i8 @underflow_if_sub(i32 %arg, i8 zeroext %arg1) {
588
575
; LA64-NEXT: addi.w $a2, $a0, 0
589
576
; LA64-NEXT: slt $a2, $zero, $a2
590
577
; LA64-NEXT: and $a0, $a2, $a0
591
- ; LA64-NEXT: addi.d $a0, $a0, -11
592
- ; LA64-NEXT: andi $a2, $a0, 247
593
- ; LA64-NEXT: sltu $a1, $a2, $a1
578
+ ; LA64-NEXT: addi.d $a0, $a0, 245
579
+ ; LA64-NEXT: sltu $a1, $a0, $a1
594
580
; LA64-NEXT: maskeqz $a0, $a0, $a1
595
581
; LA64-NEXT: ori $a2, $zero, 100
596
582
; LA64-NEXT: masknez $a1, $a2, $a1
@@ -609,9 +595,10 @@ define i8 @underflow_if_sub(i32 %arg, i8 zeroext %arg1) {
609
595
define i8 @underflow_if_sub_signext (i32 %arg , i8 signext %arg1 ) {
610
596
; LA32-LABEL: underflow_if_sub_signext:
611
597
; LA32: # %bb.0:
598
+ ; LA32-NEXT: andi $a1, $a1, 255
612
599
; LA32-NEXT: slt $a2, $zero, $a0
613
600
; LA32-NEXT: and $a0, $a2, $a0
614
- ; LA32-NEXT: addi.w $a0, $a0, -11
601
+ ; LA32-NEXT: addi.w $a0, $a0, 245
615
602
; LA32-NEXT: sltu $a1, $a0, $a1
616
603
; LA32-NEXT: maskeqz $a0, $a0, $a1
617
604
; LA32-NEXT: ori $a2, $zero, 100
@@ -622,9 +609,10 @@ define i8 @underflow_if_sub_signext(i32 %arg, i8 signext %arg1) {
622
609
; LA64-LABEL: underflow_if_sub_signext:
623
610
; LA64: # %bb.0:
624
611
; LA64-NEXT: addi.w $a2, $a0, 0
612
+ ; LA64-NEXT: andi $a1, $a1, 255
625
613
; LA64-NEXT: slt $a2, $zero, $a2
626
614
; LA64-NEXT: and $a0, $a2, $a0
627
- ; LA64-NEXT: addi.d $a0, $a0, -11
615
+ ; LA64-NEXT: addi.d $a0, $a0, 245
628
616
; LA64-NEXT: sltu $a1, $a0, $a1
629
617
; LA64-NEXT: maskeqz $a0, $a0, $a1
630
618
; LA64-NEXT: ori $a2, $zero, 100
0 commit comments