The previous approach would add every constraint, from every node, into a vector and encode them all at the end of the path. However, duplicated constraints were not being removed and the SMT formula generated by the refutation manager would contain a huge number of duplicated constraint.
This patch implements some code to merge the constraint over the same symbol, removing duplicates. These are the number before and after the patch:
Project | before | after | tmux | 283.222 | 137.927 | redis | 614.858 | 457.721 | openssl | 308.292 | 317.049 | twin | 274.478 | 266.339 | git | 547.687 | 528.171 | postgresql | 2927.495 | 2167.802 | sqlite3 | 3264.305 | 1392.721 |
Major speedups in tmux and sqlite (less than half of the time), redis and postgresql were about 25% faster while the rest are basically the same.
This visitor starts to get big, and the logic is quite different to what is usually found in BugReporterVisitors. Could we separate it into a different file with it's own header, which would be included by BugReporter.cpp?