@@ -1283,11 +1283,14 @@ MachineInstr *X86InstrInfo::convertToThreeAddressWithLEA(unsigned MIOpc,
12831283
12841284 MachineInstrBuilder MIB =
12851285 BuildMI (MBB, MBBI, MI.getDebugLoc (), get (Opcode), OutRegLEA);
1286+ #define CASE_NF (OP ) \
1287+ case X86::OP: \
1288+ case X86::OP##_NF:
12861289 switch (MIOpc) {
12871290 default :
12881291 llvm_unreachable (" Unreachable!" );
1289- case X86:: SHL8ri:
1290- case X86:: SHL16ri: {
1292+ CASE_NF ( SHL8ri)
1293+ CASE_NF ( SHL16ri) {
12911294 unsigned ShAmt = MI.getOperand (2 ).getImm ();
12921295 MIB.addReg (0 )
12931296 .addImm (1LL << ShAmt)
@@ -1296,23 +1299,23 @@ MachineInstr *X86InstrInfo::convertToThreeAddressWithLEA(unsigned MIOpc,
12961299 .addReg (0 );
12971300 break ;
12981301 }
1299- case X86:: INC8r:
1300- case X86:: INC16r:
1302+ CASE_NF ( INC8r)
1303+ CASE_NF ( INC16r)
13011304 addRegOffset (MIB, InRegLEA, true , 1 );
13021305 break ;
1303- case X86:: DEC8r:
1304- case X86:: DEC16r:
1306+ CASE_NF ( DEC8r)
1307+ CASE_NF ( DEC16r)
13051308 addRegOffset (MIB, InRegLEA, true , -1 );
13061309 break ;
1307- case X86::ADD8ri:
1310+ CASE_NF (ADD8ri)
1311+ CASE_NF (ADD16ri)
13081312 case X86::ADD8ri_DB:
1309- case X86::ADD16ri:
13101313 case X86::ADD16ri_DB:
13111314 addRegOffset (MIB, InRegLEA, true , MI.getOperand (2 ).getImm ());
13121315 break ;
1313- case X86::ADD8rr:
1316+ CASE_NF (ADD8rr)
1317+ CASE_NF (ADD16rr)
13141318 case X86::ADD8rr_DB:
1315- case X86::ADD16rr:
13161319 case X86::ADD16rr_DB: {
13171320 Src2 = MI.getOperand (2 ).getReg ();
13181321 Src2SubReg = MI.getOperand (2 ).getSubReg ();
@@ -1449,7 +1452,7 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
14491452 switch (MIOpc) {
14501453 default :
14511454 llvm_unreachable (" Unreachable!" );
1452- case X86:: SHL64ri: {
1455+ CASE_NF ( SHL64ri) {
14531456 assert (MI.getNumOperands () >= 3 && " Unknown shift instruction!" );
14541457 unsigned ShAmt = getTruncatedShiftCount (MI, 2 );
14551458 if (!isTruncatedShiftCountForLEA (ShAmt))
@@ -1469,7 +1472,7 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
14691472 .addReg (0 );
14701473 break ;
14711474 }
1472- case X86:: SHL32ri: {
1475+ CASE_NF ( SHL32ri) {
14731476 assert (MI.getNumOperands () >= 3 && " Unknown shift instruction!" );
14741477 unsigned ShAmt = getTruncatedShiftCount (MI, 2 );
14751478 if (!isTruncatedShiftCountForLEA (ShAmt))
@@ -1501,20 +1504,20 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
15011504 LV->getVarInfo (SrcReg).Kills .push_back (NewMI);
15021505 break ;
15031506 }
1504- case X86:: SHL8ri:
1507+ CASE_NF ( SHL8ri)
15051508 Is8BitOp = true ;
15061509 [[fallthrough]];
1507- case X86:: SHL16ri: {
1510+ CASE_NF ( SHL16ri) {
15081511 assert (MI.getNumOperands () >= 3 && " Unknown shift instruction!" );
15091512 unsigned ShAmt = getTruncatedShiftCount (MI, 2 );
15101513 if (!isTruncatedShiftCountForLEA (ShAmt))
15111514 return nullptr ;
15121515 return convertToThreeAddressWithLEA (MIOpc, MI, LV, LIS, Is8BitOp);
15131516 }
1514- case X86:: INC64r:
1515- case X86:: INC32r: {
1517+ CASE_NF ( INC64r)
1518+ CASE_NF ( INC32r) {
15161519 assert (MI.getNumOperands () >= 2 && " Unknown inc instruction!" );
1517- unsigned Opc = MIOpc == X86::INC64r
1520+ unsigned Opc = ( MIOpc == X86::INC64r || MIOpc == X86::INC64r_NF)
15181521 ? X86::LEA64r
15191522 : (Is64Bit ? X86::LEA64_32r : X86::LEA32r);
15201523 bool isKill;
@@ -1536,10 +1539,10 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
15361539 LV->getVarInfo (SrcReg).Kills .push_back (NewMI);
15371540 break ;
15381541 }
1539- case X86:: DEC64r:
1540- case X86:: DEC32r: {
1542+ CASE_NF ( DEC64r)
1543+ CASE_NF ( DEC32r) {
15411544 assert (MI.getNumOperands () >= 2 && " Unknown dec instruction!" );
1542- unsigned Opc = MIOpc == X86::DEC64r
1545+ unsigned Opc = ( MIOpc == X86::DEC64r || MIOpc == X86::DEC64r_NF)
15431546 ? X86::LEA64r
15441547 : (Is64Bit ? X86::LEA64_32r : X86::LEA32r);
15451548
@@ -1562,20 +1565,21 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
15621565 LV->getVarInfo (SrcReg).Kills .push_back (NewMI);
15631566 break ;
15641567 }
1565- case X86:: DEC8r:
1566- case X86:: INC8r:
1568+ CASE_NF ( DEC8r)
1569+ CASE_NF ( INC8r)
15671570 Is8BitOp = true ;
15681571 [[fallthrough]];
1569- case X86:: DEC16r:
1570- case X86:: INC16r:
1572+ CASE_NF ( DEC16r)
1573+ CASE_NF ( INC16r)
15711574 return convertToThreeAddressWithLEA (MIOpc, MI, LV, LIS, Is8BitOp);
1572- case X86::ADD64rr:
1575+ CASE_NF (ADD64rr)
1576+ CASE_NF (ADD32rr)
15731577 case X86::ADD64rr_DB:
1574- case X86::ADD32rr:
15751578 case X86::ADD32rr_DB: {
15761579 assert (MI.getNumOperands () >= 3 && " Unknown add instruction!" );
15771580 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)
15791583 Opc = X86::LEA64r;
15801584 else
15811585 Opc = Is64Bit ? X86::LEA64_32r : X86::LEA32r;
@@ -1620,21 +1624,21 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
16201624 NumRegOperands = 3 ;
16211625 break ;
16221626 }
1623- case X86:: ADD8rr:
1627+ CASE_NF ( ADD8rr)
16241628 case X86::ADD8rr_DB:
16251629 Is8BitOp = true ;
16261630 [[fallthrough]];
1627- case X86:: ADD16rr:
1631+ CASE_NF ( ADD16rr)
16281632 case X86::ADD16rr_DB:
16291633 return convertToThreeAddressWithLEA (MIOpc, MI, LV, LIS, Is8BitOp);
1630- case X86:: ADD64ri32:
1634+ CASE_NF ( ADD64ri32)
16311635 case X86::ADD64ri32_DB:
16321636 assert (MI.getNumOperands () >= 3 && " Unknown add instruction!" );
16331637 NewMI = addOffset (
16341638 BuildMI (MF, MI.getDebugLoc (), get (X86::LEA64r)).add (Dest).add (Src),
16351639 MI.getOperand (2 ));
16361640 break ;
1637- case X86:: ADD32ri:
1641+ CASE_NF ( ADD32ri)
16381642 case X86::ADD32ri_DB: {
16391643 assert (MI.getNumOperands () >= 3 && " Unknown add instruction!" );
16401644 unsigned Opc = Is64Bit ? X86::LEA64_32r : X86::LEA32r;
@@ -1659,18 +1663,18 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
16591663 LV->getVarInfo (SrcReg).Kills .push_back (NewMI);
16601664 break ;
16611665 }
1662- case X86:: ADD8ri:
1666+ CASE_NF ( ADD8ri)
16631667 case X86::ADD8ri_DB:
16641668 Is8BitOp = true ;
16651669 [[fallthrough]];
1666- case X86:: ADD16ri:
1670+ CASE_NF ( ADD16ri)
16671671 case X86::ADD16ri_DB:
16681672 return convertToThreeAddressWithLEA (MIOpc, MI, LV, LIS, Is8BitOp);
1669- case X86:: SUB8ri:
1670- case X86:: SUB16ri:
1673+ CASE_NF ( SUB8ri)
1674+ CASE_NF ( SUB16ri)
16711675 // / FIXME: Support these similar to ADD8ri/ADD16ri*.
16721676 return nullptr ;
1673- case X86:: SUB32ri: {
1677+ CASE_NF ( SUB32ri) {
16741678 if (!MI.getOperand (2 ).isImm ())
16751679 return nullptr ;
16761680 int64_t Imm = MI.getOperand (2 ).getImm ();
@@ -1701,7 +1705,7 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
17011705 break ;
17021706 }
17031707
1704- case X86:: SUB64ri32: {
1708+ CASE_NF ( SUB64ri32) {
17051709 if (!MI.getOperand (2 ).isImm ())
17061710 return nullptr ;
17071711 int64_t Imm = MI.getOperand (2 ).getImm ();
@@ -2034,6 +2038,7 @@ MachineInstr *X86InstrInfo::convertToThreeAddress(MachineInstr &MI,
20342038 break ;
20352039 }
20362040 }
2041+ #undef CASE_NF
20372042
20382043 if (!NewMI)
20392044 return nullptr ;
0 commit comments