[llvm] [Codegen][LegalizeIntegerTypes] Improve shift through stack (PR #96151)
Matt Arsenault via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 2 07:05:53 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=*/DAG.getDataLayout().getAllocaAddrSpace(),
+ /*Alignment=*/Align(LoadStoreVT.getStoreSize()),
----------------
arsenm wrote:
If you're going to use the natural alignment, it doesn't make sense to call TLI.allowsMisalignedMemoryAccesses in the first place. You would need to pull this from the value you are going to create the actual load/store with
https://github.com/llvm/llvm-project/pull/96151
More information about the llvm-commits
mailing list