@@ -287,7 +287,6 @@ define i32 @safe_add_underflow_neg(i8 zeroext %a) {
287287; LA32-LABEL: safe_add_underflow_neg:
288288; LA32: # %bb.0:
289289; LA32-NEXT: addi.w $a0, $a0, -2
290- ; LA32-NEXT: andi $a0, $a0, 255
291290; LA32-NEXT: sltui $a0, $a0, 251
292291; LA32-NEXT: ori $a1, $zero, 16
293292; LA32-NEXT: masknez $a1, $a1, $a0
@@ -299,7 +298,6 @@ define i32 @safe_add_underflow_neg(i8 zeroext %a) {
299298; LA64-LABEL: safe_add_underflow_neg:
300299; LA64: # %bb.0:
301300; LA64-NEXT: addi.d $a0, $a0, -2
302- ; LA64-NEXT: andi $a0, $a0, 255
303301; LA64-NEXT: sltui $a0, $a0, 251
304302; LA64-NEXT: ori $a1, $zero, 16
305303; LA64-NEXT: masknez $a1, $a1, $a0
@@ -344,8 +342,7 @@ define i32 @sext_sub_underflow(i8 zeroext %a) {
344342; LA32-LABEL: sext_sub_underflow:
345343; LA32: # %bb.0:
346344; 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
349346; LA32-NEXT: sltu $a0, $a1, $a0
350347; LA32-NEXT: ori $a1, $zero, 16
351348; LA32-NEXT: masknez $a1, $a1, $a0
@@ -357,8 +354,7 @@ define i32 @sext_sub_underflow(i8 zeroext %a) {
357354; LA64-LABEL: sext_sub_underflow:
358355; LA64: # %bb.0:
359356; 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
362358; LA64-NEXT: sltu $a0, $a1, $a0
363359; LA64-NEXT: ori $a1, $zero, 16
364360; LA64-NEXT: masknez $a1, $a1, $a0
@@ -401,7 +397,6 @@ define i32 @safe_sub_underflow_neg(i8 zeroext %a) {
401397; LA32-LABEL: safe_sub_underflow_neg:
402398; LA32: # %bb.0:
403399; LA32-NEXT: addi.w $a0, $a0, -4
404- ; LA32-NEXT: andi $a0, $a0, 255
405400; LA32-NEXT: ori $a1, $zero, 250
406401; LA32-NEXT: sltu $a0, $a1, $a0
407402; LA32-NEXT: ori $a1, $zero, 16
@@ -414,7 +409,6 @@ define i32 @safe_sub_underflow_neg(i8 zeroext %a) {
414409; LA64-LABEL: safe_sub_underflow_neg:
415410; LA64: # %bb.0:
416411; LA64-NEXT: addi.d $a0, $a0, -4
417- ; LA64-NEXT: andi $a0, $a0, 255
418412; LA64-NEXT: ori $a1, $zero, 250
419413; LA64-NEXT: sltu $a0, $a1, $a0
420414; LA64-NEXT: ori $a1, $zero, 16
@@ -433,8 +427,7 @@ define i32 @sext_sub_underflow_neg(i8 zeroext %a) {
433427; LA32-LABEL: sext_sub_underflow_neg:
434428; LA32: # %bb.0:
435429; 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
438431; LA32-NEXT: ori $a1, $zero, 16
439432; LA32-NEXT: masknez $a1, $a1, $a0
440433; LA32-NEXT: ori $a2, $zero, 8
@@ -445,8 +438,7 @@ define i32 @sext_sub_underflow_neg(i8 zeroext %a) {
445438; LA64-LABEL: sext_sub_underflow_neg:
446439; LA64: # %bb.0:
447440; 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
450442; LA64-NEXT: ori $a1, $zero, 16
451443; LA64-NEXT: masknez $a1, $a1, $a0
452444; LA64-NEXT: ori $a2, $zero, 8
@@ -476,19 +468,17 @@ entry:
476468define i32 @safe_sub_var_imm (ptr nocapture readonly %b ) local_unnamed_addr #1 {
477469; LA32-LABEL: safe_sub_var_imm:
478470; 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
483474; LA32-NEXT: sltu $a0, $a1, $a0
484475; LA32-NEXT: ret
485476;
486477; LA64-LABEL: safe_sub_var_imm:
487478; 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
492482; LA64-NEXT: sltu $a0, $a1, $a0
493483; LA64-NEXT: ret
494484entry:
@@ -533,11 +523,10 @@ define i8 @convert_add_order(i8 zeroext %arg) {
533523; LA32-NEXT: ori $a1, $a0, 1
534524; LA32-NEXT: sltui $a2, $a1, 50
535525; LA32-NEXT: addi.w $a1, $a1, -40
536- ; LA32-NEXT: andi $a1, $a1, 255
537526; LA32-NEXT: sltui $a1, $a1, 20
538527; LA32-NEXT: ori $a3, $zero, 2
539528; LA32-NEXT: sub.w $a1, $a3, $a1
540- ; LA32-NEXT: addi.w $a3, $zero, -1
529+ ; LA32-NEXT: ori $a3, $zero, 255
541530; LA32-NEXT: masknez $a3, $a3, $a2
542531; LA32-NEXT: maskeqz $a1, $a1, $a2
543532; LA32-NEXT: or $a1, $a1, $a3
@@ -549,11 +538,10 @@ define i8 @convert_add_order(i8 zeroext %arg) {
549538; LA64-NEXT: ori $a1, $a0, 1
550539; LA64-NEXT: sltui $a2, $a1, 50
551540; LA64-NEXT: addi.d $a1, $a1, -40
552- ; LA64-NEXT: andi $a1, $a1, 255
553541; LA64-NEXT: sltui $a1, $a1, 20
554542; LA64-NEXT: ori $a3, $zero, 2
555543; LA64-NEXT: sub.d $a1, $a3, $a1
556- ; LA64-NEXT: addi.w $a3, $zero, -1
544+ ; LA64-NEXT: ori $a3, $zero, 255
557545; LA64-NEXT: masknez $a3, $a3, $a2
558546; LA64-NEXT: maskeqz $a1, $a1, $a2
559547; LA64-NEXT: or $a1, $a1, $a3
@@ -574,9 +562,8 @@ define i8 @underflow_if_sub(i32 %arg, i8 zeroext %arg1) {
574562; LA32: # %bb.0:
575563; LA32-NEXT: slt $a2, $zero, $a0
576564; 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
580567; LA32-NEXT: maskeqz $a0, $a0, $a1
581568; LA32-NEXT: ori $a2, $zero, 100
582569; LA32-NEXT: masknez $a1, $a2, $a1
@@ -588,9 +575,8 @@ define i8 @underflow_if_sub(i32 %arg, i8 zeroext %arg1) {
588575; LA64-NEXT: addi.w $a2, $a0, 0
589576; LA64-NEXT: slt $a2, $zero, $a2
590577; 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
594580; LA64-NEXT: maskeqz $a0, $a0, $a1
595581; LA64-NEXT: ori $a2, $zero, 100
596582; LA64-NEXT: masknez $a1, $a2, $a1
@@ -609,9 +595,10 @@ define i8 @underflow_if_sub(i32 %arg, i8 zeroext %arg1) {
609595define i8 @underflow_if_sub_signext (i32 %arg , i8 signext %arg1 ) {
610596; LA32-LABEL: underflow_if_sub_signext:
611597; LA32: # %bb.0:
598+ ; LA32-NEXT: andi $a1, $a1, 255
612599; LA32-NEXT: slt $a2, $zero, $a0
613600; LA32-NEXT: and $a0, $a2, $a0
614- ; LA32-NEXT: addi.w $a0, $a0, -11
601+ ; LA32-NEXT: addi.w $a0, $a0, 245
615602; LA32-NEXT: sltu $a1, $a0, $a1
616603; LA32-NEXT: maskeqz $a0, $a0, $a1
617604; LA32-NEXT: ori $a2, $zero, 100
@@ -622,9 +609,10 @@ define i8 @underflow_if_sub_signext(i32 %arg, i8 signext %arg1) {
622609; LA64-LABEL: underflow_if_sub_signext:
623610; LA64: # %bb.0:
624611; LA64-NEXT: addi.w $a2, $a0, 0
612+ ; LA64-NEXT: andi $a1, $a1, 255
625613; LA64-NEXT: slt $a2, $zero, $a2
626614; LA64-NEXT: and $a0, $a2, $a0
627- ; LA64-NEXT: addi.d $a0, $a0, -11
615+ ; LA64-NEXT: addi.d $a0, $a0, 245
628616; LA64-NEXT: sltu $a1, $a0, $a1
629617; LA64-NEXT: maskeqz $a0, $a0, $a1
630618; LA64-NEXT: ori $a2, $zero, 100
0 commit comments