diff options
author | Benjamin Kramer <benny.kra@googlemail.com> | 2012-10-20 08:43:52 +0000 |
---|---|---|
committer | Benjamin Kramer <benny.kra@googlemail.com> | 2012-10-20 08:43:52 +0000 |
commit | f55b592cc86d87f13f18e82934079ef2983612aa (patch) | |
tree | a49fb645a659d12035f44285a1ed2e11fa66407e /llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp | |
parent | 6f21206850d212e69010a13545dd0f02bcf8ef3e (diff) | |
download | bcm5719-llvm-f55b592cc86d87f13f18e82934079ef2983612aa.tar.gz bcm5719-llvm-f55b592cc86d87f13f18e82934079ef2983612aa.zip |
InstCombine: Fix an edge case where constant icmps could sneak into ConstantFoldInstOperands and crash.
Have to refactor the ConstantFolder interface one day to define bugs like this away. Fixes PR14131.
llvm-svn: 166374
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp index ecce242a81e..a2d4c888f2c 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -333,6 +333,10 @@ static Value *SimplifyWithOpReplaced(Value *V, Value *Op, Value *RepOp, // All operands were constants, fold it. if (ConstOps.size() == I->getNumOperands()) { + if (CmpInst *C = dyn_cast<CmpInst>(I)) + return ConstantFoldCompareInstOperands(C->getPredicate(), ConstOps[0], + ConstOps[1], TD, TLI); + if (LoadInst *LI = dyn_cast<LoadInst>(I)) if (!LI->isVolatile()) return ConstantFoldLoadFromConstPtr(ConstOps[0], TD); |