The path oracles killing_def () routine was removing an ssa-name from each equivalence in the set.  This was busy work that did not need to be done. when checking for an equivalence between A and B, the path oracle requires that A be in B's set and B be in A's set.  By setting the equivalence set for A to contain *just* A, there is no need to visit all the equivalences and remove them. Aldy ran it thru the thread counter, and there was no difference in the number of threads found. The testcase in the PR on my machine ran in the following times: there no difference i the default time, but with the specified option  -O2 --param max-jump-thread-duplication-stmts=30 : before patch: backwards jump threading           :  11.64 ( 92%)   0.00 (  0%) 11.71 ( 91%)    24  (  0%) TOTAL                           :  12.70          0.07 12.83           47M After patch: backwards jump threading           :   1.96 ( 65%)   0.01 ( 10%)   1.99 ( 64%)    24  (  0%) TOTAL                           :   3.00          0.10 3.12           47M Clearly more work to do, but much better for a start.  next up, why is compute_ranges-in_block () taking over 50% of the time now. This was bootstrapped on x86_64-pc-linux-gnu with no regressions.  pushed. Andrew