This is the mail archive of the
mailing list for the GCC project.
Re: [tree-ssa] Removing redundant loads
On Fri, 2003-05-30 at 07:55, Andrew MacLeod wrote:
> On Fri, 2003-05-30 at 07:46, Diego Novillo wrote:
> > On Fri, 2003-05-30 at 07:16, Andrew MacLeod wrote:
> > hidden. When I tried enabling overlapping live ranges last week I got
> > through most of the bootstrap cycle. But the stage2/cc1 binary would
> > get into an infinite loop on startup.
> Thats not the problem I have when I enable it with my changes :-)
> Well, overlapping live ranges appear to work, but turning on copyprop
> makes it not work, so it appears that under pressure we aren't doing
> such a good job :-) I'll track it down.
Well, my current problem appears to be related to (presumably) the
implementation of the algorithm which handles adding a new temportary
when we have an interdependancy between phi nodes:
# BLOCK 13. PRED: 11 9. SUCC: 15 14.
# VUSE <MT.80_19>;
T.297_39 = (unsigned int)d2_18->type;
if (T.297_39 == 9)
# BLOCK 14 (/src/tree-ssa/2003-05-28/gcc/gcc/genrecog.c:1100).
PRED: 13. SUCC: 15.
struct decision_test * tmp;
# BLOCK 15 (/src/tree-ssa/2003-05-28/gcc/gcc/genrecog.c:1105).
PRED: 14 13. SUCC: 20 16.
# d1_1 = PHI <d1_15(13), d2_18(14)>;
# d2_3 = PHI <d2_18(13), d1_15(14)>;
Note the wonderful dependancy in the PHI nodes of block 15.. Block 14
needs d1 = d2; d2 = d1; but requires the algorithm to insert a
temporary so it can do it correctly.. At the moment, its failing this.
d1.323 = d1;
d2 = d1; <<-- This ought not to be here.
d1 = d2;
d2 = d1.323
So everything is getting the value of d1.
Im working on tracking this now.