[LLVMdev] Disabling certain optimizations at -O1?

Evgeniy Stepanov eugeni.stepanov at gmail.com
Wed Nov 27 00:43:55 PST 2013


Reid,

by the other CFG simplification, do you mean this case in
http://llvm-reviews.chandlerc.com/D2214?

1: if (x < 0)
2:   if (y < 0)
3:     do_something();

Yes, this is only bad for MSan (and probably for sampling-based PGO,
but that's a whole different story). But the current version of D2214
disables this optimization at SimplifyUncondBranch() point, which also
covers HoistThenElseCodeToIf(). And that one is exactly as bad as tail
merging of calls:

void f(int x) {
  if (x == 1) {
    g();
    g1();
  } else {
    g();
    g2();
  }
}

Calls to g() are hoisted out of if/else blocks.

Also note that tail merging of calls happens in CodeGen, not in SimplifyCFG.


On Tue, Nov 26, 2013 at 9:45 PM, Renato Golin <renato.golin at linaro.org> wrote:
> On 26 November 2013 16:59, Reid Kleckner <rnk at google.com> wrote:
>>
>> I'd support disabling tail merging of calls at -O1.  The other CFG
>> simplification doesn't seem like that big of a deal though for general
>> debugging, though.
>
>
> So, do we have two ways of running SimplifyCFG? One for O1 and one for O2+,
> and selectively disabling parts of it?
>
> --renato



More information about the llvm-dev mailing list