@@ -251,43 +251,37 @@ define i64 @test10(i64* %ptr, i64 %val) {
251251; CHECK-LABEL: test10:
252252; CHECK: dmb {{ish$}}
253253; CHECK: ldrexd [[REG1:(r[0-9]?[02468])]], [[REG2:(r[0-9]?[13579])]]
254- ; CHECK: mov [[CARRY_LO:[a-z0-9]+]], #0
255- ; CHECK: mov [[CARRY_HI:[a-z0-9]+]], #0
256254; CHECK: mov [[OUT_HI:[a-z0-9]+]], r2
257- ; CHECK-LE: cmp [[REG1]], r1
258- ; CHECK-BE: cmp [[REG2]], r2
259- ; CHECK: movwls [[CARRY_LO]], #1
260- ; CHECK-LE: cmp [[REG2]], r2
261- ; CHECK-BE: cmp [[REG1]], r1
262- ; CHECK: movwle [[CARRY_HI]], #1
263- ; CHECK: moveq [[CARRY_HI]], [[CARRY_LO]]
264- ; CHECK: cmp [[CARRY_HI]], #0
255+ ; CHECK-LE: subs {{[^,]+}}, r1, [[REG1]]
256+ ; CHECK-BE: subs {{[^,]+}}, r2, [[REG2]]
257+ ; CHECK-LE: sbcs {{[^,]+}}, r2, [[REG2]]
258+ ; CHECK-BE: sbcs {{[^,]+}}, r1, [[REG1]]
259+ ; CHECK: mov [[CMP:[a-z0-9]+]], #0
260+ ; CHECK: movwge [[CMP]], #1
261+ ; CHECK: cmp [[CMP]], #0
265262; CHECK: movne [[OUT_HI]], [[REG2]]
266263; CHECK: mov [[OUT_LO:[a-z0-9]+]], r1
267264; CHECK: movne [[OUT_LO]], [[REG1]]
268- ; CHECK: strexd {{[a-z0-9]+}}, [[REG3 ]], [[REG4 ]]
265+ ; CHECK: strexd {{[a-z0-9]+}}, [[OUT_LO ]], [[OUT_HI ]]
269266; CHECK: cmp
270267; CHECK: bne
271268; CHECK: dmb {{ish$}}
272269
273270; CHECK-THUMB-LABEL: test10:
274271; CHECK-THUMB: dmb {{ish$}}
275272; CHECK-THUMB: ldrexd [[REG1:[a-z0-9]+]], [[REG2:[a-z0-9]+]]
276- ; CHECK-THUMB: mov.w [[CARRY_LO:[a-z0-9]+|lr]], #0
277- ; CHECK-THUMB: movs [[CARRY_HI:[a-z0-9]+|lr]], #0
278- ; CHECK-THUMB-LE: cmp [[REG1]], r2
279- ; CHECK-THUMB-BE: cmp [[REG2]], r3
280- ; CHECK-THUMB: movls.w [[CARRY_LO]], #1
281- ; CHECK-THUMB-LE: cmp [[REG2]], r3
282- ; CHECK-THUMB-BE: cmp [[REG1]], r2
283- ; CHECK-THUMB: movle [[CARRY_HI]], #1
284- ; CHECK-THUMB: moveq [[CARRY_HI]], [[CARRY_LO]]
285- ; CHECK-THUMB: mov [[OUT_HI:[a-z0-9]+]], r3
286- ; CHECK-THUMB: cmp [[CARRY_HI]], #0
287- ; CHECK-THUMB: mov [[OUT_LO:[a-z0-9]+]], r2
273+ ; CHECK-THUMB: mov [[OUT_LO:[a-z0-9]+]], r2
274+ ; CHECK-THUMB-LE: subs.w {{[^,]+}}, r2, [[REG1]]
275+ ; CHECK-THUMB-BE: subs.w {{[^,]+}}, r3, [[REG2]]
276+ ; CHECK-THUMB-LE: sbcs.w {{[^,]+}}, r3, [[REG2]]
277+ ; CHECK-THUMB-BE: sbcs.w {{[^,]+}}, r2, [[REG1]]
278+ ; CHECK-THUMB: mov.w [[CMP:[a-z0-9]+]], #0
279+ ; CHECK-THUMB: movge.w [[CMP]], #1
280+ ; CHECK-THUMB: cmp.w [[CMP]], #0
281+ ; CHECK-THUMB: mov [[OUT_HI:[a-z0-9]+]], r3
288282; CHECK-THUMB: movne [[OUT_HI]], [[REG2]]
289283; CHECK-THUMB: movne [[OUT_LO]], [[REG1]]
290- ; CHECK-THUMB: strexd {{[a-z0-9]+}}, [[REG3 ]], [[REG4 ]]
284+ ; CHECK-THUMB: strexd {{[a-z0-9]+}}, [[OUT_LO ]], [[OUT_HI ]]
291285; CHECK-THUMB: cmp
292286; CHECK-THUMB: bne
293287; CHECK-THUMB: dmb {{ish$}}
@@ -300,43 +294,37 @@ define i64 @test11(i64* %ptr, i64 %val) {
300294; CHECK-LABEL: test11:
301295; CHECK: dmb {{ish$}}
302296; CHECK: ldrexd [[REG1:(r[0-9]?[02468])]], [[REG2:(r[0-9]?[13579])]]
303- ; CHECK: mov [[CARRY_LO:[a-z0-9]+]], #0
304- ; CHECK: mov [[CARRY_HI:[a-z0-9]+]], #0
305297; CHECK: mov [[OUT_HI:[a-z0-9]+]], r2
306- ; CHECK-LE: cmp [[REG1]], r1
307- ; CHECK-BE: cmp [[REG2]], r2
308- ; CHECK: movwls [[CARRY_LO]], #1
309- ; CHECK-LE: cmp [[REG2]], r2
310- ; CHECK-BE: cmp [[REG1]], r1
311- ; CHECK: movwls [[CARRY_HI]], #1
312- ; CHECK: moveq [[CARRY_HI]], [[CARRY_LO]]
313- ; CHECK: cmp [[CARRY_HI]], #0
298+ ; CHECK-LE: subs {{[^,]+}}, r1, [[REG1]]
299+ ; CHECK-BE: subs {{[^,]+}}, r2, [[REG2]]
300+ ; CHECK-LE: sbcs {{[^,]+}}, r2, [[REG2]]
301+ ; CHECK-BE: sbcs {{[^,]+}}, r1, [[REG1]]
302+ ; CHECK: mov [[CMP:[a-z0-9]+]], #0
303+ ; CHECK: movwhs [[CMP]], #1
304+ ; CHECK: cmp [[CMP]], #0
314305; CHECK: movne [[OUT_HI]], [[REG2]]
315306; CHECK: mov [[OUT_LO:[a-z0-9]+]], r1
316307; CHECK: movne [[OUT_LO]], [[REG1]]
317- ; CHECK: strexd {{[a-z0-9]+}}, [[REG3 ]], [[REG4 ]]
308+ ; CHECK: strexd {{[a-z0-9]+}}, [[OUT_LO ]], [[OUT_HI ]]
318309; CHECK: cmp
319310; CHECK: bne
320311; CHECK: dmb {{ish$}}
321312
322313; CHECK-THUMB-LABEL: test11:
323314; CHECK-THUMB: dmb {{ish$}}
324315; CHECK-THUMB: ldrexd [[REG1:[a-z0-9]+]], [[REG2:[a-z0-9]+]]
325- ; CHECK-THUMB: mov.w [[CARRY_LO:[a-z0-9]+]], #0
326- ; CHECK-THUMB: movs [[CARRY_HI:[a-z0-9]+]], #0
327- ; CHECK-THUMB-LE: cmp [[REG1]], r2
328- ; CHECK-THUMB-BE: cmp [[REG2]], r3
329- ; CHECK-THUMB: movls.w [[CARRY_LO]], #1
330- ; CHECK-THUMB-LE: cmp [[REG2]], r3
331- ; CHECK-THUMB-BE: cmp [[REG1]], r2
332- ; CHECK-THUMB: movls [[CARRY_HI]], #1
333- ; CHECK-THUMB: moveq [[CARRY_HI]], [[CARRY_LO]]
334- ; CHECK-THUMB: mov [[OUT_HI:[a-z0-9]+]], r3
335- ; CHECK-THUMB: cmp [[CARRY_HI]], #0
336- ; CHECK-THUMB: mov [[OUT_LO:[a-z0-9]+]], r2
316+ ; CHECK-THUMB: mov [[OUT_LO:[a-z0-9]+]], r2
317+ ; CHECK-THUMB-LE: subs.w {{[^,]+}}, r2, [[REG1]]
318+ ; CHECK-THUMB-BE: subs.w {{[^,]+}}, r3, [[REG2]]
319+ ; CHECK-THUMB-LE: sbcs.w {{[^,]+}}, r3, [[REG2]]
320+ ; CHECK-THUMB-BE: sbcs.w {{[^,]+}}, r2, [[REG1]]
321+ ; CHECK-THUMB: mov.w [[CMP:[a-z0-9]+]], #0
322+ ; CHECK-THUMB: movhs.w [[CMP]], #1
323+ ; CHECK-THUMB: cmp.w [[CMP]], #0
324+ ; CHECK-THUMB: mov [[OUT_HI:[a-z0-9]+]], r3
337325; CHECK-THUMB: movne [[OUT_HI]], [[REG2]]
338326; CHECK-THUMB: movne [[OUT_LO]], [[REG1]]
339- ; CHECK-THUMB: strexd {{[a-z0-9]+}}, [[REG3 ]], [[REG4 ]]
327+ ; CHECK-THUMB: strexd {{[a-z0-9]+}}, [[OUT_LO ]], [[OUT_HI ]]
340328; CHECK-THUMB: cmp
341329; CHECK-THUMB: bne
342330; CHECK-THUMB: dmb {{ish$}}
@@ -349,43 +337,37 @@ define i64 @test12(i64* %ptr, i64 %val) {
349337; CHECK-LABEL: test12:
350338; CHECK: dmb {{ish$}}
351339; CHECK: ldrexd [[REG1:(r[0-9]?[02468])]], [[REG2:(r[0-9]?[13579])]]
352- ; CHECK: mov [[CARRY_LO:[a-z0-9]+]], #0
353- ; CHECK: mov [[CARRY_HI:[a-z0-9]+]], #0
354340; CHECK: mov [[OUT_HI:[a-z0-9]+]], r2
355- ; CHECK-LE: cmp [[REG1]], r1
356- ; CHECK-BE: cmp [[REG2]], r2
357- ; CHECK: movwhi [[CARRY_LO]], #1
358- ; CHECK-LE: cmp [[REG2]], r2
359- ; CHECK-BE: cmp [[REG1]], r1
360- ; CHECK: movwgt [[CARRY_HI]], #1
361- ; CHECK: moveq [[CARRY_HI]], [[CARRY_LO]]
362- ; CHECK: cmp [[CARRY_HI]], #0
341+ ; CHECK-LE: subs {{[^,]+}}, r1, [[REG1]]
342+ ; CHECK-BE: subs {{[^,]+}}, r2, [[REG2]]
343+ ; CHECK-LE: sbcs {{[^,]+}}, r2, [[REG2]]
344+ ; CHECK-BE: sbcs {{[^,]+}}, r1, [[REG1]]
345+ ; CHECK: mov [[CMP:[a-z0-9]+]], #0
346+ ; CHECK: movwlt [[CMP]], #1
347+ ; CHECK: cmp [[CMP]], #0
363348; CHECK: movne [[OUT_HI]], [[REG2]]
364349; CHECK: mov [[OUT_LO:[a-z0-9]+]], r1
365350; CHECK: movne [[OUT_LO]], [[REG1]]
366- ; CHECK: strexd {{[a-z0-9]+}}, [[REG3 ]], [[REG4 ]]
351+ ; CHECK: strexd {{[a-z0-9]+}}, [[OUT_LO ]], [[OUT_HI ]]
367352; CHECK: cmp
368353; CHECK: bne
369354; CHECK: dmb {{ish$}}
370355
371356; CHECK-THUMB-LABEL: test12:
372357; CHECK-THUMB: dmb {{ish$}}
373358; CHECK-THUMB: ldrexd [[REG1:[a-z0-9]+]], [[REG2:[a-z0-9]+]]
374- ; CHECK-THUMB: mov.w [[CARRY_LO:[a-z0-9]+]], #0
375- ; CHECK-THUMB: movs [[CARRY_HI:[a-z0-9]+]], #0
376- ; CHECK-THUMB-LE: cmp [[REG1]], r2
377- ; CHECK-THUMB-BE: cmp [[REG2]], r3
378- ; CHECK-THUMB: movhi.w [[CARRY_LO]], #1
379- ; CHECK-THUMB-LE: cmp [[REG2]], r3
380- ; CHECK-THUMB-BE: cmp [[REG1]], r2
381- ; CHECK-THUMB: movgt [[CARRY_HI]], #1
382- ; CHECK-THUMB: moveq [[CARRY_HI]], [[CARRY_LO]]
383- ; CHECK-THUMB: mov [[OUT_HI:[a-z0-9]+]], r3
384- ; CHECK-THUMB: cmp [[CARRY_HI]], #0
385- ; CHECK-THUMB: mov [[OUT_LO:[a-z0-9]+]], r2
359+ ; CHECK-THUMB: mov [[OUT_LO:[a-z0-9]+]], r2
360+ ; CHECK-THUMB-LE: subs.w {{[^,]+}}, r2, [[REG1]]
361+ ; CHECK-THUMB-BE: subs.w {{[^,]+}}, r3, [[REG2]]
362+ ; CHECK-THUMB-LE: sbcs.w {{[^,]+}}, r3, [[REG2]]
363+ ; CHECK-THUMB-BE: sbcs.w {{[^,]+}}, r2, [[REG1]]
364+ ; CHECK-THUMB: mov.w [[CMP:[a-z0-9]+]], #0
365+ ; CHECK-THUMB: movlt.w [[CMP]], #1
366+ ; CHECK-THUMB: cmp.w [[CMP]], #0
367+ ; CHECK-THUMB: mov [[OUT_HI:[a-z0-9]+]], r3
386368; CHECK-THUMB: movne [[OUT_HI]], [[REG2]]
387369; CHECK-THUMB: movne [[OUT_LO]], [[REG1]]
388- ; CHECK-THUMB: strexd {{[a-z0-9]+}}, [[REG3 ]], [[REG4 ]]
370+ ; CHECK-THUMB: strexd {{[a-z0-9]+}}, [[OUT_LO ]], [[OUT_HI ]]
389371; CHECK-THUMB: cmp
390372; CHECK-THUMB: bne
391373; CHECK-THUMB: dmb {{ish$}}
@@ -398,43 +380,37 @@ define i64 @test13(i64* %ptr, i64 %val) {
398380; CHECK-LABEL: test13:
399381; CHECK: dmb {{ish$}}
400382; CHECK: ldrexd [[REG1:(r[0-9]?[02468])]], [[REG2:(r[0-9]?[13579])]]
401- ; CHECK: mov [[CARRY_LO:[a-z0-9]+]], #0
402- ; CHECK: mov [[CARRY_HI:[a-z0-9]+]], #0
403383; CHECK: mov [[OUT_HI:[a-z0-9]+]], r2
404- ; CHECK-LE: cmp [[REG1]], r1
405- ; CHECK-BE: cmp [[REG2]], r2
406- ; CHECK: movwhi [[CARRY_LO]], #1
407- ; CHECK-LE: cmp [[REG2]], r2
408- ; CHECK-BE: cmp [[REG1]], r1
409- ; CHECK: movwhi [[CARRY_HI]], #1
410- ; CHECK: moveq [[CARRY_HI]], [[CARRY_LO]]
411- ; CHECK: cmp [[CARRY_HI]], #0
384+ ; CHECK-LE: subs {{[^,]+}}, r1, [[REG1]]
385+ ; CHECK-BE: subs {{[^,]+}}, r2, [[REG2]]
386+ ; CHECK-LE: sbcs {{[^,]+}}, r2, [[REG2]]
387+ ; CHECK-BE: sbcs {{[^,]+}}, r1, [[REG1]]
388+ ; CHECK: mov [[CMP:[a-z0-9]+]], #0
389+ ; CHECK: movwlo [[CMP]], #1
390+ ; CHECK: cmp [[CMP]], #0
412391; CHECK: movne [[OUT_HI]], [[REG2]]
413392; CHECK: mov [[OUT_LO:[a-z0-9]+]], r1
414393; CHECK: movne [[OUT_LO]], [[REG1]]
415- ; CHECK: strexd {{[a-z0-9]+}}, [[REG3 ]], [[REG4 ]]
394+ ; CHECK: strexd {{[a-z0-9]+}}, [[OUT_LO ]], [[OUT_HI ]]
416395; CHECK: cmp
417396; CHECK: bne
418397; CHECK: dmb {{ish$}}
419398
420399; CHECK-THUMB-LABEL: test13:
421400; CHECK-THUMB: dmb {{ish$}}
422401; CHECK-THUMB: ldrexd [[REG1:[a-z0-9]+]], [[REG2:[a-z0-9]+]]
423- ; CHECK-THUMB: mov.w [[CARRY_LO:[a-z0-9]+]], #0
424- ; CHECK-THUMB: movs [[CARRY_HI:[a-z0-9]+]], #0
425- ; CHECK-THUMB-LE: cmp [[REG1]], r2
426- ; CHECK-THUMB-BE: cmp [[REG2]], r3
427- ; CHECK-THUMB: movhi.w [[CARRY_LO]], #1
428- ; CHECK-THUMB-LE: cmp [[REG2]], r3
429- ; CHECK-THUMB-BE: cmp [[REG1]], r2
430- ; CHECK-THUMB: movhi [[CARRY_HI]], #1
431- ; CHECK-THUMB: moveq [[CARRY_HI]], [[CARRY_LO]]
432- ; CHECK-THUMB: mov [[OUT_HI:[a-z0-9]+]], r3
433- ; CHECK-THUMB: cmp [[CARRY_HI]], #0
434- ; CHECK-THUMB: mov [[OUT_LO:[a-z0-9]+]], r2
402+ ; CHECK-THUMB: mov [[OUT_LO:[a-z0-9]+]], r2
403+ ; CHECK-THUMB-LE: subs.w {{[^,]+}}, r2, [[REG1]]
404+ ; CHECK-THUMB-BE: subs.w {{[^,]+}}, r3, [[REG2]]
405+ ; CHECK-THUMB-LE: sbcs.w {{[^,]+}}, r3, [[REG2]]
406+ ; CHECK-THUMB-BE: sbcs.w {{[^,]+}}, r2, [[REG1]]
407+ ; CHECK-THUMB: mov.w [[CMP:[a-z0-9]+]], #0
408+ ; CHECK-THUMB: movlo.w [[CMP]], #1
409+ ; CHECK-THUMB: cmp.w [[CMP]], #0
410+ ; CHECK-THUMB: mov [[OUT_HI:[a-z0-9]+]], r3
435411; CHECK-THUMB: movne [[OUT_HI]], [[REG2]]
436412; CHECK-THUMB: movne [[OUT_LO]], [[REG1]]
437- ; CHECK-THUMB: strexd {{[a-z0-9]+}}, [[REG3 ]], [[REG4 ]]
413+ ; CHECK-THUMB: strexd {{[a-z0-9]+}}, [[OUT_LO ]], [[OUT_HI ]]
438414; CHECK-THUMB: cmp
439415; CHECK-THUMB: bne
440416; CHECK-THUMB: dmb {{ish$}}
0 commit comments