NoQ added a comment.

I only essentially did one optimization - introduce a short path that returns 
the original value if visiting its sub-values changed nothing, which is a 
relatively common case. The reason it works though is that `evalBinOp()` will 
be called later to combine the sub-values, which may in turn call 
`simplifySVal()` again, which is clearly unwanted.



================
Comment at: test/Analysis/hangs.c:18-30
+void produce_an_exponentially_exploding_symbol(int x, int y) {
+  x += y; y += x + g();
+  x += y; y += x + g();
+  x += y; y += x + g();
+  x += y; y += x + g();
+  x += y; y += x + g();
+  x += y; y += x + g();
----------------
This currently finishes in 1 second on my machine. This test, unlike the 
original test, is easy to experiment with.


https://reviews.llvm.org/D47155



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to