@@ -486,24 +486,24 @@ bool matchNonConstInsert(MachineInstr &MI, MachineRegisterInfo &MRI) {
486
486
487
487
void applyNonConstInsert (MachineInstr &MI, MachineRegisterInfo &MRI,
488
488
MachineIRBuilder &Builder) {
489
- assert (MI.getOpcode () == TargetOpcode::G_INSERT_VECTOR_ELT);
490
- bool InsertVal = true ;
491
- Builder.setInstrAndDebugLoc (MI);
489
+ auto &Insert = cast<GInsertVectorElement>(MI);
490
+ Builder.setInstrAndDebugLoc (Insert);
492
491
493
- Register Offset = MI. getOperand ( 3 ). getReg ();
494
- LLT VecTy = MRI.getType (MI. getOperand ( 0 ). getReg ());
495
- LLT EltTy = MRI.getType (MI. getOperand ( 2 ). getReg ());
496
- LLT IdxTy = MRI.getType (MI. getOperand ( 3 ). getReg ());
492
+ Register Offset = Insert. getIndexReg ();
493
+ LLT VecTy = MRI.getType (Insert. getReg (0 ));
494
+ LLT EltTy = MRI.getType (Insert. getElementReg ());
495
+ LLT IdxTy = MRI.getType (Insert. getIndexReg ());
497
496
498
497
// Create a stack slot and store the vector into it
499
498
MachineFunction &MF = Builder.getMF ();
499
+ Align Alignment (std::min<uint64_t >(VecTy.getSizeInBytes ().getKnownMinValue (), 16 ));
500
500
int FrameIdx = MF.getFrameInfo ().CreateStackObject (VecTy.getSizeInBytes (),
501
- Align ( 8 ) , false );
501
+ Alignment , false );
502
502
LLT FramePtrTy = LLT::pointer (0 , 64 );
503
503
MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack (MF, FrameIdx);
504
504
auto StackTemp = Builder.buildFrameIndex (FramePtrTy, FrameIdx);
505
505
506
- Builder.buildStore (MI .getOperand (1 ), StackTemp, PtrInfo, Align (8 ));
506
+ Builder.buildStore (Insert .getOperand (1 ), StackTemp, PtrInfo, Align (8 ));
507
507
508
508
// Get the pointer to the element, and be sure not to hit undefined behavior
509
509
// if the index is out of bounds.
@@ -518,10 +518,10 @@ void applyNonConstInsert(MachineInstr &MI, MachineRegisterInfo &MRI,
518
518
.getReg (0 );
519
519
520
520
// Write the inserted element
521
- Builder.buildStore (MI. getOperand ( 2 ). getReg (), EltPtr, PtrInfo, Align (1 ));
521
+ Builder.buildStore (Insert. getElementReg (), EltPtr, PtrInfo, Align (1 ));
522
522
// Reload the whole vector.
523
- Builder.buildLoad (MI. getOperand ( 0 ). getReg (), StackTemp, PtrInfo, Align (8 ));
524
- MI .eraseFromParent ();
523
+ Builder.buildLoad (Insert. getReg (0 ), StackTemp, PtrInfo, Align (8 ));
524
+ Insert .eraseFromParent ();
525
525
}
526
526
527
527
// / Match a G_SHUFFLE_VECTOR with a mask which corresponds to a
0 commit comments