[RISCV] Relax another one use restriction in performSRACombine.
authorCraig Topper <craig.topper@sifive.com>
Thu, 4 Aug 2022 21:29:14 +0000 (14:29 -0700)
committerCraig Topper <craig.topper@sifive.com>
Thu, 4 Aug 2022 21:32:31 +0000 (14:32 -0700)
commit12a1ca9c42c45cfb4777a42f73db5d33e87577e4
tree436461edc2beef94ad058ed25fe4f821de69387d
parent657bfa364f3d34f3348827ee29cdf8da99ce57ce
[RISCV] Relax another one use restriction in performSRACombine.

When folding (sra (add (shl X, 32), C1), 32 - C) -> (shl (sext_inreg (add X, C1), i32), C)
it's possible that the add is used by multiple sras. We should
allow the combine if all the SRAs will eventually be updated.

After transforming all of the sras, the shls will share a single
(sext_inreg (add X, C1), i32).

This pattern occurs if an sra with 32 is used as index in multiple
GEPs with different scales. The shl from the GEPs will be combined
with the sra before we get a chance to match the sra pattern.
llvm/lib/Target/RISCV/RISCVISelLowering.cpp
llvm/test/CodeGen/RISCV/rv64i-shift-sext.ll