diff --git a/llvm/lib/Transforms/Scalar/SCCP.cpp b/llvm/lib/Transforms/Scalar/SCCP.cpp --- a/llvm/lib/Transforms/Scalar/SCCP.cpp +++ b/llvm/lib/Transforms/Scalar/SCCP.cpp @@ -436,7 +436,9 @@ if (auto *C = dyn_cast(V)) { // Undef values remain unknown. - if (!isa(V)) + if (isa(V)) + LV.markOverdefined(); + else LV.markConstant(C); // Constants are constant } @@ -750,6 +752,10 @@ continue; LatticeVal &Res = getValueState(&PN); + if (isa(PN.getIncomingValue(i))) { + if (isConstant(Res)) + continue; + } Changed |= Res.mergeIn(IV, DL); if (Res.isOverdefined()) break;