@@ -52,11 +52,23 @@ define i32 @foo(i32 %a, i32 *%b) nounwind {
52
52
; RV32I-NEXT: # %bb.17:
53
53
; RV32I-NEXT: mv a0, a2
54
54
; RV32I-NEXT: .LBB0_18:
55
- ; RV32I-NEXT: lw a1 , 0(a1)
56
- ; RV32I-NEXT: bge a1 , a0, .LBB0_20
55
+ ; RV32I-NEXT: lw a2 , 0(a1)
56
+ ; RV32I-NEXT: bge a2 , a0, .LBB0_20
57
57
; RV32I-NEXT: # %bb.19:
58
- ; RV32I-NEXT: mv a0, a1
58
+ ; RV32I-NEXT: mv a0, a2
59
59
; RV32I-NEXT: .LBB0_20:
60
+ ; RV32I-NEXT: lw a2, 0(a1)
61
+ ; RV32I-NEXT: addi a3, zero, 1
62
+ ; RV32I-NEXT: blt a2, a3, .LBB0_22
63
+ ; RV32I-NEXT: # %bb.21:
64
+ ; RV32I-NEXT: mv a0, a2
65
+ ; RV32I-NEXT: .LBB0_22:
66
+ ; RV32I-NEXT: lw a1, 0(a1)
67
+ ; RV32I-NEXT: addi a3, zero, -1
68
+ ; RV32I-NEXT: blt a3, a2, .LBB0_24
69
+ ; RV32I-NEXT: # %bb.23:
70
+ ; RV32I-NEXT: mv a0, a1
71
+ ; RV32I-NEXT: .LBB0_24:
60
72
; RV32I-NEXT: ret
61
73
;
62
74
; RV32IBT-LABEL: foo:
@@ -85,12 +97,19 @@ define i32 @foo(i32 %a, i32 *%b) nounwind {
85
97
; RV32IBT-NEXT: cmov a0, a4, a0, a2
86
98
; RV32IBT-NEXT: lw a2, 0(a1)
87
99
; RV32IBT-NEXT: slt a4, a0, a3
88
- ; RV32IBT-NEXT: lw a1, 0(a1)
89
100
; RV32IBT-NEXT: cmov a0, a4, a3, a0
90
- ; RV32IBT-NEXT: slt a3, a0, a2
91
- ; RV32IBT-NEXT: cmov a0, a3, a0, a2
92
- ; RV32IBT-NEXT: slt a2, a1, a0
93
- ; RV32IBT-NEXT: cmov a0, a2, a1, a0
101
+ ; RV32IBT-NEXT: lw a3, 0(a1)
102
+ ; RV32IBT-NEXT: slt a4, a0, a2
103
+ ; RV32IBT-NEXT: lw a5, 0(a1)
104
+ ; RV32IBT-NEXT: cmov a0, a4, a0, a2
105
+ ; RV32IBT-NEXT: slt a2, a3, a0
106
+ ; RV32IBT-NEXT: cmov a0, a2, a3, a0
107
+ ; RV32IBT-NEXT: slti a2, a5, 1
108
+ ; RV32IBT-NEXT: lw a1, 0(a1)
109
+ ; RV32IBT-NEXT: cmov a0, a2, a0, a5
110
+ ; RV32IBT-NEXT: addi a2, zero, -1
111
+ ; RV32IBT-NEXT: slt a2, a2, a5
112
+ ; RV32IBT-NEXT: cmov a0, a2, a0, a1
94
113
; RV32IBT-NEXT: ret
95
114
%val1 = load volatile i32 , i32* %b
96
115
%tst1 = icmp eq i32 %a , %val1
@@ -132,5 +151,13 @@ define i32 @foo(i32 %a, i32 *%b) nounwind {
132
151
%tst10 = icmp sle i32 %val18 , %val19
133
152
%val20 = select i1 %tst10 , i32 %val18 , i32 %val19
134
153
135
- ret i32 %val20
154
+ %val21 = load volatile i32 , i32* %b
155
+ %tst11 = icmp slt i32 %val21 , 1
156
+ %val22 = select i1 %tst11 , i32 %val20 , i32 %val21
157
+
158
+ %val23 = load volatile i32 , i32* %b
159
+ %tst12 = icmp sgt i32 %val21 , -1
160
+ %val24 = select i1 %tst12 , i32 %val22 , i32 %val23
161
+
162
+ ret i32 %val24
136
163
}
0 commit comments