@@ -5488,14 +5488,14 @@ static bool canConvert2Copy(unsigned Opc) {
5488
5488
switch (Opc) {
5489
5489
default :
5490
5490
return false ;
5491
- case X86:: ADD64ri32:
5492
- case X86:: SUB64ri32:
5493
- case X86:: OR64ri32:
5494
- case X86:: XOR64ri32:
5495
- case X86:: ADD32ri:
5496
- case X86:: SUB32ri:
5497
- case X86:: OR32ri:
5498
- case X86:: XOR32ri:
5491
+ CASE_ND ( ADD64ri32)
5492
+ CASE_ND ( SUB64ri32)
5493
+ CASE_ND ( OR64ri32)
5494
+ CASE_ND ( XOR64ri32)
5495
+ CASE_ND ( ADD32ri)
5496
+ CASE_ND ( SUB32ri)
5497
+ CASE_ND ( OR32ri)
5498
+ CASE_ND ( XOR32ri)
5499
5499
return true ;
5500
5500
}
5501
5501
}
@@ -5508,16 +5508,16 @@ static unsigned convertALUrr2ALUri(unsigned Opc) {
5508
5508
return 0 ;
5509
5509
#define FROM_TO (FROM, TO ) \
5510
5510
case X86::FROM: \
5511
- return X86::TO;
5511
+ return X86::TO; \
5512
+ case X86::FROM##_ND: \
5513
+ return X86::TO##_ND;
5512
5514
FROM_TO (ADD64rr, ADD64ri32)
5513
5515
FROM_TO (ADC64rr, ADC64ri32)
5514
5516
FROM_TO (SUB64rr, SUB64ri32)
5515
5517
FROM_TO (SBB64rr, SBB64ri32)
5516
5518
FROM_TO (AND64rr, AND64ri32)
5517
5519
FROM_TO (OR64rr, OR64ri32)
5518
5520
FROM_TO (XOR64rr, XOR64ri32)
5519
- FROM_TO (TEST64rr, TEST64ri32)
5520
- FROM_TO (CMP64rr, CMP64ri32)
5521
5521
FROM_TO (SHR64rCL, SHR64ri)
5522
5522
FROM_TO (SHL64rCL, SHL64ri)
5523
5523
FROM_TO (SAR64rCL, SAR64ri)
@@ -5532,15 +5532,21 @@ static unsigned convertALUrr2ALUri(unsigned Opc) {
5532
5532
FROM_TO (AND32rr, AND32ri)
5533
5533
FROM_TO (OR32rr, OR32ri)
5534
5534
FROM_TO (XOR32rr, XOR32ri)
5535
- FROM_TO (TEST32rr, TEST32ri)
5536
- FROM_TO (CMP32rr, CMP32ri)
5537
5535
FROM_TO (SHR32rCL, SHR32ri)
5538
5536
FROM_TO (SHL32rCL, SHL32ri)
5539
5537
FROM_TO (SAR32rCL, SAR32ri)
5540
5538
FROM_TO (ROL32rCL, ROL32ri)
5541
5539
FROM_TO (ROR32rCL, ROR32ri)
5542
5540
FROM_TO (RCL32rCL, RCL32ri)
5543
5541
FROM_TO (RCR32rCL, RCR32ri)
5542
+ #undef FROM_TO
5543
+ #define FROM_TO (FROM, TO ) \
5544
+ case X86::FROM: \
5545
+ return X86::TO;
5546
+ FROM_TO (TEST64rr, TEST64ri32)
5547
+ FROM_TO (CMP64rr, CMP64ri32)
5548
+ FROM_TO (TEST32rr, TEST32ri)
5549
+ FROM_TO (CMP32rr, CMP32ri)
5544
5550
#undef FROM_TO
5545
5551
}
5546
5552
}
@@ -5634,7 +5640,9 @@ bool X86InstrInfo::foldImmediateImpl(MachineInstr &UseMI, MachineInstr *DefMI,
5634
5640
5635
5641
// For SUB instructions the immediate can only be the second source operand.
5636
5642
if ((NewOpc == X86::SUB64ri32 || NewOpc == X86::SUB32ri ||
5637
- NewOpc == X86::SBB64ri32 || NewOpc == X86::SBB32ri) &&
5643
+ NewOpc == X86::SBB64ri32 || NewOpc == X86::SBB32ri ||
5644
+ NewOpc == X86::SUB64ri32_ND || NewOpc == X86::SUB32ri_ND ||
5645
+ NewOpc == X86::SBB64ri32_ND || NewOpc == X86::SBB32ri_ND) &&
5638
5646
UseMI.findRegisterUseOperandIdx (Reg) != 2 )
5639
5647
return false ;
5640
5648
// For CMP instructions the immediate can only be at index 1.
0 commit comments