diff options
| author | Roman Lebedev <lebedev.ri@gmail.com> | 2019-04-17 06:35:07 +0000 |
|---|---|---|
| committer | Roman Lebedev <lebedev.ri@gmail.com> | 2019-04-17 06:35:07 +0000 |
| commit | 00806458469829bc0d3bfd59b9ae9925c570b2ff (patch) | |
| tree | 707ef196749f4876d308a56312531ed90f3cbfc1 /llvm/lib/Transforms | |
| parent | df44ff1b7871dc4cd178c9db7173c45b774da4fd (diff) | |
| download | bcm5719-llvm-00806458469829bc0d3bfd59b9ae9925c570b2ff.tar.gz bcm5719-llvm-00806458469829bc0d3bfd59b9ae9925c570b2ff.zip | |
[CVP] processOverflowIntrinsic(): don't crash if constant-holding happened
As reported by Mikael Holmén in post-commit review in
https://reviews.llvm.org/D60791#1469765
llvm-svn: 358559
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp index b650971624a..a56a37a618b 100644 --- a/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp +++ b/llvm/lib/Transforms/Scalar/CorrelatedValuePropagation.cpp @@ -416,10 +416,13 @@ static void processOverflowIntrinsic(WithOverflowInst *WO) { IRBuilder<> B(WO); Value *NewOp = B.CreateBinOp( WO->getBinaryOp(), WO->getLHS(), WO->getRHS(), WO->getName()); - if (WO->isSigned()) - cast<Instruction>(NewOp)->setHasNoSignedWrap(); - else - cast<Instruction>(NewOp)->setHasNoUnsignedWrap(); + // Constant-holing could have happened. + if (auto *Inst = dyn_cast<Instruction>(NewOp)) { + if (WO->isSigned()) + Inst->setHasNoSignedWrap(); + else + Inst->setHasNoUnsignedWrap(); + } Value *NewI = B.CreateInsertValue(UndefValue::get(WO->getType()), NewOp, 0); NewI = B.CreateInsertValue(NewI, ConstantInt::getFalse(WO->getContext()), 1); |

