Skip to content

Commit ca0fe95

Browse files
committed
[RISCV] Add tests for a case mentioned in review of pr130430
1 parent e1f4daf commit ca0fe95

File tree

1 file changed

+94
-0
lines changed

1 file changed

+94
-0
lines changed

llvm/test/CodeGen/RISCV/stores-of-loads-merging.ll

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,100 @@ define void @i8_i16(ptr %p, ptr %q) {
134134
ret void
135135
}
136136

137+
; We could reorder the first call and the load here to enable
138+
; merging, but don't currently do so.
139+
define void @i8_i16_resched_readnone_ld(ptr %p, ptr %q) {
140+
; CHECK-LABEL: i8_i16_resched_readnone_ld:
141+
; CHECK: # %bb.0:
142+
; CHECK-NEXT: addi sp, sp, -32
143+
; CHECK-NEXT: .cfi_def_cfa_offset 32
144+
; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
145+
; CHECK-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
146+
; CHECK-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
147+
; CHECK-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
148+
; CHECK-NEXT: .cfi_offset ra, -8
149+
; CHECK-NEXT: .cfi_offset s0, -16
150+
; CHECK-NEXT: .cfi_offset s1, -24
151+
; CHECK-NEXT: .cfi_offset s2, -32
152+
; CHECK-NEXT: mv s0, a0
153+
; CHECK-NEXT: lbu s2, 0(a0)
154+
; CHECK-NEXT: mv s1, a1
155+
; CHECK-NEXT: call g
156+
; CHECK-NEXT: lbu s0, 1(s0)
157+
; CHECK-NEXT: call g
158+
; CHECK-NEXT: sb s2, 0(s1)
159+
; CHECK-NEXT: sb s0, 1(s1)
160+
; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
161+
; CHECK-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
162+
; CHECK-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
163+
; CHECK-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
164+
; CHECK-NEXT: .cfi_restore ra
165+
; CHECK-NEXT: .cfi_restore s0
166+
; CHECK-NEXT: .cfi_restore s1
167+
; CHECK-NEXT: .cfi_restore s2
168+
; CHECK-NEXT: addi sp, sp, 32
169+
; CHECK-NEXT: .cfi_def_cfa_offset 0
170+
; CHECK-NEXT: ret
171+
%p0 = getelementptr i8, ptr %p, i64 0
172+
%p1 = getelementptr i8, ptr %p, i64 1
173+
%x0 = load i8, ptr %p0, align 2
174+
call void @g() readnone
175+
%x1 = load i8, ptr %p1
176+
call void @g()
177+
%q0 = getelementptr i8, ptr %q, i64 0
178+
%q1 = getelementptr i8, ptr %q, i64 1
179+
store i8 %x0, ptr %q0, align 2
180+
store i8 %x1, ptr %q1
181+
ret void
182+
}
183+
184+
; We could reorder the second call and the store here to
185+
; enable merging, but don't currently do so.
186+
define void @i8_i16_resched_readnone_st(ptr %p, ptr %q) {
187+
; CHECK-LABEL: i8_i16_resched_readnone_st:
188+
; CHECK: # %bb.0:
189+
; CHECK-NEXT: addi sp, sp, -32
190+
; CHECK-NEXT: .cfi_def_cfa_offset 32
191+
; CHECK-NEXT: sd ra, 24(sp) # 8-byte Folded Spill
192+
; CHECK-NEXT: sd s0, 16(sp) # 8-byte Folded Spill
193+
; CHECK-NEXT: sd s1, 8(sp) # 8-byte Folded Spill
194+
; CHECK-NEXT: sd s2, 0(sp) # 8-byte Folded Spill
195+
; CHECK-NEXT: .cfi_offset ra, -8
196+
; CHECK-NEXT: .cfi_offset s0, -16
197+
; CHECK-NEXT: .cfi_offset s1, -24
198+
; CHECK-NEXT: .cfi_offset s2, -32
199+
; CHECK-NEXT: lbu s1, 0(a0)
200+
; CHECK-NEXT: lbu s2, 1(a0)
201+
; CHECK-NEXT: mv s0, a1
202+
; CHECK-NEXT: call g
203+
; CHECK-NEXT: sb s1, 0(s0)
204+
; CHECK-NEXT: call g
205+
; CHECK-NEXT: sb s2, 1(s0)
206+
; CHECK-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
207+
; CHECK-NEXT: ld s0, 16(sp) # 8-byte Folded Reload
208+
; CHECK-NEXT: ld s1, 8(sp) # 8-byte Folded Reload
209+
; CHECK-NEXT: ld s2, 0(sp) # 8-byte Folded Reload
210+
; CHECK-NEXT: .cfi_restore ra
211+
; CHECK-NEXT: .cfi_restore s0
212+
; CHECK-NEXT: .cfi_restore s1
213+
; CHECK-NEXT: .cfi_restore s2
214+
; CHECK-NEXT: addi sp, sp, 32
215+
; CHECK-NEXT: .cfi_def_cfa_offset 0
216+
; CHECK-NEXT: ret
217+
%p0 = getelementptr i8, ptr %p, i64 0
218+
%p1 = getelementptr i8, ptr %p, i64 1
219+
%x0 = load i8, ptr %p0, align 2
220+
%x1 = load i8, ptr %p1
221+
call void @g()
222+
%q0 = getelementptr i8, ptr %q, i64 0
223+
store i8 %x0, ptr %q0, align 2
224+
call void @g() readnone
225+
%q1 = getelementptr i8, ptr %q, i64 1
226+
store i8 %x1, ptr %q1
227+
ret void
228+
}
229+
230+
137231
; Merging vectors is profitable, it reduces pressure within a single
138232
; register class.
139233
define void @v2i8_v4i8(ptr %p, ptr %q) {

0 commit comments

Comments
 (0)