diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp index 7921a235d263..aa57159b6e35 100644 --- a/llvm/lib/Transforms/Scalar/SCCP.cpp +++ b/llvm/lib/Transforms/Scalar/SCCP.cpp @@ -174,9 +174,11 @@ private: inline InstVal &getValueState(Value *V) { hash_map::iterator I = ValueState.find(V); if (I != ValueState.end()) return I->second; // Common case, in the map - - if (Constant *CPV = dyn_cast(V)) { // Constants are constant - ValueState[CPV].markConstant(CPV); + + if (isa(V)) { + // Nothing to do, remain undefined. + } else if (Constant *CPV = dyn_cast(V)) { + ValueState[CPV].markConstant(CPV); // Constants are constant } else if (isa(V)) { // Arguments are overdefined ValueState[V].markOverdefined(); } @@ -236,6 +238,7 @@ private: visitTerminatorInst(I); } void visitUnwindInst (TerminatorInst &I) { /*returns void*/ } + void visitUnreachableInst(TerminatorInst &I) { /*returns void*/ } void visitAllocationInst(Instruction &I) { markOverdefined(&I); } void visitVANextInst (Instruction &I) { markOverdefined(&I); } void visitVAArgInst (Instruction &I) { markOverdefined(&I); }