@@ -1399,3 +1399,165 @@ define i64 @add8208(i64 %a) {
1399
1399
%c = add i64 %a , 8208
1400
1400
ret i64 %c
1401
1401
}
1402
+
1403
+ define signext i32 @addshl32_5_6 (i32 signext %a , i32 signext %b ) {
1404
+ ; RV64I-LABEL: addshl32_5_6:
1405
+ ; RV64I: # %bb.0:
1406
+ ; RV64I-NEXT: slliw a0, a0, 5
1407
+ ; RV64I-NEXT: slliw a1, a1, 6
1408
+ ; RV64I-NEXT: addw a0, a0, a1
1409
+ ; RV64I-NEXT: ret
1410
+ ;
1411
+ ; RV64B-LABEL: addshl32_5_6:
1412
+ ; RV64B: # %bb.0:
1413
+ ; RV64B-NEXT: slliw a0, a0, 5
1414
+ ; RV64B-NEXT: slliw a1, a1, 6
1415
+ ; RV64B-NEXT: addw a0, a0, a1
1416
+ ; RV64B-NEXT: ret
1417
+ ;
1418
+ ; RV64ZBA-LABEL: addshl32_5_6:
1419
+ ; RV64ZBA: # %bb.0:
1420
+ ; RV64ZBA-NEXT: slliw a0, a0, 5
1421
+ ; RV64ZBA-NEXT: slliw a1, a1, 6
1422
+ ; RV64ZBA-NEXT: addw a0, a0, a1
1423
+ ; RV64ZBA-NEXT: ret
1424
+ %c = shl i32 %a , 5
1425
+ %d = shl i32 %b , 6
1426
+ %e = add i32 %c , %d
1427
+ ret i32 %e
1428
+ }
1429
+
1430
+ define i64 @addshl64_5_6 (i64 %a , i64 %b ) {
1431
+ ; RV64I-LABEL: addshl64_5_6:
1432
+ ; RV64I: # %bb.0:
1433
+ ; RV64I-NEXT: slli a0, a0, 5
1434
+ ; RV64I-NEXT: slli a1, a1, 6
1435
+ ; RV64I-NEXT: add a0, a0, a1
1436
+ ; RV64I-NEXT: ret
1437
+ ;
1438
+ ; RV64B-LABEL: addshl64_5_6:
1439
+ ; RV64B: # %bb.0:
1440
+ ; RV64B-NEXT: slli a0, a0, 5
1441
+ ; RV64B-NEXT: slli a1, a1, 6
1442
+ ; RV64B-NEXT: add a0, a0, a1
1443
+ ; RV64B-NEXT: ret
1444
+ ;
1445
+ ; RV64ZBA-LABEL: addshl64_5_6:
1446
+ ; RV64ZBA: # %bb.0:
1447
+ ; RV64ZBA-NEXT: slli a0, a0, 5
1448
+ ; RV64ZBA-NEXT: slli a1, a1, 6
1449
+ ; RV64ZBA-NEXT: add a0, a0, a1
1450
+ ; RV64ZBA-NEXT: ret
1451
+ %c = shl i64 %a , 5
1452
+ %d = shl i64 %b , 6
1453
+ %e = add i64 %c , %d
1454
+ ret i64 %e
1455
+ }
1456
+
1457
+ define signext i32 @addshl32_5_7 (i32 signext %a , i32 signext %b ) {
1458
+ ; RV64I-LABEL: addshl32_5_7:
1459
+ ; RV64I: # %bb.0:
1460
+ ; RV64I-NEXT: slliw a0, a0, 5
1461
+ ; RV64I-NEXT: slliw a1, a1, 7
1462
+ ; RV64I-NEXT: addw a0, a0, a1
1463
+ ; RV64I-NEXT: ret
1464
+ ;
1465
+ ; RV64B-LABEL: addshl32_5_7:
1466
+ ; RV64B: # %bb.0:
1467
+ ; RV64B-NEXT: slliw a0, a0, 5
1468
+ ; RV64B-NEXT: slliw a1, a1, 7
1469
+ ; RV64B-NEXT: addw a0, a0, a1
1470
+ ; RV64B-NEXT: ret
1471
+ ;
1472
+ ; RV64ZBA-LABEL: addshl32_5_7:
1473
+ ; RV64ZBA: # %bb.0:
1474
+ ; RV64ZBA-NEXT: slliw a0, a0, 5
1475
+ ; RV64ZBA-NEXT: slliw a1, a1, 7
1476
+ ; RV64ZBA-NEXT: addw a0, a0, a1
1477
+ ; RV64ZBA-NEXT: ret
1478
+ %c = shl i32 %a , 5
1479
+ %d = shl i32 %b , 7
1480
+ %e = add i32 %c , %d
1481
+ ret i32 %e
1482
+ }
1483
+
1484
+ define i64 @addshl64_5_7 (i64 %a , i64 %b ) {
1485
+ ; RV64I-LABEL: addshl64_5_7:
1486
+ ; RV64I: # %bb.0:
1487
+ ; RV64I-NEXT: slli a0, a0, 5
1488
+ ; RV64I-NEXT: slli a1, a1, 7
1489
+ ; RV64I-NEXT: add a0, a0, a1
1490
+ ; RV64I-NEXT: ret
1491
+ ;
1492
+ ; RV64B-LABEL: addshl64_5_7:
1493
+ ; RV64B: # %bb.0:
1494
+ ; RV64B-NEXT: slli a0, a0, 5
1495
+ ; RV64B-NEXT: slli a1, a1, 7
1496
+ ; RV64B-NEXT: add a0, a0, a1
1497
+ ; RV64B-NEXT: ret
1498
+ ;
1499
+ ; RV64ZBA-LABEL: addshl64_5_7:
1500
+ ; RV64ZBA: # %bb.0:
1501
+ ; RV64ZBA-NEXT: slli a0, a0, 5
1502
+ ; RV64ZBA-NEXT: slli a1, a1, 7
1503
+ ; RV64ZBA-NEXT: add a0, a0, a1
1504
+ ; RV64ZBA-NEXT: ret
1505
+ %c = shl i64 %a , 5
1506
+ %d = shl i64 %b , 7
1507
+ %e = add i64 %c , %d
1508
+ ret i64 %e
1509
+ }
1510
+
1511
+ define signext i32 @addshl32_5_8 (i32 signext %a , i32 signext %b ) {
1512
+ ; RV64I-LABEL: addshl32_5_8:
1513
+ ; RV64I: # %bb.0:
1514
+ ; RV64I-NEXT: slliw a0, a0, 5
1515
+ ; RV64I-NEXT: slliw a1, a1, 8
1516
+ ; RV64I-NEXT: addw a0, a0, a1
1517
+ ; RV64I-NEXT: ret
1518
+ ;
1519
+ ; RV64B-LABEL: addshl32_5_8:
1520
+ ; RV64B: # %bb.0:
1521
+ ; RV64B-NEXT: slliw a0, a0, 5
1522
+ ; RV64B-NEXT: slliw a1, a1, 8
1523
+ ; RV64B-NEXT: addw a0, a0, a1
1524
+ ; RV64B-NEXT: ret
1525
+ ;
1526
+ ; RV64ZBA-LABEL: addshl32_5_8:
1527
+ ; RV64ZBA: # %bb.0:
1528
+ ; RV64ZBA-NEXT: slliw a0, a0, 5
1529
+ ; RV64ZBA-NEXT: slliw a1, a1, 8
1530
+ ; RV64ZBA-NEXT: addw a0, a0, a1
1531
+ ; RV64ZBA-NEXT: ret
1532
+ %c = shl i32 %a , 5
1533
+ %d = shl i32 %b , 8
1534
+ %e = add i32 %c , %d
1535
+ ret i32 %e
1536
+ }
1537
+
1538
+ define i64 @addshl64_5_8 (i64 %a , i64 %b ) {
1539
+ ; RV64I-LABEL: addshl64_5_8:
1540
+ ; RV64I: # %bb.0:
1541
+ ; RV64I-NEXT: slli a0, a0, 5
1542
+ ; RV64I-NEXT: slli a1, a1, 8
1543
+ ; RV64I-NEXT: add a0, a0, a1
1544
+ ; RV64I-NEXT: ret
1545
+ ;
1546
+ ; RV64B-LABEL: addshl64_5_8:
1547
+ ; RV64B: # %bb.0:
1548
+ ; RV64B-NEXT: slli a0, a0, 5
1549
+ ; RV64B-NEXT: slli a1, a1, 8
1550
+ ; RV64B-NEXT: add a0, a0, a1
1551
+ ; RV64B-NEXT: ret
1552
+ ;
1553
+ ; RV64ZBA-LABEL: addshl64_5_8:
1554
+ ; RV64ZBA: # %bb.0:
1555
+ ; RV64ZBA-NEXT: slli a0, a0, 5
1556
+ ; RV64ZBA-NEXT: slli a1, a1, 8
1557
+ ; RV64ZBA-NEXT: add a0, a0, a1
1558
+ ; RV64ZBA-NEXT: ret
1559
+ %c = shl i64 %a , 5
1560
+ %d = shl i64 %b , 8
1561
+ %e = add i64 %c , %d
1562
+ ret i64 %e
1563
+ }
0 commit comments