Patch #3 will remove handle_dominating_asserts from the core of the jump threading code and push it into VRP's callbacks where it should always have been.

As a side effect it causes some code which was previously only used for threading from VRP to be used unconditionally. It's actually a good thing as that code will find more jump threads. But in one case the resulting code is tougher for tree-ssa-uninit.c to handle and we get a false positive uninit warning.

As it turns out for that case we're better off improving DOM slightly which allows DOM to simplify the test even further. This patch implements the DOM improvement so that we don't see a regression when patch #3 is installed.

The particular case we're looking to improve looks like

t = a | b;
if (t == 0)
...

In the TRUE arm we know that a must be zero and b must be zero. Discovering those equivalences allows DOM to do a better job for the uninit testcase from the testsuite.

There's clearly more that could be done with this code, but I didn't want to take it any further than was needed to address the regression that would be caused by patch #3.

Bootstrapped and regression tested on x86_64-linux-gnu. Installing on the trunk. I'll be testing this in combination with patch #1 tomorrow on ppc64le to get additional coverage.

Jeff

Reply via email to