diff --git a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp index 0521df8b818cf..e318ec94db4c3 100644 --- a/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp +++ b/llvm/lib/Transforms/Scalar/DeadStoreElimination.cpp @@ -1210,14 +1210,10 @@ struct DSEState { bool isInvisibleToCallerAfterRet(const Value *V) { if (isa(V)) return true; + auto I = InvisibleToCallerAfterRet.insert({V, false}); - if (I.second) { - if (!isInvisibleToCallerOnUnwind(V)) { - I.first->second = false; - } else if (isNoAliasCall(V)) { - I.first->second = !PointerMayBeCaptured(V, /*ReturnCaptures=*/true); - } - } + if (I.second && isInvisibleToCallerOnUnwind(V) && isNoAliasCall(V)) + I.first->second = !PointerMayBeCaptured(V, /*ReturnCaptures=*/true); return I.first->second; }