@@ -280,11 +280,8 @@ define { i128, i8 } @u128_checked_mul(i128 %x, i128 %y) {
280
280
; CHECK-NEXT: csinc w8, w8, wzr, lo
281
281
; CHECK-NEXT: b .LBB17_3
282
282
; CHECK-NEXT: .LBB17_2: // %overflow.no
283
- ; CHECK-NEXT: umulh x8, x0, x2
284
- ; CHECK-NEXT: madd x8, x0, x3, x8
283
+ ; CHECK-NEXT: umulh x1, x0, x2
285
284
; CHECK-NEXT: mul x0, x0, x2
286
- ; CHECK-NEXT: madd x1, x1, x2, x8
287
- ; CHECK-NEXT: mov w8, wzr
288
285
; CHECK-NEXT: .LBB17_3: // %overflow.res
289
286
; CHECK-NEXT: mov w9, #1 // =0x1
290
287
; CHECK-NEXT: bic w2, w9, w8
@@ -321,11 +318,9 @@ define { i128, i8 } @u128_overflowing_mul(i128 %x, i128 %y) {
321
318
; CHECK-NEXT: and w2, w8, #0x1
322
319
; CHECK-NEXT: ret
323
320
; CHECK-NEXT: .LBB18_2: // %overflow.no
324
- ; CHECK-NEXT: umulh x8, x0, x2
325
- ; CHECK-NEXT: madd x8, x0, x3, x8
321
+ ; CHECK-NEXT: umulh x1, x0, x2
326
322
; CHECK-NEXT: mul x0, x0, x2
327
- ; CHECK-NEXT: madd x1, x1, x2, x8
328
- ; CHECK-NEXT: and w2, wzr, #0x1
323
+ ; CHECK-NEXT: and w2, w8, #0x1
329
324
; CHECK-NEXT: ret
330
325
%1 = tail call { i128 , i1 } @llvm.umul.with.overflow.i128 (i128 %x , i128 %y )
331
326
%2 = extractvalue { i128 , i1 } %1 , 0
@@ -357,10 +352,8 @@ define i128 @u128_saturating_mul(i128 %x, i128 %y) {
357
352
; CHECK-NEXT: csinc w10, w10, wzr, lo
358
353
; CHECK-NEXT: b .LBB19_3
359
354
; CHECK-NEXT: .LBB19_2: // %overflow.no
360
- ; CHECK-NEXT: umulh x8 , x0, x2
355
+ ; CHECK-NEXT: umulh x9 , x0, x2
361
356
; CHECK-NEXT: mov w10, wzr
362
- ; CHECK-NEXT: madd x8, x0, x3, x8
363
- ; CHECK-NEXT: madd x9, x1, x2, x8
364
357
; CHECK-NEXT: mul x8, x0, x2
365
358
; CHECK-NEXT: .LBB19_3: // %overflow.res
366
359
; CHECK-NEXT: tst w10, #0x1
@@ -396,11 +389,9 @@ define { i128, i8 } @i128_checked_mul(i128 %x, i128 %y) {
396
389
; CHECK-NEXT: cmp x3, x8
397
390
; CHECK-NEXT: b.ne .LBB21_3
398
391
; CHECK-NEXT: // %bb.2: // %overflow.no
399
- ; CHECK-NEXT: umulh x8, x0, x2
400
- ; CHECK-NEXT: madd x8, x0, x3, x8
401
- ; CHECK-NEXT: mul x0, x0, x2
402
- ; CHECK-NEXT: madd x1, x1, x2, x8
392
+ ; CHECK-NEXT: smulh x1, x0, x2
403
393
; CHECK-NEXT: mov w8, wzr
394
+ ; CHECK-NEXT: mul x0, x0, x2
404
395
; CHECK-NEXT: b .LBB21_4
405
396
; CHECK-NEXT: .LBB21_3: // %overflow
406
397
; CHECK-NEXT: asr x9, x1, #63
@@ -454,10 +445,8 @@ define { i128, i8 } @i128_overflowing_mul(i128 %x, i128 %y) {
454
445
; CHECK-NEXT: cmp x3, x8
455
446
; CHECK-NEXT: b.ne .LBB22_3
456
447
; CHECK-NEXT: // %bb.2: // %overflow.no
457
- ; CHECK-NEXT: umulh x8, x0, x2
458
- ; CHECK-NEXT: madd x8, x0, x3, x8
448
+ ; CHECK-NEXT: smulh x1, x0, x2
459
449
; CHECK-NEXT: mul x0, x0, x2
460
- ; CHECK-NEXT: madd x1, x1, x2, x8
461
450
; CHECK-NEXT: and w2, wzr, #0x1
462
451
; CHECK-NEXT: ret
463
452
; CHECK-NEXT: .LBB22_3: // %overflow
@@ -509,11 +498,9 @@ define i128 @i128_saturating_mul(i128 %x, i128 %y) {
509
498
; CHECK-NEXT: cmp x3, x8
510
499
; CHECK-NEXT: b.ne .LBB23_3
511
500
; CHECK-NEXT: // %bb.2: // %overflow.no
512
- ; CHECK-NEXT: umulh x8, x0, x2
501
+ ; CHECK-NEXT: smulh x8, x0, x2
513
502
; CHECK-NEXT: mov w10, wzr
514
503
; CHECK-NEXT: mul x9, x0, x2
515
- ; CHECK-NEXT: madd x8, x0, x3, x8
516
- ; CHECK-NEXT: madd x8, x1, x2, x8
517
504
; CHECK-NEXT: b .LBB23_4
518
505
; CHECK-NEXT: .LBB23_3: // %overflow
519
506
; CHECK-NEXT: asr x9, x1, #63
0 commit comments