[InstCombine][CGP] Move swapMayExposeCSEOpportunities() fold
authorNikita Popov <npopov@redhat.com>
Fri, 9 Jun 2023 14:21:39 +0000 (16:21 +0200)
committerNikita Popov <npopov@redhat.com>
Thu, 15 Jun 2023 12:17:58 +0000 (14:17 +0200)
commit03de1cb715c9a106f3ea4139042a33afcd7ca6ae
tree31650fa065d2c83fca4e6e6a9195c34af59578e1
parente96bec9cd8e14ee2174490c0ce09cedfcd6be79e
[InstCombine][CGP] Move swapMayExposeCSEOpportunities() fold

InstCombine tries to swap compare operands to match sub instructions
in order to expose "CSE opportunities". However, it doesn't really
make sense to perform this transform in the middle-end, as we cannot
actually CSE the instructions there.

The backend already performs this fold in
https://github.com/llvm/llvm-project/blob/18f5446a45da5a61dbfb1b7667d27fb441ac62db/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp#L4236
on the SDAG level, however this only works within a single basic block.

To handle cross-BB cases, we do need to handle this in the IR layer.
This patch moves the fold from InstCombine to CGP in the backend,
while keeping the same (somewhat dubious) heuristic.

Differential Revision: https://reviews.llvm.org/D152541
15 files changed:
llvm/lib/CodeGen/CodeGenPrepare.cpp
llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
llvm/test/CodeGen/Lanai/sub-cmp-peephole.ll
llvm/test/CodeGen/RISCV/aext-to-sext.ll
llvm/test/CodeGen/Thumb2/LowOverheadLoops/varying-outer-2d-reduction.ll
llvm/test/CodeGen/Thumb2/mve-postinc-lsr.ll
llvm/test/CodeGen/X86/cmp-merge.ll
llvm/test/CodeGen/X86/jump_sign.ll
llvm/test/Transforms/InstCombine/abs-intrinsic.ll
llvm/test/Transforms/InstCombine/icmp.ll
llvm/test/Transforms/InstCombine/result-of-usub-is-non-zero-and-no-overflow.ll
llvm/test/Transforms/InstCombine/strict-sub-underflow-check-to-comparison-of-sub-operands.ll
llvm/test/Transforms/InstCombine/sub-ashr-or-to-icmp-select.ll
llvm/test/Transforms/InstCombine/unsigned-sub-lack-of-overflow-check.ll
llvm/test/Transforms/InstCombine/unsigned-sub-overflow-check.ll