On 10/14/2016 10:01 AM, Thomas Schwinge wrote:
After the "Add Early VRP" GCC trunk commit r240291 (Kugan CC for your
information), I've been observing all kinds of OpenACC offloading
failures. I now figured out what's going on.
The "evrp" pass uses basic_block's BB_VISITED flag. It first clears
these all, gcc/tree-vrp.c:execute_early_vrp:
FOR_EACH_BB_FN (bb, cfun)
{
bb->flags &= ~BB_VISITED;
..., then does its processing, and at the end, clears these again:
FOR_EACH_BB_FN (bb, cfun)
bb->flags &= ~BB_VISITED;
I note that this looks slightly different from what
gcc/cfg.c:clear_bb_flags whould be doing, which works from
ENTRY_BLOCK_PTR_FOR_FN onwards:
So maybe it should just call clear_bb_flags instead of doing the loop
itself? Ok if that works.
Bernd