diff options
| author | Michael Zolotukhin <mzolotukhin@apple.com> | 2016-05-24 22:59:58 +0000 |
|---|---|---|
| committer | Michael Zolotukhin <mzolotukhin@apple.com> | 2016-05-24 22:59:58 +0000 |
| commit | 7216dd46689f95a0ea6a69f8d526f1ede0ffe8d2 (patch) | |
| tree | b3106e1b17b6ba62872182b7bb75fdea531d7af7 | |
| parent | 4caa1bf0bd42c05a47ba026446848e4abce73ab9 (diff) | |
| download | bcm5719-llvm-7216dd46689f95a0ea6a69f8d526f1ede0ffe8d2.tar.gz bcm5719-llvm-7216dd46689f95a0ea6a69f8d526f1ede0ffe8d2.zip | |
[LoopUnrollAnalyzer] Fix a crash in UnrolledInstAnalyzer::visitCastInst.
This fixes PR27847. Now for real.
llvm-svn: 270629
| -rw-r--r-- | llvm/lib/Analysis/LoopUnrollAnalyzer.cpp | 6 | ||||
| -rw-r--r-- | llvm/test/Transforms/LoopUnroll/full-unroll-crashers.ll | 18 |
2 files changed, 19 insertions, 5 deletions
diff --git a/llvm/lib/Analysis/LoopUnrollAnalyzer.cpp b/llvm/lib/Analysis/LoopUnrollAnalyzer.cpp index 413cf343c97..d88ab163557 100644 --- a/llvm/lib/Analysis/LoopUnrollAnalyzer.cpp +++ b/llvm/lib/Analysis/LoopUnrollAnalyzer.cpp @@ -141,11 +141,7 @@ bool UnrolledInstAnalyzer::visitCastInst(CastInst &I) { Constant *COp = dyn_cast<Constant>(I.getOperand(0)); if (!COp) COp = SimplifiedValues.lookup(I.getOperand(0)); - if (COp) { - if (COp->getType() == I.getType()) { - SimplifiedValues[&I] = cast<Constant>(COp); - return true; - } + if (COp && CastInst::castIsValid(I.getOpcode(), COp, I.getType())) { if (Constant *C = ConstantExpr::getCast(I.getOpcode(), COp, I.getType())) { SimplifiedValues[&I] = C; diff --git a/llvm/test/Transforms/LoopUnroll/full-unroll-crashers.ll b/llvm/test/Transforms/LoopUnroll/full-unroll-crashers.ll index 991cb309bf4..54d4bbb82fc 100644 --- a/llvm/test/Transforms/LoopUnroll/full-unroll-crashers.ll +++ b/llvm/test/Transforms/LoopUnroll/full-unroll-crashers.ll @@ -119,3 +119,21 @@ for.inc: for.cond.cleanup: ret void } + +define void @ptrtoint_cast2() { +entry: + br i1 false, label %for.body.lr.ph, label %exit + +for.body.lr.ph: + br label %for.body + +for.body: + %iv = phi i32 [ 0, %for.body.lr.ph ], [ %inc, %for.body ] + %offset = getelementptr inbounds float, float* null, i32 3 + %bc = bitcast float* %offset to i64* + %inc = add nuw nsw i32 %iv, 1 + br i1 false, label %for.body, label %exit + +exit: + ret void +} |

