Help in understanding ccp propagator

Daniel Berlin dberlin@dberlin.org
Wed Jun 13 00:09:00 GMT 2007


On 6/12/07, Revital1 Eres <ERES@il.ibm.com> wrote:
>
> > The engine only knew how to propagate cases that always make the same
> > set of vdef/vuses, so it was safe to only tell it to use the first
> > vdef.
> >
> >  /* Note that for propagation purposes, we are only interested in
> >          visiting statements that load the exact same memory reference
> >          stored here.  Those statements will have the exact same list
> >          of virtual uses, so it is enough to set the output of this
> >          statement to be its first virtual definition.  */
> >
> >
> > You are changing this, AFAIK, so you will need to make it handle
> > multiple output values.
> >
>
> That's indeed the problem:
>
> Consider the following stmt that is been visited -
>
> # MPT.1416_722 = VDEF <MPT.1416_734> { MPT.1416 }
> D.61410.first = i0_62;
>
> Than output_p will be set to MPT.1416_722 (which is the
> only vdef of this stmt) -
>
> *output_p = first_vdef (stmt);
>
> And later on (in add_ssa_edge () function) all the uses of MPT.1416_722
> will be added to the working set which in our case is D.61410.second =
> 97; statement instead of the real uses of D.61410.first.
>
> # MPT.1416_723 = VDEF <MPT.1416_722> { MPT.1416 }
> D.61410.second = 97;
>
> Is there a way to retrieve the real uses of D.61410.first?

No, you will have to look at each immediate use and determine if it is
really a store to the same place.

>
> Thanks again,
> Revital
>
>



More information about the Gcc mailing list