This is the mail archive of the
mailing list for the GCC project.
Re: missing conditional propagation in cprop.c pass
- From: Jeff Law <law at redhat dot com>
- To: "Amker.Cheng" <amker dot cheng at gmail dot com>
- Cc: Rahul Kharche <rkharche at nvidia dot com>, "Paulo J. Matos" <paulo at matos-sorge dot com>, "gcc at gcc dot gnu dot org" <gcc at gcc dot gnu dot org>
- Date: Mon, 03 Oct 2011 12:01:46 -0600
- Subject: Re: missing conditional propagation in cprop.c pass
- References: <CAHFci298XREmPEJ4n9S8u0p1n+Om581OJJ=s-GJGzCmiJXF1_Q@mail.gmail.com> <firstname.lastname@example.org> <CAHFci2-OJR=gQfe2ofii+2hGN6Ne=YCyUbetAx3Sr-y0htntQw@mail.gmail.com> <58146932D5B9E442A708ADF29DDB910A38D08ED2BF@DEMAIL01.nvidia.com> <4E8490DF.email@example.com> <CAHFci28nxAZc9+CzvNebLTqg2RnEAU_q6QLLV9=3CexhfuOEhQ@mail.gmail.com>
-----BEGIN PGP SIGNED MESSAGE-----
On 09/29/11 22:43, Amker.Cheng wrote:
>>> I believe, the optimization you may be referring to is value
>>> range propagation which does predication of values based on
>>> predicates of conditions. GCC definitely applies VRP at the
>>> tree stage, I am not sure if there is an RTL pass to do the
>> There are also RTL optimizers which perform this kind of
>> constant propagation. See cprop.c (in older versions of gcc this
>> code was in gcse.c)
> Hi Jeff, This is exactly what I referred in the first message.
> Though the cprop.c pass collected the implicit_set information, it
> is recorded as local info of basic block, and cprop only does
> global propagation. The result is such conditional const
> propagation opportunities is missed.
> The whole process in cprop pass is like:
> bb0 : if (x) then bb1 else bb2 end
> 1, implicit_set from the preceding bb0 is tagged as local in bb1;
> 2, in compute_local_properties, the implicit_set is recorded in
> avloc[bb1]; 3, in compute_cprop_available, the implicit_set is only
> recorded in avout[bb1], not in avin[bb1], which it should be; 4, in
> cprop_insn and find_avail_set, only info recorded in avin[bb1] is
> considered when try to do propagation for bb1;
> Well, I believe it is a small problem, since implicit_set is
> recorded in avout[bb1], The basic block bb1 is the only one get
> missed in propagation.
> Don't know if I described the problem clearly and please comment.
I think you've probably described things fine. I think at this
point you can either try to fix the problem or file a bug and wait for
someone else to fix it.
The thing to watch out for is these implicit sets are also killed
implicitly. So you have to make sure the information you record from
the implicit set doesn't escape from the region where the information
is still valid.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
-----END PGP SIGNATURE-----