[TRE] Allow accumulator elimination when base case returns non-constant
authorLayton Kifer <laytonkifer@gmail.com>
Thu, 4 Jun 2020 17:33:03 +0000 (10:33 -0700)
committerEli Friedman <efriedma@quicinc.com>
Thu, 4 Jun 2020 17:34:42 +0000 (10:34 -0700)
commit7381fcdf6200b7e91d951ff34d82aac8010d0a66
tree4262b26d6661539c15aa6ac52ca1579d12731f77
parentbd43f78c76632a5c19745e5db2d02c2806c66bfe
[TRE] Allow accumulator elimination when base case returns non-constant

Remove the requirement, that when performing accumulator elimination,
all other cases must return the same dynamic constant. We can do this by
initializing the accumulator with the identity value of the accumulation
operation, and inserting an additional operation before any return.

Differential Revision: https://reviews.llvm.org/D80844
llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
llvm/test/Transforms/TailCallElim/accum_recursion.ll