[llvm] [SelectionDAG] Use unaligned store/load to move AVX registers onto stack for `insertelement` (PR #82130)
Manish Kausik H via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 16 11:00:19 PDT 2024
================
@@ -1485,21 +1484,24 @@ SDValue SelectionDAGLegalize::ExpandInsertToVectorThroughStack(SDValue Op) {
TLI.getVectorSubVecPointer(DAG, StackPtr, VecVT, PartVT, Idx);
// Store the subvector.
- Ch = DAG.getStore(
- Ch, dl, Part, SubStackPtr,
- MachinePointerInfo::getUnknownStack(DAG.getMachineFunction()));
+ Ch = DAG.getStore(Ch, dl, Part, SubStackPtr, AlignedMMO);
} else {
SDValue SubStackPtr =
TLI.getVectorElementPointer(DAG, StackPtr, VecVT, Idx);
// Store the scalar value.
- Ch = DAG.getTruncStore(
- Ch, dl, Part, SubStackPtr,
- MachinePointerInfo::getUnknownStack(DAG.getMachineFunction()),
- VecVT.getVectorElementType());
+ Ch = DAG.getTruncStore(Ch, dl, Part, SubStackPtr,
+ VecVT.getVectorElementType(), AlignedMMO);
}
+ Align ElementAlignment =
+ std::min(cast<StoreSDNode>(Ch)->getAlign(),
+ DAG.getSubtarget().getFrameLowering()->getStackAlign());
+
// Finally, load the updated vector.
+ int FI = cast<FrameIndexSDNode>(StackPtr.getNode())->getIndex();
+ MachinePointerInfo PtrInfo =
+ MachinePointerInfo::getFixedStack(DAG.getMachineFunction(), FI);
return DAG.getLoad(Op.getValueType(), dl, Ch, StackPtr, PtrInfo);
----------------
Nirhar wrote:
Thanks for the catch! Forgot it during the last edit
https://github.com/llvm/llvm-project/pull/82130
More information about the llvm-commits
mailing list