mirror of
https://github.com/intel/llvm.git
synced 2026-01-25 10:55:58 +08:00
[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:
@@ -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;
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user