------- Comment #8 from steven at gcc dot gnu dot org  2007-10-27 11:34 -------
After making hoist_code look down the dominator tree a bit further, and fixing
--param max-gcse-passes for code hoisting, the next problem surfaces.

When we hoist an expression, we replace the expression with the reaching reg,
_and_ we add a REG_EQUAL note for the original expression. Because we add
expressions from REG_EQUAL notes to the hash table, expressions that were
already hoisted in a previous pass still look very busy in the subsequent
passes. Thus, we hoist and hoist and hoist and ... the same expression all over
again.

Solution: prune VBEOUT with AVAIL_OUT.

GCC doesn't compute AVAIL_OUT for code hoisting at the moment. Even local
doen-safety is not computed. The trick that PRE uses for this can be used for
code hoisting as well: Compute AE_KILL as ~(TRANSP | COMP). The result can be
fed to compute_available(), and used for pruning VBEOUT in
compute_code_hoist_data().


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33828

Reply via email to