diff options
author | Tobias Grosser <grosser@fim.uni-passau.de> | 2011-01-09 16:00:11 +0000 |
---|---|---|
committer | Tobias Grosser <grosser@fim.uni-passau.de> | 2011-01-09 16:00:11 +0000 |
commit | aa2be8435693dfe73dac64de3e2b6b3f19df1eac (patch) | |
tree | ef26b4b0dca29775904cdf82420f4c85b4e3710f /lib/Transforms | |
parent | 3a723ab344d9835506ed2b52a2ccd75078670fc7 (diff) |
Instcombine: Fix pattern where the sext did not dominate the icmp using it
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@123121 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Transforms')
-rw-r--r-- | lib/Transforms/InstCombine/InstCombineSelect.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/Transforms/InstCombine/InstCombineSelect.cpp b/lib/Transforms/InstCombine/InstCombineSelect.cpp index 71a286ef69..ff41ab834b 100644 --- a/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ b/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -281,8 +281,8 @@ Instruction *InstCombiner::visitSelectInstWithICmp(SelectInst &SI, Value *FalseVal = SI.getFalseValue(); // Check cases where the comparison is with a constant that - // can be adjusted to fit the min/max idiom. We may edit ICI in - // place here, so make sure the select is the only user. + // can be adjusted to fit the min/max idiom. We may move or edit ICI + // here, so make sure the select is the only user. if (ICI->hasOneUse()) if (ConstantInt *CI = dyn_cast<ConstantInt>(CmpRHS)) { // X < MIN ? T : F --> F @@ -364,6 +364,11 @@ Instruction *InstCombiner::visitSelectInstWithICmp(SelectInst &SI, ICI->setOperand(1, CmpRHS); SI.setOperand(1, TrueVal); SI.setOperand(2, FalseVal); + + // Move ICI instruction right before the select instruction. Otherwise + // the sext/zext value may be defined after the ICI instruction uses it. + ICI->moveBefore(&SI); + Changed = true; break; } |