@@ -7358,12 +7358,12 @@ static bool getLoadPatterns(MachineInstr &Root,
7358
7358
return false ;
7359
7359
7360
7360
// Verify that the subreg to reg loads an i32 into the first lane.
7361
- auto Lane0Load = CurrInstr->getOperand (2 ).getReg ();
7362
- if (TRI->getRegSizeInBits (Lane0Load , MRI) != 32 )
7361
+ auto Lane0LoadReg = CurrInstr->getOperand (2 ).getReg ();
7362
+ if (TRI->getRegSizeInBits (Lane0LoadReg , MRI) != 32 )
7363
7363
return false ;
7364
7364
7365
7365
// Verify that it also has a single non debug use.
7366
- if (!MRI.hasOneNonDBGUse (Lane0Load ))
7366
+ if (!MRI.hasOneNonDBGUse (Lane0LoadReg ))
7367
7367
return false ;
7368
7368
7369
7369
Patterns.push_back (AArch64MachineCombinerPattern::SPLIT_LD);
@@ -8747,20 +8747,9 @@ void AArch64InstrInfo::genAlternativeCodeSequence(
8747
8747
MRI.getUniqueVRegDef (Lane2Load->getOperand (1 ).getReg ());
8748
8748
MachineInstr *SubregToReg =
8749
8749
MRI.getUniqueVRegDef (Lane1Load->getOperand (1 ).getReg ());
8750
- MachineInstr *Lane0Load =
8751
- MRI.getUniqueVRegDef (SubregToReg->getOperand (2 ).getReg ());
8752
8750
const TargetRegisterClass *FPR128RegClass =
8753
8751
MRI.getRegClass (Root.getOperand (0 ).getReg ());
8754
8752
8755
- // Some helpful lambdas to increase code reuse.
8756
- auto CreateImplicitDef = [&]() {
8757
- auto VirtReg = MRI.createVirtualRegister (FPR128RegClass);
8758
- auto DefInstr = BuildMI (MF, MIMetadata (Root),
8759
- TII->get (TargetOpcode::IMPLICIT_DEF), VirtReg);
8760
- InstrIdxForVirtReg.insert (std::make_pair (VirtReg, InsInstrs.size ()));
8761
- InsInstrs.push_back (DefInstr);
8762
- return VirtReg;
8763
- };
8764
8753
auto LoadLaneToRegister = [&](MachineInstr *OriginalInstr,
8765
8754
Register SrcRegister, unsigned Lane,
8766
8755
Register OffsetRegister) {
@@ -8775,25 +8764,26 @@ void AArch64InstrInfo::genAlternativeCodeSequence(
8775
8764
InsInstrs.push_back (LoadIndexIntoRegister);
8776
8765
return NewRegister;
8777
8766
};
8778
- // To rewrite the pattern, we first need define new registers to
8779
- // load our results into.
8780
- Register ImplicitDefForReg0 = CreateImplicitDef ();
8781
- Register ImplicitDefForReg1 = CreateImplicitDef ();
8782
8767
8783
- // Load index 0 into register 0 lane 0.
8784
- Register Index0LoadReg = LoadLaneToRegister (
8785
- Lane0Load, ImplicitDefForReg0, 0 , Lane0Load->getOperand (2 ).getReg ());
8786
- DelInstrs.push_back (Lane0Load);
8787
- DelInstrs.push_back (SubregToReg);
8768
+ // To rewrite the pattern, we first need define a new register to
8769
+ // load our results into.
8770
+ auto ImplicitDefForReg1 = MRI.createVirtualRegister (FPR128RegClass);
8771
+ auto DefInstr =
8772
+ BuildMI (MF, MIMetadata (Root), TII->get (TargetOpcode::IMPLICIT_DEF),
8773
+ ImplicitDefForReg1);
8774
+ InstrIdxForVirtReg.insert (
8775
+ std::make_pair (ImplicitDefForReg1, InsInstrs.size ()));
8776
+ InsInstrs.push_back (DefInstr);
8788
8777
8789
8778
// Load index 1 into register 1 lane 0.
8790
8779
Register Index1LoadReg = LoadLaneToRegister (
8791
8780
Lane1Load, ImplicitDefForReg1, 0 , Lane1Load->getOperand (3 ).getReg ());
8792
8781
DelInstrs.push_back (Lane1Load);
8793
8782
8794
8783
// Load index 2 into register 0 lane 1.
8795
- auto Index2LoadReg = LoadLaneToRegister (Lane2Load, Index0LoadReg, 1 ,
8796
- Lane2Load->getOperand (3 ).getReg ());
8784
+ auto Index2LoadReg =
8785
+ LoadLaneToRegister (Lane2Load, SubregToReg->getOperand (0 ).getReg (), 1 ,
8786
+ Lane2Load->getOperand (3 ).getReg ());
8797
8787
DelInstrs.push_back (Lane2Load);
8798
8788
8799
8789
// Load index 3 into register 1 lane 1.
0 commit comments