[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