https://gcc.gnu.org/bugzilla/show_bug.cgi?id=95649
Aldy Hernandez <aldyh at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |law at gcc dot gnu.org
--- Comment #5 from Aldy Hernandez <aldyh at gcc dot gnu.org> ---
The problem here is that the code in propagate_into_phi_args() was previously
in evrp but is now in the engine itself and affecting all clients.
CCP and copyprop are two of these clients. The subst & fold engine is changing
the CFG (phis in this case) and neither pass is expecting it. A hack showing
that it's the PHI propagation is attached below.
We could make these passes clean-up the CFG for example, but that may be heavy
handed if they're supposed to be lightweight ??. Instead we could either move
propagate_into_phi_args back into evrp, or only run it if a CHANGE_CFG_FLAG or
somesuch is passed to the engine constructor.
I'll work on a patch.
-------------------------
NOT A FIX:
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c
index 4fda296ef9e..249867d8633 100644
--- a/gcc/tree-ssa-propagate.c
+++ b/gcc/tree-ssa-propagate.c
@@ -1228,7 +1228,7 @@ substitute_and_fold_dom_walker::before_dom_children
(basic_block bb)
}
}
- substitute_and_fold_engine->propagate_into_phi_args (bb);
+ //substitute_and_fold_engine->propagate_into_phi_args (bb);
return NULL;
}