@@ -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.
139233define void @v2i8_v4i8 (ptr %p , ptr %q ) {
0 commit comments