[all-commits] [llvm/llvm-project] 14dedd: [Reland][LSR] Hoist IVInc to loop header if its al...

chenglin.bi via All-commits all-commits at lists.llvm.org
Fri Feb 10 00:52:14 PST 2023

  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 14dedd9cf596d1e6cfd8d24009393e8b8f1a3dc0
  Author: chenglin.bi <chenglin.bi at linaro.org>
  Date:   2023-02-10 (Fri, 10 Feb 2023)

  Changed paths:
    M llvm/lib/Transforms/Scalar/LoopStrengthReduce.cpp
    M llvm/test/Transforms/LoopStrengthReduce/AArch64/pr53625.ll

  Log Message:
  [Reland][LSR] Hoist IVInc to loop header if its all uses are in the loop header

Original code will cause crash when the load/store memory type is structure because isIndexedLoadLegal/isIndexedStore doesn't support struct type.
So we limit the load/store memory type to integer.

Origin commit message:
When the latch block is different from header block, IVInc will be expanded in the latch loop. We can't generate the post index load/store this case.
But if the IVInc only used in the loop, actually we still can use the post index load/store because when exit loop we don't care the last IVInc value.
So, trying to hoist IVInc to help backend to generate more post index load/store.

Fix #53625

Reviewed By: eopXD

Differential Revision: https://reviews.llvm.org/D138636

More information about the All-commits mailing list