This is the mail archive of the
mailing list for the GCC project.
Re: [tree-ssa]: PRE updates
- From: Daniel Berlin <dberlin at dberlin dot org>
- To: Andrew MacLeod <amacleod at redhat dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>
- Date: Wed, 11 Jun 2003 16:28:54 -0400
- Subject: Re: [tree-ssa]: PRE updates
On Wednesday, June 11, 2003, at 03:49 PM, Andrew MacLeod wrote:
On Tue, 2003-06-10 at 19:08, Daniel Berlin wrote:
My fault, i forgot to update the euse to the newly created block, (and
update the EPHI edge) so it thinks it's on the old edge (where it would
have been had the block not been split).
Updates for PRE make it do the right thing in more cases, and faster.
Also added a bit more dump info.
Eventually, we should be able to get the temporary without ever
It'll mean i have to look more at open64's injury/repair stuff for
strength reduction, in order to get the temporary right for those
I now get stopped in the bootstrap here:
c-parse.c: In function `yyparse':
c-parse.c:5421: internal compiler error: in coalesce_ssa_name, at
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://gcc.gnu.org/bugs.html> for instructions.
Andrew, this is *with* your phi updating patch. Without it, we get
node abort we discussed before the weekend. I'll note that this
file/function is the first file that requires splitting an edge to do
insertion where it has to update the phi's, and the location of the
gives me the feeling something else needs to be updated (maybe
children or something? I haven't looked).
SO when you split an edge, the current routines will take care of
adjusting existing PHI's. What they dont do is take care of any new
PHI's you are adding.
The failure here is because you inserted a stmt on the edge from the
to the next stmt. There was no else caluse, so the insert routines
placed your stmt in the else clause of the IF stmt:
# BLOCK 1730. PRED: 748. SUCC: 754.
pretmp.1473_8344 = yyvsp_27 + -4B <<--
# BLOCK 754 (pre.i:18276). PRED: 1730 753 749. SUCC: 1681.
# pretmp.1473_8320 = PHI <pretmp.1473_8344(748),
But the PHI you created still uses the original basic block of the IF
(Ie, the PRED of the else block.).
So the PHI node says it gets pretmp.1473_8344 from BB 748, and the live
reange routines find no def on that path, so they make it live on
The same situation existed for pretmp.1473_8343, so it was marked as
live on entry. Since they were both live on entry, both need to
coalesce to the same memory location, but they also interfere over the
range they are live, so its an impossible situation, and hence the
So, are you inserting a stmt at a time, or inserting them all and then
Inserting one at a time and committing at the same time.
If edges are split, and a new basic block is going to be created, you
are going to need to know that to create your PHI node properly.