This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tree-optimization/29738] Missed constant propagation into loops



------- Comment #5 from rakdver at atrey dot karlin dot mff dot cuni dot cz  2006-11-06 12:08 -------
Subject: Re:  Missed constant propagation into loops

> > ------- Comment #2 from rakdver at gcc dot gnu dot org  2006-11-06 11:51 -------
> > > Have you tried
> > > 
> > > void foo (void);
> > > void bar (void)
> > > {
> > >   int i, j;
> > >   i = 0;
> > >   for (j = 0; j < 10000; j++)
> > >     if (i)
> > >       foo ();
> > > }
> > 
> > This would work, obviously.
> > 
> > > For the original problem, why don't we propagate constants in
> > > 
> > >   #   i_3 = V_MUST_DEF <i_2>;
> > >   i = 0;
> > > 
> > >   # NONLOCAL.6_19 = PHI <NONLOCAL.6_9(5), NONLOCAL.6_11(2)>;
> > >   # i_18 = PHI <i_7(5), i_3(2)>;
> > > 
> > > i.e. replacing the use of i_3 with just the constant 0?
> > 
> > Because i is a virtual operand, not real one.
> 
> But that doesn't help that i is loop-carried and so we don't
> propagate it to the if () stmt - we use i_18 there.  Or am I missing
> something?

ccp can handle this for real operands.


-- 


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]