[MergeICmps] Allow sinking past non-load/store
authorNikita Popov <nikita.ppv@gmail.com>
Sun, 22 Aug 2021 16:15:55 +0000 (18:15 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Mon, 23 Aug 2021 20:03:49 +0000 (22:03 +0200)
commit19dc02e99f802922a3af69e802465bee0723b57a
treeb270a677f15ab7a18e946f0964e044a233a42f57
parentda12d88b1c5fc42b49b92fcf94917ca489dd677f
[MergeICmps] Allow sinking past non-load/store

This is a followup to D106591. MergeICmps currently only allows
sinking the loads past either instructions that don't write to
memory at all, or simple loads/stores that don't modify the memory
the loads access.

The "simple loads/stores" part of this check doesn't seem necessary
to me -- AA isModRef() already accurately models any operation
that may clobber the memory. For example, in the adjusted test case
the transform is still fine if the call to @foo() isn't readonly,
but inaccessiblememonly -- in both cases, the call cannot modify
the loaded memory.

Differential Revision: https://reviews.llvm.org/D108517
llvm/lib/Transforms/Scalar/MergeICmps.cpp
llvm/test/Transforms/MergeICmps/X86/split-block-does-work.ll