@@ -6,41 +6,45 @@ define void @foo(i32 %a, i32 *%b, i1 %c) nounwind {
66; RV32I-LABEL: foo:
77; RV32I: # %bb.0:
88; RV32I-NEXT: lw a3, 0(a1)
9- ; RV32I-NEXT: beq a3, a0, .LBB0_12
9+ ; RV32I-NEXT: beq a3, a0, .LBB0_13
1010; RV32I-NEXT: # %bb.1: # %test2
1111; RV32I-NEXT: lw a3, 0(a1)
12- ; RV32I-NEXT: bne a3, a0, .LBB0_12
12+ ; RV32I-NEXT: bne a3, a0, .LBB0_13
1313; RV32I-NEXT: # %bb.2: # %test3
1414; RV32I-NEXT: lw a3, 0(a1)
15- ; RV32I-NEXT: blt a3, a0, .LBB0_12
15+ ; RV32I-NEXT: blt a3, a0, .LBB0_13
1616; RV32I-NEXT: # %bb.3: # %test4
1717; RV32I-NEXT: lw a3, 0(a1)
18- ; RV32I-NEXT: bge a3, a0, .LBB0_12
18+ ; RV32I-NEXT: bge a3, a0, .LBB0_13
1919; RV32I-NEXT: # %bb.4: # %test5
2020; RV32I-NEXT: lw a3, 0(a1)
21- ; RV32I-NEXT: bltu a3, a0, .LBB0_12
21+ ; RV32I-NEXT: bltu a3, a0, .LBB0_13
2222; RV32I-NEXT: # %bb.5: # %test6
2323; RV32I-NEXT: lw a3, 0(a1)
24- ; RV32I-NEXT: bgeu a3, a0, .LBB0_12
24+ ; RV32I-NEXT: bgeu a3, a0, .LBB0_13
2525; RV32I-NEXT: # %bb.6: # %test7
2626; RV32I-NEXT: lw a3, 0(a1)
27- ; RV32I-NEXT: blt a0, a3, .LBB0_12
27+ ; RV32I-NEXT: blt a0, a3, .LBB0_13
2828; RV32I-NEXT: # %bb.7: # %test8
2929; RV32I-NEXT: lw a3, 0(a1)
30- ; RV32I-NEXT: bge a0, a3, .LBB0_12
30+ ; RV32I-NEXT: bge a0, a3, .LBB0_13
3131; RV32I-NEXT: # %bb.8: # %test9
3232; RV32I-NEXT: lw a3, 0(a1)
33- ; RV32I-NEXT: bltu a0, a3, .LBB0_12
33+ ; RV32I-NEXT: bltu a0, a3, .LBB0_13
3434; RV32I-NEXT: # %bb.9: # %test10
3535; RV32I-NEXT: lw a3, 0(a1)
36- ; RV32I-NEXT: bgeu a0, a3, .LBB0_12
36+ ; RV32I-NEXT: bgeu a0, a3, .LBB0_13
3737; RV32I-NEXT: # %bb.10: # %test11
3838; RV32I-NEXT: lw a0, 0(a1)
3939; RV32I-NEXT: andi a0, a2, 1
40- ; RV32I-NEXT: bnez a0, .LBB0_12
40+ ; RV32I-NEXT: bnez a0, .LBB0_13
4141; RV32I-NEXT: # %bb.11: # %test12
4242; RV32I-NEXT: lw a0, 0(a1)
43- ; RV32I-NEXT: .LBB0_12: # %end
43+ ; RV32I-NEXT: addi a2, zero, -1
44+ ; RV32I-NEXT: blt a2, a0, .LBB0_13
45+ ; RV32I-NEXT: # %bb.12: # %test13
46+ ; RV32I-NEXT: lw a0, 0(a1)
47+ ; RV32I-NEXT: .LBB0_13: # %end
4448; RV32I-NEXT: ret
4549 %val1 = load volatile i32 , i32* %b
4650 %tst1 = icmp eq i32 %val1 , %a
@@ -100,8 +104,15 @@ test11:
100104 %val11 = load volatile i32 , i32* %b
101105 br i1 %c , label %end , label %test12
102106
107+ ; Check that we use bgez for X > -1 which is the canonical form.
108+
103109test12:
104110 %val12 = load volatile i32 , i32* %b
111+ %tst12 = icmp sgt i32 %val12 , -1
112+ br i1 %tst12 , label %end , label %test13
113+
114+ test13:
115+ %val13 = load volatile i32 , i32* %b
105116 br label %end
106117
107118end:
0 commit comments