Skip to content

Commit b6b90ec

Browse files
committed
Use GInsertVectorElement and align stack vectors to 16
1 parent 7b573c1 commit b6b90ec

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -486,24 +486,24 @@ bool matchNonConstInsert(MachineInstr &MI, MachineRegisterInfo &MRI) {
486486

487487
void applyNonConstInsert(MachineInstr &MI, MachineRegisterInfo &MRI,
488488
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);
492491

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());
497496

498497
// Create a stack slot and store the vector into it
499498
MachineFunction &MF = Builder.getMF();
499+
Align Alignment(std::min<uint64_t>(VecTy.getSizeInBytes().getKnownMinValue(), 16));
500500
int FrameIdx = MF.getFrameInfo().CreateStackObject(VecTy.getSizeInBytes(),
501-
Align(8), false);
501+
Alignment, false);
502502
LLT FramePtrTy = LLT::pointer(0, 64);
503503
MachinePointerInfo PtrInfo = MachinePointerInfo::getFixedStack(MF, FrameIdx);
504504
auto StackTemp = Builder.buildFrameIndex(FramePtrTy, FrameIdx);
505505

506-
Builder.buildStore(MI.getOperand(1), StackTemp, PtrInfo, Align(8));
506+
Builder.buildStore(Insert.getOperand(1), StackTemp, PtrInfo, Align(8));
507507

508508
// Get the pointer to the element, and be sure not to hit undefined behavior
509509
// if the index is out of bounds.
@@ -518,10 +518,10 @@ void applyNonConstInsert(MachineInstr &MI, MachineRegisterInfo &MRI,
518518
.getReg(0);
519519

520520
// Write the inserted element
521-
Builder.buildStore(MI.getOperand(2).getReg(), EltPtr, PtrInfo, Align(1));
521+
Builder.buildStore(Insert.getElementReg(), EltPtr, PtrInfo, Align(1));
522522
// 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();
525525
}
526526

527527
/// Match a G_SHUFFLE_VECTOR with a mask which corresponds to a

0 commit comments

Comments
 (0)