define i32 @add_mul_combine_reject_a1(i32 %x) {
; RV32IMB-LABEL: add_mul_combine_reject_a1:
; RV32IMB: # %bb.0:
+; RV32IMB-NEXT: addi a0, a0, 1971
; RV32IMB-NEXT: addi a1, zero, 29
; RV32IMB-NEXT: mul a0, a0, a1
-; RV32IMB-NEXT: lui a1, 14
-; RV32IMB-NEXT: addi a1, a1, -185
-; RV32IMB-NEXT: add a0, a0, a1
; RV32IMB-NEXT: ret
;
; RV64IMB-LABEL: add_mul_combine_reject_a1:
; RV64IMB: # %bb.0:
+; RV64IMB-NEXT: addiw a0, a0, 1971
; RV64IMB-NEXT: addi a1, zero, 29
; RV64IMB-NEXT: mulw a0, a0, a1
-; RV64IMB-NEXT: lui a1, 14
-; RV64IMB-NEXT: addiw a1, a1, -185
-; RV64IMB-NEXT: addw a0, a0, a1
; RV64IMB-NEXT: ret
%tmp0 = add i32 %x, 1971
%tmp1 = mul i32 %tmp0, 29
define signext i32 @add_mul_combine_reject_a2(i32 signext %x) {
; RV32IMB-LABEL: add_mul_combine_reject_a2:
; RV32IMB: # %bb.0:
+; RV32IMB-NEXT: addi a0, a0, 1971
; RV32IMB-NEXT: addi a1, zero, 29
; RV32IMB-NEXT: mul a0, a0, a1
-; RV32IMB-NEXT: lui a1, 14
-; RV32IMB-NEXT: addi a1, a1, -185
-; RV32IMB-NEXT: add a0, a0, a1
; RV32IMB-NEXT: ret
;
; RV64IMB-LABEL: add_mul_combine_reject_a2:
; RV64IMB: # %bb.0:
+; RV64IMB-NEXT: addiw a0, a0, 1971
; RV64IMB-NEXT: addi a1, zero, 29
; RV64IMB-NEXT: mulw a0, a0, a1
-; RV64IMB-NEXT: lui a1, 14
-; RV64IMB-NEXT: addiw a1, a1, -185
-; RV64IMB-NEXT: addw a0, a0, a1
; RV64IMB-NEXT: ret
%tmp0 = add i32 %x, 1971
%tmp1 = mul i32 %tmp0, 29
;
; RV64IMB-LABEL: add_mul_combine_reject_a3:
; RV64IMB: # %bb.0:
+; RV64IMB-NEXT: addi a0, a0, 1971
; RV64IMB-NEXT: addi a1, zero, 29
; RV64IMB-NEXT: mul a0, a0, a1
-; RV64IMB-NEXT: lui a1, 14
-; RV64IMB-NEXT: addiw a1, a1, -185
-; RV64IMB-NEXT: add a0, a0, a1
; RV64IMB-NEXT: ret
%tmp0 = add i64 %x, 1971
%tmp1 = mul i64 %tmp0, 29
define i32 @add_mul_combine_reject_c1(i32 %x) {
; RV32IMB-LABEL: add_mul_combine_reject_c1:
; RV32IMB: # %bb.0:
+; RV32IMB-NEXT: addi a0, a0, 1000
; RV32IMB-NEXT: sh3add a1, a0, a0
; RV32IMB-NEXT: sh3add a0, a1, a0
-; RV32IMB-NEXT: lui a1, 18
-; RV32IMB-NEXT: addi a1, a1, -728
-; RV32IMB-NEXT: add a0, a0, a1
; RV32IMB-NEXT: ret
;
; RV64IMB-LABEL: add_mul_combine_reject_c1:
; RV64IMB: # %bb.0:
+; RV64IMB-NEXT: addi a0, a0, 1000
; RV64IMB-NEXT: sh3add a1, a0, a0
; RV64IMB-NEXT: sh3add a0, a1, a0
-; RV64IMB-NEXT: lui a1, 18
-; RV64IMB-NEXT: addiw a1, a1, -728
-; RV64IMB-NEXT: addw a0, a0, a1
+; RV64IMB-NEXT: sext.w a0, a0
; RV64IMB-NEXT: ret
%tmp0 = add i32 %x, 1000
%tmp1 = mul i32 %tmp0, 73
define signext i32 @add_mul_combine_reject_c2(i32 signext %x) {
; RV32IMB-LABEL: add_mul_combine_reject_c2:
; RV32IMB: # %bb.0:
+; RV32IMB-NEXT: addi a0, a0, 1000
; RV32IMB-NEXT: sh3add a1, a0, a0
; RV32IMB-NEXT: sh3add a0, a1, a0
-; RV32IMB-NEXT: lui a1, 18
-; RV32IMB-NEXT: addi a1, a1, -728
-; RV32IMB-NEXT: add a0, a0, a1
; RV32IMB-NEXT: ret
;
; RV64IMB-LABEL: add_mul_combine_reject_c2:
; RV64IMB: # %bb.0:
+; RV64IMB-NEXT: addi a0, a0, 1000
; RV64IMB-NEXT: sh3add a1, a0, a0
; RV64IMB-NEXT: sh3add a0, a1, a0
-; RV64IMB-NEXT: lui a1, 18
-; RV64IMB-NEXT: addiw a1, a1, -728
-; RV64IMB-NEXT: addw a0, a0, a1
+; RV64IMB-NEXT: sext.w a0, a0
; RV64IMB-NEXT: ret
%tmp0 = add i32 %x, 1000
%tmp1 = mul i32 %tmp0, 73
;
; RV64IMB-LABEL: add_mul_combine_reject_c3:
; RV64IMB: # %bb.0:
+; RV64IMB-NEXT: addi a0, a0, 1000
; RV64IMB-NEXT: sh3add a1, a0, a0
; RV64IMB-NEXT: sh3add a0, a1, a0
-; RV64IMB-NEXT: lui a1, 18
-; RV64IMB-NEXT: addiw a1, a1, -728
-; RV64IMB-NEXT: add a0, a0, a1
; RV64IMB-NEXT: ret
%tmp0 = add i64 %x, 1000
%tmp1 = mul i64 %tmp0, 73
define i32 @add_mul_combine_reject_d1(i32 %x) {
; RV32IMB-LABEL: add_mul_combine_reject_d1:
; RV32IMB: # %bb.0:
+; RV32IMB-NEXT: addi a0, a0, 1000
; RV32IMB-NEXT: sh1add a0, a0, a0
; RV32IMB-NEXT: slli a0, a0, 6
-; RV32IMB-NEXT: lui a1, 47
-; RV32IMB-NEXT: addi a1, a1, -512
-; RV32IMB-NEXT: add a0, a0, a1
; RV32IMB-NEXT: ret
;
; RV64IMB-LABEL: add_mul_combine_reject_d1:
; RV64IMB: # %bb.0:
+; RV64IMB-NEXT: addi a0, a0, 1000
; RV64IMB-NEXT: sh1add a0, a0, a0
-; RV64IMB-NEXT: slli a0, a0, 6
-; RV64IMB-NEXT: lui a1, 47
-; RV64IMB-NEXT: addiw a1, a1, -512
-; RV64IMB-NEXT: addw a0, a0, a1
+; RV64IMB-NEXT: slliw a0, a0, 6
; RV64IMB-NEXT: ret
%tmp0 = add i32 %x, 1000
%tmp1 = mul i32 %tmp0, 192
define signext i32 @add_mul_combine_reject_d2(i32 signext %x) {
; RV32IMB-LABEL: add_mul_combine_reject_d2:
; RV32IMB: # %bb.0:
+; RV32IMB-NEXT: addi a0, a0, 1000
; RV32IMB-NEXT: sh1add a0, a0, a0
; RV32IMB-NEXT: slli a0, a0, 6
-; RV32IMB-NEXT: lui a1, 47
-; RV32IMB-NEXT: addi a1, a1, -512
-; RV32IMB-NEXT: add a0, a0, a1
; RV32IMB-NEXT: ret
;
; RV64IMB-LABEL: add_mul_combine_reject_d2:
; RV64IMB: # %bb.0:
+; RV64IMB-NEXT: addi a0, a0, 1000
; RV64IMB-NEXT: sh1add a0, a0, a0
-; RV64IMB-NEXT: slli a0, a0, 6
-; RV64IMB-NEXT: lui a1, 47
-; RV64IMB-NEXT: addiw a1, a1, -512
-; RV64IMB-NEXT: addw a0, a0, a1
+; RV64IMB-NEXT: slliw a0, a0, 6
; RV64IMB-NEXT: ret
%tmp0 = add i32 %x, 1000
%tmp1 = mul i32 %tmp0, 192
;
; RV64IMB-LABEL: add_mul_combine_reject_d3:
; RV64IMB: # %bb.0:
+; RV64IMB-NEXT: addi a0, a0, 1000
; RV64IMB-NEXT: sh1add a0, a0, a0
; RV64IMB-NEXT: slli a0, a0, 6
-; RV64IMB-NEXT: lui a1, 47
-; RV64IMB-NEXT: addiw a1, a1, -512
-; RV64IMB-NEXT: add a0, a0, a1
; RV64IMB-NEXT: ret
%tmp0 = add i64 %x, 1000
%tmp1 = mul i64 %tmp0, 192