diff options
Diffstat (limited to 'llvm/lib/Transforms/Scalar/SCCP.cpp')
-rw-r--r-- | llvm/lib/Transforms/Scalar/SCCP.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp index d024e03b80a..7196bc82edc 100644 --- a/llvm/lib/Transforms/Scalar/SCCP.cpp +++ b/llvm/lib/Transforms/Scalar/SCCP.cpp @@ -1017,8 +1017,9 @@ void SCCPSolver::visitBinaryOperator(Instruction &I) { // Handle ICmpInst instruction. void SCCPSolver::visitCmpInst(CmpInst &I) { - LatticeVal &IV = ValueState[&I]; - if (IV.isOverdefined()) return; + // Do not cache this lookup, getValueState calls later in the function might + // invalidate the reference. + if (ValueState[&I].isOverdefined()) return; Value *Op1 = I.getOperand(0); Value *Op2 = I.getOperand(1); @@ -1046,7 +1047,8 @@ void SCCPSolver::visitCmpInst(CmpInst &I) { } // If operands are still unknown, wait for it to resolve. - if (!V1State.isOverdefined() && !V2State.isOverdefined() && !IV.isConstant()) + if (!V1State.isOverdefined() && !V2State.isOverdefined() && + !ValueState[&I].isConstant()) return; markOverdefined(&I); |