[PATCH] D62774: [DAGCombine][X86][AArch64][MIPS][LANAI] (C - x) - y -> C - (x + y) fold (PR41952)

Roman Lebedev via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 2 11:42:12 PDT 2019


lebedev.ri marked 4 inline comments as done.
lebedev.ri added a comment.

Thank you for the review!



================
Comment at: lib/CodeGen/SelectionDAG/DAGCombiner.cpp:3017
   }
+  // (C - x) - y  ->  C - (x + y)
+  if (N0.hasOneUse() && N0.getOpcode() == ISD::SUB &&
----------------
RKSimon wrote:
> lebedev.ri wrote:
> > RKSimon wrote:
> > > Do we gain anything from the general case here? This seems to cause a small increase in register pressure in many cases - limit to the (0 - x) - y negation case only?
> > Could you please be more specific?
> > The only regressions i'm seeing are 32-bit `@reg64_lshr_by_sub_from_negated*`
> > The obvious positives are all these newly-formed `neg`
> > https://godbolt.org/z/JK0ldm <- which is kinda the endgoal here.
> > 
> > If we limit this to only hoist `neg` (and this will be the first such restriction
> > in all of these patches), then naturally, the `@reg64_lshr_by_sub_from_negated*`
> > pattern will no longer produce `neg`, since the `sub 64, %x` will not be sunk.
> > 
> > That can still be fixed, if we transform `C-X` to `neg(x)+C` or so in DAGCombine,
> > I was actually going to look into that, but it looked to not be necessary
> > with this patch in it's current form.
> Yes I think your right - sorry I was being over cautious! 
No problem, thank you for confirming my understanding here!


Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D62774/new/

https://reviews.llvm.org/D62774





More information about the llvm-commits mailing list