@@ -11,8 +11,8 @@ define signext i32 @test1(i32 signext %x) {
11
11
;
12
12
; RV64-LABEL: test1:
13
13
; RV64: # %bb.0:
14
- ; RV64-NEXT: slliw a0, a0, 1
15
- ; RV64-NEXT: addi a0, a0, 1
14
+ ; RV64-NEXT: slli a0, a0, 1
15
+ ; RV64-NEXT: addiw a0, a0, 1
16
16
; RV64-NEXT: ret
17
17
%a = shl i32 %x , 1
18
18
%b = or i32 %a , 1
@@ -45,8 +45,8 @@ define signext i32 @test3(i32 signext %x) {
45
45
;
46
46
; RV64-LABEL: test3:
47
47
; RV64: # %bb.0:
48
- ; RV64-NEXT: slliw a0, a0, 3
49
- ; RV64-NEXT: addi a0, a0, 6
48
+ ; RV64-NEXT: slli a0, a0, 3
49
+ ; RV64-NEXT: addiw a0, a0, 6
50
50
; RV64-NEXT: ret
51
51
%a = shl i32 %x , 3
52
52
%b = add i32 %a , 6
@@ -83,7 +83,7 @@ define signext i32 @test5(i32 signext %x) {
83
83
; RV64-LABEL: test5:
84
84
; RV64: # %bb.0:
85
85
; RV64-NEXT: srliw a0, a0, 24
86
- ; RV64-NEXT: addi a0, a0, 256
86
+ ; RV64-NEXT: addiw a0, a0, 256
87
87
; RV64-NEXT: ret
88
88
%a = lshr i32 %x , 24
89
89
%b = xor i32 %a , 256
@@ -101,7 +101,7 @@ define i64 @test6(i64 %x) {
101
101
; RV64-LABEL: test6:
102
102
; RV64: # %bb.0:
103
103
; RV64-NEXT: srli a0, a0, 54
104
- ; RV64-NEXT: addi a0, a0, 1024
104
+ ; RV64-NEXT: addiw a0, a0, 1024
105
105
; RV64-NEXT: ret
106
106
%a = lshr i64 %x , 54
107
107
%b = xor i64 %a , 1024
@@ -121,3 +121,105 @@ define signext i32 @test7(i32 signext %x) {
121
121
%a = or disjoint i32 %x , 1
122
122
ret i32 %a
123
123
}
124
+
125
+ define void @pr128468 (ptr %0 , i32 signext %1 , i32 signext %2 ) {
126
+ ; RV32-LABEL: pr128468:
127
+ ; RV32: # %bb.0:
128
+ ; RV32-NEXT: slli a3, a1, 3
129
+ ; RV32-NEXT: add a3, a0, a3
130
+ ; RV32-NEXT: lw a2, 4(a3)
131
+ ; RV32-NEXT: bgez a2, .LBB7_6
132
+ ; RV32-NEXT: # %bb.1:
133
+ ; RV32-NEXT: slli a2, a1, 1
134
+ ; RV32-NEXT: addi a2, a2, 1
135
+ ; RV32-NEXT: beq a2, a1, .LBB7_6
136
+ ; RV32-NEXT: # %bb.2: # %.preheader
137
+ ; RV32-NEXT: addi a3, a3, 4
138
+ ; RV32-NEXT: j .LBB7_4
139
+ ; RV32-NEXT: .LBB7_3: # in Loop: Header=BB7_4 Depth=1
140
+ ; RV32-NEXT: mv a2, a1
141
+ ; RV32-NEXT: addi a3, a3, 4
142
+ ; RV32-NEXT: beq a1, a1, .LBB7_6
143
+ ; RV32-NEXT: .LBB7_4: # =>This Inner Loop Header: Depth=1
144
+ ; RV32-NEXT: slli a1, a1, 2
145
+ ; RV32-NEXT: add a1, a0, a1
146
+ ; RV32-NEXT: lw a4, 0(a1)
147
+ ; RV32-NEXT: mv a1, a2
148
+ ; RV32-NEXT: sw a4, 0(a3)
149
+ ; RV32-NEXT: slli a3, a2, 3
150
+ ; RV32-NEXT: add a3, a0, a3
151
+ ; RV32-NEXT: lw a2, 4(a3)
152
+ ; RV32-NEXT: bgez a2, .LBB7_3
153
+ ; RV32-NEXT: # %bb.5: # in Loop: Header=BB7_4 Depth=1
154
+ ; RV32-NEXT: slli a2, a1, 1
155
+ ; RV32-NEXT: addi a2, a2, 1
156
+ ; RV32-NEXT: addi a3, a3, 4
157
+ ; RV32-NEXT: bne a2, a1, .LBB7_4
158
+ ; RV32-NEXT: .LBB7_6:
159
+ ; RV32-NEXT: ret
160
+ ;
161
+ ; RV64-LABEL: pr128468:
162
+ ; RV64: # %bb.0:
163
+ ; RV64-NEXT: slliw a2, a1, 1
164
+ ; RV64-NEXT: slli a3, a2, 2
165
+ ; RV64-NEXT: add a3, a0, a3
166
+ ; RV64-NEXT: lw a4, 4(a3)
167
+ ; RV64-NEXT: bgez a4, .LBB7_6
168
+ ; RV64-NEXT: # %bb.1:
169
+ ; RV64-NEXT: addiw a2, a2, 1
170
+ ; RV64-NEXT: beq a2, a1, .LBB7_6
171
+ ; RV64-NEXT: # %bb.2: # %.preheader
172
+ ; RV64-NEXT: addi a3, a3, 4
173
+ ; RV64-NEXT: j .LBB7_4
174
+ ; RV64-NEXT: .LBB7_3: # in Loop: Header=BB7_4 Depth=1
175
+ ; RV64-NEXT: mv a2, a1
176
+ ; RV64-NEXT: addi a3, a3, 4
177
+ ; RV64-NEXT: beq a1, a1, .LBB7_6
178
+ ; RV64-NEXT: .LBB7_4: # =>This Inner Loop Header: Depth=1
179
+ ; RV64-NEXT: slli a1, a1, 2
180
+ ; RV64-NEXT: add a1, a0, a1
181
+ ; RV64-NEXT: lw a4, 0(a1)
182
+ ; RV64-NEXT: mv a1, a2
183
+ ; RV64-NEXT: slliw a2, a2, 1
184
+ ; RV64-NEXT: sw a4, 0(a3)
185
+ ; RV64-NEXT: slli a3, a2, 2
186
+ ; RV64-NEXT: add a3, a0, a3
187
+ ; RV64-NEXT: lw a4, 4(a3)
188
+ ; RV64-NEXT: bgez a4, .LBB7_3
189
+ ; RV64-NEXT: # %bb.5: # in Loop: Header=BB7_4 Depth=1
190
+ ; RV64-NEXT: addiw a2, a2, 1
191
+ ; RV64-NEXT: addi a3, a3, 4
192
+ ; RV64-NEXT: bne a2, a1, .LBB7_4
193
+ ; RV64-NEXT: .LBB7_6:
194
+ ; RV64-NEXT: ret
195
+ %4 = shl nsw i32 %1 , 1
196
+ %5 = or disjoint i32 %4 , 1
197
+ %6 = sext i32 %5 to i64
198
+ %7 = getelementptr inbounds i32 , ptr %0 , i64 %6
199
+ %8 = load i32 , ptr %7 , align 4
200
+ %9 = icmp sgt i32 %8 , -1
201
+ %10 = icmp eq i32 %5 , %1
202
+ %11 = or i1 %9 , %10
203
+ br i1 %11 , label %27 , label %12
204
+
205
+ 12 : ; preds = %3, %12
206
+ %13 = phi i32 [ %25 , %12 ], [ %5 , %3 ]
207
+ %14 = phi ptr [ %22 , %12 ], [ %7 , %3 ]
208
+ %15 = phi i32 [ %13 , %12 ], [ %1 , %3 ]
209
+ %16 = sext i32 %15 to i64
210
+ %17 = getelementptr inbounds i32 , ptr %0 , i64 %16
211
+ %18 = load i32 , ptr %17 , align 4
212
+ store i32 %18 , ptr %14 , align 4
213
+ %19 = shl nsw i32 %13 , 1
214
+ %20 = or disjoint i32 %19 , 1
215
+ %21 = sext i32 %20 to i64
216
+ %22 = getelementptr inbounds i32 , ptr %0 , i64 %21
217
+ %23 = load i32 , ptr %22 , align 4
218
+ %24 = icmp slt i32 %23 , 0
219
+ %25 = select i1 %24 , i32 %20 , i32 %13
220
+ %26 = icmp eq i32 %25 , %13
221
+ br i1 %26 , label %27 , label %12
222
+
223
+ 27 : ; preds = %12, %3
224
+ ret void
225
+ }
0 commit comments