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: Question on documentation about RTL PRE in gccint

On 10/22/2012 12:59 AM, Bin.Cheng wrote:
Quoting from GCCINT, section "9.5 RTL passes":
"When optimizing for size, GCSE is done using Morel-Renvoise Partial
Redundancy Elimination, with the exception that it does not try to
move invariants out of loops—that is left to the loop optimization
pass. If MR PRE GCSE is done, code hoisting (aka unification) is also
done, as well as load motion."

While the pass gate function is as below:
static bool
gate_rtl_pre (void)
   return optimize > 0 && flag_gcse
     && !cfun->calls_setjmp
     && optimize_function_for_speed_p (cfun)
     && dbg_cnt (pre);

It seems the PRE pass is disabled when not optimizing for speed.
Doesn't this conflict with the documentation, which says
Morel-Renvoise PRE will be used when optimizing for size.
I suspect both the code and the documentation need updating.

We actually use an LCM based PRE rather than MR PRE.

As you note the gating function disables PRE completely when optimizing for size. In the past we had a completely different implementation of gcse when optimizing for size (classic GCSE) as PRE will tend to increase code size the optimize expression computation.

It's not immediately clear from scanning the code what, if any, gcse we perform when optimizing for size.


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