================
@@ -311,7 +318,10 @@ computeBlockInputState(const CFGBlock &Block, 
AnalysisContext &AC) {
     }
   }
 
-  JoinedStateBuilder Builder(AC);
+  // When performing the join, only retain state for those expressions that are
+  // consumed by this block. This avoids performing joins and potentially
+  // extending the flow condition for expressions that we won't need anyway.
+  JoinedStateBuilder Builder(AC, AC.CFCtx.getExprConsumedByBlock(&Block));
----------------
martinboehme wrote:

> We have getStableStorageLocation that will first look up an expression in 
> ExprToLoc and it will try to reuse the some location. In case we clear 
> ExprToLoc along the back edge, in the second iteration through processing B2 
> we would create new locations for the expressions.

Confusingly, there are two different maps called `ExprToLoc`:

*  
[`Environment::ExprToLoc`](https://github.com/llvm/llvm-project/blob/03f05a4e72891237264ab48adf62034aaac8bd46/clang/include/clang/Analysis/FlowSensitive/DataflowEnvironment.h#L661)

  This is the one from which this PR (and the simpler version in #72985) 
removes entries.

*  
[`DataflowAnalysisContext::ExprToLoc`](https://github.com/llvm/llvm-project/blob/03f05a4e72891237264ab48adf62034aaac8bd46/clang/include/clang/Analysis/FlowSensitive/DataflowAnalysisContext.h#L218)

  This is the one used by 
[`DataflowAnalysisContext::getStableStorageLocation()`](https://github.com/llvm/llvm-project/blob/03f05a4e72891237264ab48adf62034aaac8bd46/clang/lib/Analysis/FlowSensitive/DataflowAnalysisContext.cpp#L86).
 This PR does not remove any entries from this map.

So the answer is that stable storage locations are not affected by this PR. If 
we have a storage location that is cleared from `Environment::ExprToLoc` as a 
result of this PR, then if we call `Environment::createStorageLocation(const 
Expr&)` on the next iteration, that will call through to 
`DataflowAnalysisContext::getStableStorageLocation()`, which will return the 
same storage location as it did on the previous iteration.

In the PR description, I merely used `ExprToLoc` as shorthand for 
`Environment::ExprToLoc` since that is the one that I'm concerned with most 
often -- but I realize this is potentially confusing.

https://github.com/llvm/llvm-project/pull/72850
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to