[llvm] [Codegen][LegalizeIntegerTypes] Improve shift through stack (PR #96151)

via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 25 05:56:22 PDT 2024


================
@@ -4530,14 +4530,35 @@ void DAGTypeLegalizer::ExpandIntRes_ShiftThroughStack(SDNode *N, SDValue &Lo,
   SDValue ShAmt = N->getOperand(1);
   EVT ShAmtVT = ShAmt.getValueType();
 
-  // This legalization is optimal when the shift is by a multiple of byte width,
-  //   %x * 8 <-> %x << 3   so 3 low bits should be be known zero.
-  bool ShiftByByteMultiple =
-      DAG.computeKnownBits(ShAmt).countMinTrailingZeros() >= 3;
+  EVT LoadStoreVT = VT;
+  do {
+    LoadStoreVT = TLI.getTypeToTransformTo(*DAG.getContext(), LoadStoreVT);
+  } while (!TLI.isTypeLegal(LoadStoreVT));
+
+  const unsigned KnownTrailingZeros =
+      DAG.computeKnownBits(ShAmt).countMinTrailingZeros();
+
+  const Align LoadStoreAlign = [&]() -> Align {
+    unsigned IsFast = 0;
+    const bool AllowsFastMisalignedMemoryAccesses =
+        TLI.allowsMisalignedMemoryAccesses(
+            LoadStoreVT, /*AddrSpace*/ 0, /*Alignment*/ Align(1),
----------------
futog wrote:

also added `MachineMemOperand::MOLoad | MachineMemOperand::MOStore` for Flags

https://github.com/llvm/llvm-project/pull/96151


More information about the llvm-commits mailing list