Skip to content
  • Duncan Sands's avatar
    The accumulator tail recursion transform claims to work for any associative · 82b21c08
    Duncan Sands authored
    operation, but the way it's implemented requires the operation to also be
    commutative.  So add a check for commutativity (and tweak the corresponding
    comments).  This makes no difference in practice since every associative
    LLVM instruction is also commutative!  Here's an example to show the need
    for commutativity: the accum_recursion.ll testcase calculates the factorial
    function.  Before the transformation the result of a call is
      ((((1*1)*2)*3)...)*x
    while afterwards it is
      (((1*x)*(x-1))...*2)*1
    which clearly requires both associativity and commutativity of * to be equal
    to the original.
    
    llvm-svn: 108056
    82b21c08
Loading