@@ -1283,11 +1283,14 @@ MachineInstr *X86InstrInfo::convertToThreeAddressWithLEA(unsigned MIOpc,
1283
1283
1284
1284
MachineInstrBuilder MIB =
1285
1285
BuildMI (MBB, MBBI, MI.getDebugLoc (), get (Opcode), OutRegLEA);
1286
+ #define CASE_NF (OP ) \
1287
+ case X86::OP: \
1288
+ case X86::OP##_NF:
1286
1289
switch (MIOpc) {
1287
1290
default :
1288
1291
llvm_unreachable (" Unreachable!" );
1289
- case X86:: SHL8ri:
1290
- case X86:: SHL16ri: {
1292
+ CASE_NF ( SHL8ri)
1293
+ CASE_NF ( SHL16ri) {
1291
1294
unsigned ShAmt = MI.getOperand (2 ).getImm ();
1292
1295
MIB.addReg (0 )
1293
1296
.addImm (1LL << ShAmt)
@@ -1296,23 +1299,23 @@ MachineInstr *X86InstrInfo::convertToThreeAddressWithLEA(unsigned MIOpc,
1296
1299
.addReg (0 );
1297
1300
break ;
1298
1301
}
1299
- case X86:: INC8r:
1300
- case X86:: INC16r:
1302
+ CASE_NF ( INC8r)
1303
+ CASE_NF ( INC16r)
1301
1304
addRegOffset (MIB, InRegLEA, true , 1 );
1302
1305
break ;
1303
- case X86:: DEC8r:
1304
- case X86:: DEC16r:
1306
+ CASE_NF ( DEC8r)
1307
+ CASE_NF ( DEC16r)
1305
1308
addRegOffset (MIB, InRegLEA, true , -1 );
1306
1309
break ;
1307
- case X86::ADD8ri:
1310
+ CASE_NF (ADD8ri)
1311
+ CASE_NF (ADD16ri)
1308
1312
case X86::ADD8ri_DB:
1309
- case X86::ADD16ri:
1310
1313
case X86::ADD16ri_DB:
1311
1314
addRegOffset (MIB, InRegLEA, true , MI.getOperand (2 ).getImm ());
1312
1315
break ;
1313
- case X86::ADD8rr:
1316
+ CASE_NF (ADD8rr)
1317
+ CASE_NF (ADD16rr)
1314
1318
case X86::ADD8rr_DB:
1315
- case X86::ADD16rr:
1316
1319
case X86::ADD16rr_DB: {
1317
1320
Src2 = MI.getOperand (2 ).getReg ();
1318
1321
Src2SubReg = MI.getOperand (2 ).getSubReg ();
@@ -1449,7 +1452,7 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
1449
1452
switch (MIOpc) {
1450
1453
default :
1451
1454
llvm_unreachable (" Unreachable!" );
1452
- case X86:: SHL64ri: {
1455
+ CASE_NF ( SHL64ri) {
1453
1456
assert (MI.getNumOperands () >= 3 && " Unknown shift instruction!" );
1454
1457
unsigned ShAmt = getTruncatedShiftCount (MI, 2 );
1455
1458
if (!isTruncatedShiftCountForLEA (ShAmt))
@@ -1469,7 +1472,7 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
1469
1472
.addReg (0 );
1470
1473
break ;
1471
1474
}
1472
- case X86:: SHL32ri: {
1475
+ CASE_NF ( SHL32ri) {
1473
1476
assert (MI.getNumOperands () >= 3 && " Unknown shift instruction!" );
1474
1477
unsigned ShAmt = getTruncatedShiftCount (MI, 2 );
1475
1478
if (!isTruncatedShiftCountForLEA (ShAmt))
@@ -1501,20 +1504,20 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
1501
1504
LV->getVarInfo (SrcReg).Kills .push_back (NewMI);
1502
1505
break ;
1503
1506
}
1504
- case X86:: SHL8ri:
1507
+ CASE_NF ( SHL8ri)
1505
1508
Is8BitOp = true ;
1506
1509
[[fallthrough]];
1507
- case X86:: SHL16ri: {
1510
+ CASE_NF ( SHL16ri) {
1508
1511
assert (MI.getNumOperands () >= 3 && " Unknown shift instruction!" );
1509
1512
unsigned ShAmt = getTruncatedShiftCount (MI, 2 );
1510
1513
if (!isTruncatedShiftCountForLEA (ShAmt))
1511
1514
return nullptr ;
1512
1515
return convertToThreeAddressWithLEA (MIOpc, MI, LV, LIS, Is8BitOp);
1513
1516
}
1514
- case X86:: INC64r:
1515
- case X86:: INC32r: {
1517
+ CASE_NF ( INC64r)
1518
+ CASE_NF ( INC32r) {
1516
1519
assert (MI.getNumOperands () >= 2 && " Unknown inc instruction!" );
1517
- unsigned Opc = MIOpc == X86::INC64r
1520
+ unsigned Opc = ( MIOpc == X86::INC64r || MIOpc == X86::INC64r_NF)
1518
1521
? X86::LEA64r
1519
1522
: (Is64Bit ? X86::LEA64_32r : X86::LEA32r);
1520
1523
bool isKill;
@@ -1536,10 +1539,10 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
1536
1539
LV->getVarInfo (SrcReg).Kills .push_back (NewMI);
1537
1540
break ;
1538
1541
}
1539
- case X86:: DEC64r:
1540
- case X86:: DEC32r: {
1542
+ CASE_NF ( DEC64r)
1543
+ CASE_NF ( DEC32r) {
1541
1544
assert (MI.getNumOperands () >= 2 && " Unknown dec instruction!" );
1542
- unsigned Opc = MIOpc == X86::DEC64r
1545
+ unsigned Opc = ( MIOpc == X86::DEC64r || MIOpc == X86::DEC64r_NF)
1543
1546
? X86::LEA64r
1544
1547
: (Is64Bit ? X86::LEA64_32r : X86::LEA32r);
1545
1548
@@ -1562,20 +1565,21 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
1562
1565
LV->getVarInfo (SrcReg).Kills .push_back (NewMI);
1563
1566
break ;
1564
1567
}
1565
- case X86:: DEC8r:
1566
- case X86:: INC8r:
1568
+ CASE_NF ( DEC8r)
1569
+ CASE_NF ( INC8r)
1567
1570
Is8BitOp = true ;
1568
1571
[[fallthrough]];
1569
- case X86:: DEC16r:
1570
- case X86:: INC16r:
1572
+ CASE_NF ( DEC16r)
1573
+ CASE_NF ( INC16r)
1571
1574
return convertToThreeAddressWithLEA (MIOpc, MI, LV, LIS, Is8BitOp);
1572
- case X86::ADD64rr:
1575
+ CASE_NF (ADD64rr)
1576
+ CASE_NF (ADD32rr)
1573
1577
case X86::ADD64rr_DB:
1574
- case X86::ADD32rr:
1575
1578
case X86::ADD32rr_DB: {
1576
1579
assert (MI.getNumOperands () >= 3 && " Unknown add instruction!" );
1577
1580
unsigned Opc;
1578
- if (MIOpc == X86::ADD64rr || MIOpc == X86::ADD64rr_DB)
1581
+ if (MIOpc == X86::ADD64rr || MIOpc == X86::ADD64rr_NF ||
1582
+ MIOpc == X86::ADD64rr_DB)
1579
1583
Opc = X86::LEA64r;
1580
1584
else
1581
1585
Opc = Is64Bit ? X86::LEA64_32r : X86::LEA32r;
@@ -1620,21 +1624,21 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
1620
1624
NumRegOperands = 3 ;
1621
1625
break ;
1622
1626
}
1623
- case X86:: ADD8rr:
1627
+ CASE_NF ( ADD8rr)
1624
1628
case X86::ADD8rr_DB:
1625
1629
Is8BitOp = true ;
1626
1630
[[fallthrough]];
1627
- case X86:: ADD16rr:
1631
+ CASE_NF ( ADD16rr)
1628
1632
case X86::ADD16rr_DB:
1629
1633
return convertToThreeAddressWithLEA (MIOpc, MI, LV, LIS, Is8BitOp);
1630
- case X86:: ADD64ri32:
1634
+ CASE_NF ( ADD64ri32)
1631
1635
case X86::ADD64ri32_DB:
1632
1636
assert (MI.getNumOperands () >= 3 && " Unknown add instruction!" );
1633
1637
NewMI = addOffset (
1634
1638
BuildMI (MF, MI.getDebugLoc (), get (X86::LEA64r)).add (Dest).add (Src),
1635
1639
MI.getOperand (2 ));
1636
1640
break ;
1637
- case X86:: ADD32ri:
1641
+ CASE_NF ( ADD32ri)
1638
1642
case X86::ADD32ri_DB: {
1639
1643
assert (MI.getNumOperands () >= 3 && " Unknown add instruction!" );
1640
1644
unsigned Opc = Is64Bit ? X86::LEA64_32r : X86::LEA32r;
@@ -1659,18 +1663,18 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
1659
1663
LV->getVarInfo (SrcReg).Kills .push_back (NewMI);
1660
1664
break ;
1661
1665
}
1662
- case X86:: ADD8ri:
1666
+ CASE_NF ( ADD8ri)
1663
1667
case X86::ADD8ri_DB:
1664
1668
Is8BitOp = true ;
1665
1669
[[fallthrough]];
1666
- case X86:: ADD16ri:
1670
+ CASE_NF ( ADD16ri)
1667
1671
case X86::ADD16ri_DB:
1668
1672
return convertToThreeAddressWithLEA (MIOpc, MI, LV, LIS, Is8BitOp);
1669
- case X86:: SUB8ri:
1670
- case X86:: SUB16ri:
1673
+ CASE_NF ( SUB8ri)
1674
+ CASE_NF ( SUB16ri)
1671
1675
// / FIXME: Support these similar to ADD8ri/ADD16ri*.
1672
1676
return nullptr ;
1673
- case X86:: SUB32ri: {
1677
+ CASE_NF ( SUB32ri) {
1674
1678
if (!MI.getOperand (2 ).isImm ())
1675
1679
return nullptr ;
1676
1680
int64_t Imm = MI.getOperand (2 ).getImm ();
@@ -1701,7 +1705,7 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
1701
1705
break ;
1702
1706
}
1703
1707
1704
- case X86:: SUB64ri32: {
1708
+ CASE_NF ( SUB64ri32) {
1705
1709
if (!MI.getOperand (2 ).isImm ())
1706
1710
return nullptr ;
1707
1711
int64_t Imm = MI.getOperand (2 ).getImm ();
@@ -2034,6 +2038,7 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
2034
2038
break ;
2035
2039
}
2036
2040
}
2041
+ #undef CASE_NF
2037
2042
2038
2043
if (!NewMI)
2039
2044
return nullptr ;
0 commit comments