@@ -338,3 +338,225 @@ define i64 @add_mul_combine_reject_d3(i64 %x) {
338
338
%tmp1 = mul i64 %tmp0 , 192
339
339
ret i64 %tmp1
340
340
}
341
+
342
+ define i32 @add_mul_combine_reject_e1 (i32 %x ) {
343
+ ; RV32IMB-LABEL: add_mul_combine_reject_e1:
344
+ ; RV32IMB: # %bb.0:
345
+ ; RV32IMB-NEXT: addi a1, zero, 29
346
+ ; RV32IMB-NEXT: mul a0, a0, a1
347
+ ; RV32IMB-NEXT: lui a1, 14
348
+ ; RV32IMB-NEXT: addi a1, a1, -185
349
+ ; RV32IMB-NEXT: add a0, a0, a1
350
+ ; RV32IMB-NEXT: ret
351
+ ;
352
+ ; RV64IMB-LABEL: add_mul_combine_reject_e1:
353
+ ; RV64IMB: # %bb.0:
354
+ ; RV64IMB-NEXT: addi a1, zero, 29
355
+ ; RV64IMB-NEXT: mulw a0, a0, a1
356
+ ; RV64IMB-NEXT: lui a1, 14
357
+ ; RV64IMB-NEXT: addiw a1, a1, -185
358
+ ; RV64IMB-NEXT: addw a0, a0, a1
359
+ ; RV64IMB-NEXT: ret
360
+ %tmp0 = mul i32 %x , 29
361
+ %tmp1 = add i32 %tmp0 , 57159
362
+ ret i32 %tmp1
363
+ }
364
+
365
+ define signext i32 @add_mul_combine_reject_e2 (i32 signext %x ) {
366
+ ; RV32IMB-LABEL: add_mul_combine_reject_e2:
367
+ ; RV32IMB: # %bb.0:
368
+ ; RV32IMB-NEXT: addi a1, zero, 29
369
+ ; RV32IMB-NEXT: mul a0, a0, a1
370
+ ; RV32IMB-NEXT: lui a1, 14
371
+ ; RV32IMB-NEXT: addi a1, a1, -185
372
+ ; RV32IMB-NEXT: add a0, a0, a1
373
+ ; RV32IMB-NEXT: ret
374
+ ;
375
+ ; RV64IMB-LABEL: add_mul_combine_reject_e2:
376
+ ; RV64IMB: # %bb.0:
377
+ ; RV64IMB-NEXT: addi a1, zero, 29
378
+ ; RV64IMB-NEXT: mulw a0, a0, a1
379
+ ; RV64IMB-NEXT: lui a1, 14
380
+ ; RV64IMB-NEXT: addiw a1, a1, -185
381
+ ; RV64IMB-NEXT: addw a0, a0, a1
382
+ ; RV64IMB-NEXT: ret
383
+ %tmp0 = mul i32 %x , 29
384
+ %tmp1 = add i32 %tmp0 , 57159
385
+ ret i32 %tmp1
386
+ }
387
+
388
+ define i64 @add_mul_combine_reject_e3 (i64 %x ) {
389
+ ; RV32IMB-LABEL: add_mul_combine_reject_e3:
390
+ ; RV32IMB: # %bb.0:
391
+ ; RV32IMB-NEXT: addi a2, zero, 29
392
+ ; RV32IMB-NEXT: mul a1, a1, a2
393
+ ; RV32IMB-NEXT: mulhu a3, a0, a2
394
+ ; RV32IMB-NEXT: add a1, a3, a1
395
+ ; RV32IMB-NEXT: mul a2, a0, a2
396
+ ; RV32IMB-NEXT: lui a0, 14
397
+ ; RV32IMB-NEXT: addi a0, a0, -185
398
+ ; RV32IMB-NEXT: add a0, a2, a0
399
+ ; RV32IMB-NEXT: sltu a2, a0, a2
400
+ ; RV32IMB-NEXT: add a1, a1, a2
401
+ ; RV32IMB-NEXT: ret
402
+ ;
403
+ ; RV64IMB-LABEL: add_mul_combine_reject_e3:
404
+ ; RV64IMB: # %bb.0:
405
+ ; RV64IMB-NEXT: addi a1, zero, 29
406
+ ; RV64IMB-NEXT: mul a0, a0, a1
407
+ ; RV64IMB-NEXT: lui a1, 14
408
+ ; RV64IMB-NEXT: addiw a1, a1, -185
409
+ ; RV64IMB-NEXT: add a0, a0, a1
410
+ ; RV64IMB-NEXT: ret
411
+ %tmp0 = mul i64 %x , 29
412
+ %tmp1 = add i64 %tmp0 , 57159
413
+ ret i64 %tmp1
414
+ }
415
+
416
+ define i32 @add_mul_combine_reject_f1 (i32 %x ) {
417
+ ; RV32IMB-LABEL: add_mul_combine_reject_f1:
418
+ ; RV32IMB: # %bb.0:
419
+ ; RV32IMB-NEXT: addi a1, zero, 29
420
+ ; RV32IMB-NEXT: mul a0, a0, a1
421
+ ; RV32IMB-NEXT: lui a1, 14
422
+ ; RV32IMB-NEXT: addi a1, a1, -145
423
+ ; RV32IMB-NEXT: add a0, a0, a1
424
+ ; RV32IMB-NEXT: ret
425
+ ;
426
+ ; RV64IMB-LABEL: add_mul_combine_reject_f1:
427
+ ; RV64IMB: # %bb.0:
428
+ ; RV64IMB-NEXT: addi a1, zero, 29
429
+ ; RV64IMB-NEXT: mulw a0, a0, a1
430
+ ; RV64IMB-NEXT: lui a1, 14
431
+ ; RV64IMB-NEXT: addiw a1, a1, -145
432
+ ; RV64IMB-NEXT: addw a0, a0, a1
433
+ ; RV64IMB-NEXT: ret
434
+ %tmp0 = mul i32 %x , 29
435
+ %tmp1 = add i32 %tmp0 , 57199
436
+ ret i32 %tmp1
437
+ }
438
+
439
+ define signext i32 @add_mul_combine_reject_f2 (i32 signext %x ) {
440
+ ; RV32IMB-LABEL: add_mul_combine_reject_f2:
441
+ ; RV32IMB: # %bb.0:
442
+ ; RV32IMB-NEXT: addi a1, zero, 29
443
+ ; RV32IMB-NEXT: mul a0, a0, a1
444
+ ; RV32IMB-NEXT: lui a1, 14
445
+ ; RV32IMB-NEXT: addi a1, a1, -145
446
+ ; RV32IMB-NEXT: add a0, a0, a1
447
+ ; RV32IMB-NEXT: ret
448
+ ;
449
+ ; RV64IMB-LABEL: add_mul_combine_reject_f2:
450
+ ; RV64IMB: # %bb.0:
451
+ ; RV64IMB-NEXT: addi a1, zero, 29
452
+ ; RV64IMB-NEXT: mulw a0, a0, a1
453
+ ; RV64IMB-NEXT: lui a1, 14
454
+ ; RV64IMB-NEXT: addiw a1, a1, -145
455
+ ; RV64IMB-NEXT: addw a0, a0, a1
456
+ ; RV64IMB-NEXT: ret
457
+ %tmp0 = mul i32 %x , 29
458
+ %tmp1 = add i32 %tmp0 , 57199
459
+ ret i32 %tmp1
460
+ }
461
+
462
+ define i64 @add_mul_combine_reject_f3 (i64 %x ) {
463
+ ; RV32IMB-LABEL: add_mul_combine_reject_f3:
464
+ ; RV32IMB: # %bb.0:
465
+ ; RV32IMB-NEXT: addi a2, zero, 29
466
+ ; RV32IMB-NEXT: mul a1, a1, a2
467
+ ; RV32IMB-NEXT: mulhu a3, a0, a2
468
+ ; RV32IMB-NEXT: add a1, a3, a1
469
+ ; RV32IMB-NEXT: mul a2, a0, a2
470
+ ; RV32IMB-NEXT: lui a0, 14
471
+ ; RV32IMB-NEXT: addi a0, a0, -145
472
+ ; RV32IMB-NEXT: add a0, a2, a0
473
+ ; RV32IMB-NEXT: sltu a2, a0, a2
474
+ ; RV32IMB-NEXT: add a1, a1, a2
475
+ ; RV32IMB-NEXT: ret
476
+ ;
477
+ ; RV64IMB-LABEL: add_mul_combine_reject_f3:
478
+ ; RV64IMB: # %bb.0:
479
+ ; RV64IMB-NEXT: addi a1, zero, 29
480
+ ; RV64IMB-NEXT: mul a0, a0, a1
481
+ ; RV64IMB-NEXT: lui a1, 14
482
+ ; RV64IMB-NEXT: addiw a1, a1, -145
483
+ ; RV64IMB-NEXT: add a0, a0, a1
484
+ ; RV64IMB-NEXT: ret
485
+ %tmp0 = mul i64 %x , 29
486
+ %tmp1 = add i64 %tmp0 , 57199
487
+ ret i64 %tmp1
488
+ }
489
+
490
+ define i32 @add_mul_combine_reject_g1 (i32 %x ) {
491
+ ; RV32IMB-LABEL: add_mul_combine_reject_g1:
492
+ ; RV32IMB: # %bb.0:
493
+ ; RV32IMB-NEXT: sh3add a1, a0, a0
494
+ ; RV32IMB-NEXT: sh3add a0, a1, a0
495
+ ; RV32IMB-NEXT: lui a1, 2
496
+ ; RV32IMB-NEXT: addi a1, a1, -882
497
+ ; RV32IMB-NEXT: add a0, a0, a1
498
+ ; RV32IMB-NEXT: ret
499
+ ;
500
+ ; RV64IMB-LABEL: add_mul_combine_reject_g1:
501
+ ; RV64IMB: # %bb.0:
502
+ ; RV64IMB-NEXT: sh3add a1, a0, a0
503
+ ; RV64IMB-NEXT: sh3add a0, a1, a0
504
+ ; RV64IMB-NEXT: lui a1, 2
505
+ ; RV64IMB-NEXT: addiw a1, a1, -882
506
+ ; RV64IMB-NEXT: addw a0, a0, a1
507
+ ; RV64IMB-NEXT: ret
508
+ %tmp0 = mul i32 %x , 73
509
+ %tmp1 = add i32 %tmp0 , 7310
510
+ ret i32 %tmp1
511
+ }
512
+
513
+ define signext i32 @add_mul_combine_reject_g2 (i32 signext %x ) {
514
+ ; RV32IMB-LABEL: add_mul_combine_reject_g2:
515
+ ; RV32IMB: # %bb.0:
516
+ ; RV32IMB-NEXT: sh3add a1, a0, a0
517
+ ; RV32IMB-NEXT: sh3add a0, a1, a0
518
+ ; RV32IMB-NEXT: lui a1, 2
519
+ ; RV32IMB-NEXT: addi a1, a1, -882
520
+ ; RV32IMB-NEXT: add a0, a0, a1
521
+ ; RV32IMB-NEXT: ret
522
+ ;
523
+ ; RV64IMB-LABEL: add_mul_combine_reject_g2:
524
+ ; RV64IMB: # %bb.0:
525
+ ; RV64IMB-NEXT: sh3add a1, a0, a0
526
+ ; RV64IMB-NEXT: sh3add a0, a1, a0
527
+ ; RV64IMB-NEXT: lui a1, 2
528
+ ; RV64IMB-NEXT: addiw a1, a1, -882
529
+ ; RV64IMB-NEXT: addw a0, a0, a1
530
+ ; RV64IMB-NEXT: ret
531
+ %tmp0 = mul i32 %x , 73
532
+ %tmp1 = add i32 %tmp0 , 7310
533
+ ret i32 %tmp1
534
+ }
535
+
536
+ define i64 @add_mul_combine_reject_g3 (i64 %x ) {
537
+ ; RV32IMB-LABEL: add_mul_combine_reject_g3:
538
+ ; RV32IMB: # %bb.0:
539
+ ; RV32IMB-NEXT: addi a2, zero, 73
540
+ ; RV32IMB-NEXT: mul a1, a1, a2
541
+ ; RV32IMB-NEXT: mulhu a3, a0, a2
542
+ ; RV32IMB-NEXT: add a1, a3, a1
543
+ ; RV32IMB-NEXT: mul a2, a0, a2
544
+ ; RV32IMB-NEXT: lui a0, 2
545
+ ; RV32IMB-NEXT: addi a0, a0, -882
546
+ ; RV32IMB-NEXT: add a0, a2, a0
547
+ ; RV32IMB-NEXT: sltu a2, a0, a2
548
+ ; RV32IMB-NEXT: add a1, a1, a2
549
+ ; RV32IMB-NEXT: ret
550
+ ;
551
+ ; RV64IMB-LABEL: add_mul_combine_reject_g3:
552
+ ; RV64IMB: # %bb.0:
553
+ ; RV64IMB-NEXT: sh3add a1, a0, a0
554
+ ; RV64IMB-NEXT: sh3add a0, a1, a0
555
+ ; RV64IMB-NEXT: lui a1, 2
556
+ ; RV64IMB-NEXT: addiw a1, a1, -882
557
+ ; RV64IMB-NEXT: add a0, a0, a1
558
+ ; RV64IMB-NEXT: ret
559
+ %tmp0 = mul i64 %x , 73
560
+ %tmp1 = add i64 %tmp0 , 7310
561
+ ret i64 %tmp1
562
+ }
0 commit comments