This is the mail archive of the 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: missing conditional propagation in cprop.c pass

Hash: SHA1

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
>>> same.
>> 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.


Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla -


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