[llvm] [Codegen][LegalizeIntegerTypes] Improve shift through stack (PR #96151)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Jul 2 07:43:39 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()),
----------------
futog wrote:
Sorry but I don't get it... This function is for checking if I should use natural alignment or not. If the target supports fast unaligned memory access and the shift is a multiple of CHAR_BIT, I don't use natural alignment.
You mean that I should drop this approach and always use `DAG.getReducedAlign(LoadStoreVT, /*UseABI=*/false);`?
https://github.com/llvm/llvm-project/pull/96151
More information about the llvm-commits
mailing list