On Mon, Oct 22, 2012 at 6:14 PM, Steven Bosscher <stevenb....@gmail.com> wrote:
> 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.
>
> The documentation should say "When *not* optimizing for size..." .
>
> But this piece of documentation seems to be in need of some TLC anyway:
> * hoisting is not enabled (or used to be not enabled, not sure what
> it's like now) when not optimizing for size. hoisting is enabled with
> -Os, PRE is disabled.
> * MR PRE was replaced with edge-based lazy code motion even before GCC 3.0
> * loop code motion is now done on GIMPLE way before RTL PRE
> * ... (probably half a dozen more issues) ...
>
> If you file a PR, I'll update the documentation for the old gcse.c
> passes (HOIST, PRE, CPROP).
>

Hi Steven, I filed PR55031 for tracking this issue.

Thanks.


-- 
Best Regards.

Reply via email to