[PATCH] D80844: [TRE] Allow accumulator elimination when base case returns non-constant

Eli Friedman via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 1 19:30:14 PDT 2020


efriedma added a comment.

> Currently on trunk, and after this patch, we only eliminate the first accumulating call we find and ignore any potential others.

Well, on trunk, we fail out of tail recursion elimination completely, I think.  But yes, makes sense.

I'd like to see a testcase for this.

> In cases like the one you posted with different accumulator operations (eg. mul add), it is a lot more tricky (and I'm not sure possible) because of the operations happen in reverse order.

In general, with multiple arbitrary accumulator operations, it's impossible, yes: you can't reassociate the operations.

gcc does actually manage to do tail call elimination on my testcase.  Roughly, you can distribute the multiplication over the addition.  It doesn't seem very important, though.


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

https://reviews.llvm.org/D80844





More information about the llvm-commits mailing list