; RV32IF-NEXT: beqz a1, .LBB1_3
; RV32IF-NEXT: j .LBB1_4
; RV32IF-NEXT: .LBB1_2:
-; RV32IF-NEXT: addi a1, a0, 1
-; RV32IF-NEXT: snez a1, a1
+; RV32IF-NEXT: sltiu a1, a0, -1
; RV32IF-NEXT: bnez a1, .LBB1_4
; RV32IF-NEXT: .LBB1_3: # %entry
; RV32IF-NEXT: li a0, -1
; RV32IF-NEXT: beqz a2, .LBB2_3
; RV32IF-NEXT: j .LBB2_4
; RV32IF-NEXT: .LBB2_2:
-; RV32IF-NEXT: addi a2, a0, 1
-; RV32IF-NEXT: snez a2, a2
+; RV32IF-NEXT: sltiu a2, a0, -1
; RV32IF-NEXT: bnez a2, .LBB2_4
; RV32IF-NEXT: .LBB2_3: # %entry
; RV32IF-NEXT: li a1, 0
; RV32-NEXT: beqz a1, .LBB7_3
; RV32-NEXT: j .LBB7_4
; RV32-NEXT: .LBB7_2:
-; RV32-NEXT: addi a1, a0, 1
-; RV32-NEXT: snez a1, a1
+; RV32-NEXT: sltiu a1, a0, -1
; RV32-NEXT: bnez a1, .LBB7_4
; RV32-NEXT: .LBB7_3: # %entry
; RV32-NEXT: li a0, -1
; RV32-NEXT: beqz a2, .LBB8_3
; RV32-NEXT: j .LBB8_4
; RV32-NEXT: .LBB8_2:
-; RV32-NEXT: addi a2, a0, 1
-; RV32-NEXT: snez a2, a2
+; RV32-NEXT: sltiu a2, a0, -1
; RV32-NEXT: bnez a2, .LBB8_4
; RV32-NEXT: .LBB8_3: # %entry
; RV32-NEXT: li a1, 0
; RV32IF-NEXT: bnez a6, .LBB18_3
; RV32IF-NEXT: j .LBB18_4
; RV32IF-NEXT: .LBB18_2:
-; RV32IF-NEXT: addi a6, a0, 1
-; RV32IF-NEXT: snez a7, a6
+; RV32IF-NEXT: sltiu a7, a0, -1
; RV32IF-NEXT: or a6, a3, a2
; RV32IF-NEXT: beqz a6, .LBB18_4
; RV32IF-NEXT: .LBB18_3: # %entry
; RV32IFD-NEXT: bnez a6, .LBB18_3
; RV32IFD-NEXT: j .LBB18_4
; RV32IFD-NEXT: .LBB18_2:
-; RV32IFD-NEXT: addi a6, a0, 1
-; RV32IFD-NEXT: snez a7, a6
+; RV32IFD-NEXT: sltiu a7, a0, -1
; RV32IFD-NEXT: or a6, a3, a2
; RV32IFD-NEXT: beqz a6, .LBB18_4
; RV32IFD-NEXT: .LBB18_3: # %entry
; RV32-NEXT: bnez a6, .LBB21_3
; RV32-NEXT: j .LBB21_4
; RV32-NEXT: .LBB21_2:
-; RV32-NEXT: addi a6, a0, 1
-; RV32-NEXT: snez a7, a6
+; RV32-NEXT: sltiu a7, a0, -1
; RV32-NEXT: or a6, a3, a2
; RV32-NEXT: beqz a6, .LBB21_4
; RV32-NEXT: .LBB21_3: # %entry
; RV32-NEXT: bnez a6, .LBB24_3
; RV32-NEXT: j .LBB24_4
; RV32-NEXT: .LBB24_2:
-; RV32-NEXT: addi a6, a0, 1
-; RV32-NEXT: snez a7, a6
+; RV32-NEXT: sltiu a7, a0, -1
; RV32-NEXT: or a6, a3, a2
; RV32-NEXT: beqz a6, .LBB24_4
; RV32-NEXT: .LBB24_3: # %entry
ret i64 %2
}
+define i64 @icmp_ne_neg_1(i64 %a) nounwind {
+; RV64I-LABEL: icmp_ne_neg_1:
+; RV64I: # %bb.0:
+; RV64I-NEXT: sltiu a0, a0, -1
+; RV64I-NEXT: ret
+ %1 = icmp ne i64 %a, -1
+ %2 = zext i1 %1 to i64
+ ret i64 %2
+}
+
define i64 @icmp_ugt(i64 %a, i64 %b) nounwind {
; RV64I-LABEL: icmp_ugt:
; RV64I: # %bb.0:
; RV64I: # %bb.0:
; RV64I-NEXT: lui a1, 30141
; RV64I-NEXT: addiw a1, a1, -747
-; RV64I-NEXT: bltu a0, a1, .LBB66_2
+; RV64I-NEXT: bltu a0, a1, .LBB67_2
; RV64I-NEXT: # %bb.1:
; RV64I-NEXT: mv a0, a1
-; RV64I-NEXT: .LBB66_2:
+; RV64I-NEXT: .LBB67_2:
; RV64I-NEXT: addi a0, a0, -123
; RV64I-NEXT: snez a0, a0
; RV64I-NEXT: ret