@@ -134,6 +134,100 @@ define void @i8_i16(ptr %p, ptr %q) {
134
134
ret void
135
135
}
136
136
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
+
137
231
; Merging vectors is profitable, it reduces pressure within a single
138
232
; register class.
139
233
define void @v2i8_v4i8 (ptr %p , ptr %q ) {
0 commit comments