This is the mail archive of the gcc@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]

Re: [help]failed to generate PHI NODE in esra pass.


Hi,

On Sun, Nov 04, 2012 at 09:32:48PM -0800, Handong Ye wrote:
> On Sun, Nov 4, 2012 at 2:13 PM, Martin Jambor <mjambor@suse.cz> wrote:
> > On Sat, Nov 03, 2012 at 09:01:53AM +0000, Yangyueming wrote:
> >> Hi, all
> >>

...

> >>
> >> But when I do the test for a case with a little change, it is failed to generate MAX_EXPR in phiopt1.
> >> The failed case2 :
> >> int foo(short a ,short b)
> >> {
> >>   int c;
> >>   if (a < b)
> >>     a = b;
> >>
> >>   c = *(int *)&a;
> >
> > ehm, and just what do you expect the result of the above line to be?
> >
> >>   return c;
> >> }
> >>

...

> >
> > Nevertheless, I can tell why there is no phi node for a. a has its
> > address taken and therefore it is not in SSA form (as clearly visible
> > in the first statements in bb 2 and bb 3).  Thus, no PHI nodes for a.
> >
> 
> Why 'a' has no SSA form if it's address taken?
> I didn't check the code, but I guess it may because 'a' value is not
> directly used.

Because address taken variables might be used and defined indirectly
through a memory load/store, often in ways that are practically
impossible to detect.

Martin


> 
> >> Dump of phifail.c.027t.esra:
> >> foo (short int a, short int b)
> >> {
> >>   int c;
> >>   short int a$0;
> >>
> >> <bb 2>:
> >>   a$0_1 = a;
> >>   if (a$0_1 < b_2(D))
> >>     goto <bb 3>;
> >>   else
> >>     goto <bb 4>;
> >>
> >> <bb 3>:
> >>   a = b_2(D);
> >>
> >> <bb 4>:
> >>   c_4 = MEM[(int *)&a];
> >>   c_5 = c_4;
> >>   return c_5;
> >>
> >> }
> >>
> >> Why it is failed and if there's a way to make it work?
> >
> > I believe that the modified input has undefined semantics (sorry, I
> > don't have time to verify this in the standard) and so no, there is no
> > way to make it work.
> >
> > Martin
> 
> 
> 
> -- 
> Thanks.
> Handong


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