On Sun, 2004-10-17 at 22:00, Daniel Berlin wrote:
This is a revision of the previous patch, the main change is that it
no
longer requires DCE to go into and out of SSA to rename the virtual
must-def operands, as Andrew requested. The renaming it does
in DCE is just the 3rd phase of the regular renamer (rewriting
reaching
definitions),
I would rather parameterize the renamer to deal with this situation.
Just to make sure I understood the problem and the IRC discussion.
Here
we have the following situation:
# A_4 = V_MUST_DEF <A_3>
1. A = ...;
# A_5 = V_MUST_DEF <A_4>
2. A = ...;
A_4 is dead because no statement uses A_4 (the RHS of a V_MUST_DEF is
not a use, it only specifies which version is this V_MUST_DEF killing).
Once we remove statement (1), we need to tell statement (2) that it no
longer kills A_4, it now kills whichever version was left dominating it
(it may or may not be A_3).
What we need here is a regular renaming pass, but not all of it. We
only need to (a) detect def sites, (b) walk the dominator the dominator
tree rewriting the operands of V_MUST_DEFs with CURRENT_DEF. That is,
we need to skip the PHI insertion phase.