@@ -176,3 +176,104 @@ body: |
176176 $q1 = COPY %o_wide
177177 RET_ReallyLR implicit $w0
178178 ...
179+ ---
180+ name : sub_may
181+ body : |
182+ bb.0:
183+ liveins: $w0, $w1
184+ ; CHECK-LABEL: name: sub_may
185+ ; CHECK: liveins: $w0, $w1
186+ ; CHECK-NEXT: {{ $}}
187+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
188+ ; CHECK-NEXT: %const:_(s32) = G_CONSTANT i32 512
189+ ; CHECK-NEXT: %sub:_(s32), %o:_(s1) = G_SSUBO [[COPY]], %const
190+ ; CHECK-NEXT: %o_wide:_(s32) = G_ZEXT %o(s1)
191+ ; CHECK-NEXT: $w0 = COPY %sub(s32)
192+ ; CHECK-NEXT: $w1 = COPY %o_wide(s32)
193+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
194+ %0:_(s32) = COPY $w0
195+ %const:_(s32) = G_CONSTANT i32 512
196+ %sub:_(s32), %o:_(s1) = G_SSUBO %0, %const
197+ %o_wide:_(s32) = G_ZEXT %o(s1)
198+ $w0 = COPY %sub(s32)
199+ $w1 = COPY %o_wide
200+ RET_ReallyLR implicit $w0
201+ ...
202+ ---
203+ name : usub_may
204+ body : |
205+ bb.0:
206+ liveins: $w0, $w1
207+ ; CHECK-LABEL: name: usub_may
208+ ; CHECK: liveins: $w0, $w1
209+ ; CHECK-NEXT: {{ $}}
210+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
211+ ; CHECK-NEXT: %const:_(s32) = G_CONSTANT i32 512
212+ ; CHECK-NEXT: %sub:_(s32), %o:_(s1) = G_USUBO [[COPY]], %const
213+ ; CHECK-NEXT: %o_wide:_(s32) = G_ZEXT %o(s1)
214+ ; CHECK-NEXT: $w0 = COPY %sub(s32)
215+ ; CHECK-NEXT: $w1 = COPY %o_wide(s32)
216+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
217+ %0:_(s32) = COPY $w0
218+ %const:_(s32) = G_CONSTANT i32 512
219+ %sub:_(s32), %o:_(s1) = G_USUBO %0, %const
220+ %o_wide:_(s32) = G_ZEXT %o(s1)
221+ $w0 = COPY %sub(s32)
222+ $w1 = COPY %o_wide
223+ RET_ReallyLR implicit $w0
224+ ...
225+ ---
226+ name : usub_may_carry_s11
227+ body : |
228+ bb.0:
229+ liveins: $w0, $w1
230+ ; CHECK-LABEL: name: usub_may_carry_s11
231+ ; CHECK: liveins: $w0, $w1
232+ ; CHECK-NEXT: {{ $}}
233+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
234+ ; CHECK-NEXT: %const:_(s32) = G_CONSTANT i32 512
235+ ; CHECK-NEXT: %sub:_(s32), %o:_(s11) = G_USUBO [[COPY]], %const
236+ ; CHECK-NEXT: %o_wide:_(s32) = G_ZEXT %o(s11)
237+ ; CHECK-NEXT: $w0 = COPY %sub(s32)
238+ ; CHECK-NEXT: $w1 = COPY %o_wide(s32)
239+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
240+ %0:_(s32) = COPY $w0
241+ %const:_(s32) = G_CONSTANT i32 512
242+ %sub:_(s32), %o:_(s11) = G_USUBO %0, %const
243+ %o_wide:_(s32) = G_ZEXT %o(s11)
244+ $w0 = COPY %sub(s32)
245+ $w1 = COPY %o_wide
246+ RET_ReallyLR implicit $w0
247+ ...
248+ ---
249+ name : usub_may_carry_s11_vector
250+ body : |
251+ bb.0:
252+ liveins: $w0, $w1
253+ ; CHECK-LABEL: name: usub_may_carry_s11_vector
254+ ; CHECK: liveins: $w0, $w1
255+ ; CHECK-NEXT: {{ $}}
256+ ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
257+ ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w0
258+ ; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $w0
259+ ; CHECK-NEXT: %const:_(s32) = G_CONSTANT i32 512
260+ ; CHECK-NEXT: %bv:_(<4 x s32>) = G_BUILD_VECTOR %const(s32), [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32)
261+ ; CHECK-NEXT: %bv1:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[COPY1]](s32), [[COPY2]](s32), %const(s32)
262+ ; CHECK-NEXT: %sub:_(<4 x s32>), %o:_(<4 x s11>) = G_USUBO %bv, %bv1
263+ ; CHECK-NEXT: %o_wide:_(<4 x s32>) = G_ZEXT %o(<4 x s11>)
264+ ; CHECK-NEXT: $q0 = COPY %sub(<4 x s32>)
265+ ; CHECK-NEXT: $q1 = COPY %o_wide(<4 x s32>)
266+ ; CHECK-NEXT: RET_ReallyLR implicit $w0
267+ %0:_(s32) = COPY $w0
268+ %1:_(s32) = COPY $w0
269+ %2:_(s32) = COPY $w0
270+ %3:_(s32) = COPY $w0
271+ %const:_(s32) = G_CONSTANT i32 512
272+ %bv:_(<4 x s32>) = G_BUILD_VECTOR %const(s32), %0(s32), %1(s32), %2(s32)
273+ %bv1:_(<4 x s32>) = G_BUILD_VECTOR %0(s32), %1(s32), %2(s32), %const(s32)
274+ %sub:_(<4 x s32>), %o:_(<4 x s11>) = G_USUBO %bv, %bv1
275+ %o_wide:_(<4 x s32>) = G_ZEXT %o(<4 x s11>)
276+ $q0 = COPY %sub(<4 x s32>)
277+ $q1 = COPY %o_wide
278+ RET_ReallyLR implicit $w0
279+ ...
0 commit comments