[MergeICmps] Relax sinking check

The check for sinking instructions past the load + cmp sequence
currently checks for side-effects, which includes writing to memory
and unwinding. However, I don't believe we care about sinking the
instructions past an unwind (as they don't have any side-effects
themselves).

Differential Revision: https://reviews.llvm.org/D106591
This commit is contained in:
Nikita Popov 2021-07-22 22:20:25 +02:00
parent 18ce3d3f2c
commit f502683750
2 changed files with 4 additions and 4 deletions

View File

@ -248,9 +248,9 @@ private:
bool BCECmpBlock::canSinkBCECmpInst(const Instruction *Inst,
DenseSet<Instruction *> &BlockInsts,
AliasAnalysis &AA) const {
// If this instruction has side effects and its in middle of the BCE cmp block
// instructions, then bail for now.
if (Inst->mayHaveSideEffects()) {
// If this instruction may clobber the loads and is in middle of the BCE cmp
// block instructions, then bail for now.
if (Inst->mayWriteToMemory()) {
// Bail if this is not a simple load or store
if (!isSimpleLoadOrStore(Inst))
return false;

View File

@ -3,7 +3,7 @@
%S = type { i32, i32, i32, i32 }
declare void @foo(...) nounwind readnone
declare void @foo(...) readonly
; We can split %entry and create a memcmp(16 bytes).
define zeroext i1 @opeq1(