@@ -6,41 +6,45 @@ define void @foo(i32 %a, i32 *%b, i1 %c) nounwind {
6
6
; RV32I-LABEL: foo:
7
7
; RV32I: # %bb.0:
8
8
; RV32I-NEXT: lw a3, 0(a1)
9
- ; RV32I-NEXT: beq a3, a0, .LBB0_12
9
+ ; RV32I-NEXT: beq a3, a0, .LBB0_13
10
10
; RV32I-NEXT: # %bb.1: # %test2
11
11
; RV32I-NEXT: lw a3, 0(a1)
12
- ; RV32I-NEXT: bne a3, a0, .LBB0_12
12
+ ; RV32I-NEXT: bne a3, a0, .LBB0_13
13
13
; RV32I-NEXT: # %bb.2: # %test3
14
14
; RV32I-NEXT: lw a3, 0(a1)
15
- ; RV32I-NEXT: blt a3, a0, .LBB0_12
15
+ ; RV32I-NEXT: blt a3, a0, .LBB0_13
16
16
; RV32I-NEXT: # %bb.3: # %test4
17
17
; RV32I-NEXT: lw a3, 0(a1)
18
- ; RV32I-NEXT: bge a3, a0, .LBB0_12
18
+ ; RV32I-NEXT: bge a3, a0, .LBB0_13
19
19
; RV32I-NEXT: # %bb.4: # %test5
20
20
; RV32I-NEXT: lw a3, 0(a1)
21
- ; RV32I-NEXT: bltu a3, a0, .LBB0_12
21
+ ; RV32I-NEXT: bltu a3, a0, .LBB0_13
22
22
; RV32I-NEXT: # %bb.5: # %test6
23
23
; RV32I-NEXT: lw a3, 0(a1)
24
- ; RV32I-NEXT: bgeu a3, a0, .LBB0_12
24
+ ; RV32I-NEXT: bgeu a3, a0, .LBB0_13
25
25
; RV32I-NEXT: # %bb.6: # %test7
26
26
; RV32I-NEXT: lw a3, 0(a1)
27
- ; RV32I-NEXT: blt a0, a3, .LBB0_12
27
+ ; RV32I-NEXT: blt a0, a3, .LBB0_13
28
28
; RV32I-NEXT: # %bb.7: # %test8
29
29
; RV32I-NEXT: lw a3, 0(a1)
30
- ; RV32I-NEXT: bge a0, a3, .LBB0_12
30
+ ; RV32I-NEXT: bge a0, a3, .LBB0_13
31
31
; RV32I-NEXT: # %bb.8: # %test9
32
32
; RV32I-NEXT: lw a3, 0(a1)
33
- ; RV32I-NEXT: bltu a0, a3, .LBB0_12
33
+ ; RV32I-NEXT: bltu a0, a3, .LBB0_13
34
34
; RV32I-NEXT: # %bb.9: # %test10
35
35
; RV32I-NEXT: lw a3, 0(a1)
36
- ; RV32I-NEXT: bgeu a0, a3, .LBB0_12
36
+ ; RV32I-NEXT: bgeu a0, a3, .LBB0_13
37
37
; RV32I-NEXT: # %bb.10: # %test11
38
38
; RV32I-NEXT: lw a0, 0(a1)
39
39
; RV32I-NEXT: andi a0, a2, 1
40
- ; RV32I-NEXT: bnez a0, .LBB0_12
40
+ ; RV32I-NEXT: bnez a0, .LBB0_13
41
41
; RV32I-NEXT: # %bb.11: # %test12
42
42
; 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
44
48
; RV32I-NEXT: ret
45
49
%val1 = load volatile i32 , i32* %b
46
50
%tst1 = icmp eq i32 %val1 , %a
@@ -100,8 +104,15 @@ test11:
100
104
%val11 = load volatile i32 , i32* %b
101
105
br i1 %c , label %end , label %test12
102
106
107
+ ; Check that we use bgez for X > -1 which is the canonical form.
108
+
103
109
test12:
104
110
%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
105
116
br label %end
106
117
107
118
end:
0 commit comments