summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/VirtRegRewriter.cpp
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2010-07-10 20:31:42 +0000
committerDuncan Sands <baldrick@free.fr>2010-07-10 20:31:42 +0000
commit82b21c086e519dfbfcd7f103b121dadc13d0c771 (patch)
tree2ed676b33972dd4a4018f42aa654de924bbc91f1 /llvm/lib/CodeGen/VirtRegRewriter.cpp
parentd54e2aba6c1fa3c5c7f7274ec338d6fbc731abd7 (diff)
downloadbcm5719-llvm-82b21c086e519dfbfcd7f103b121dadc13d0c771.tar.gz
bcm5719-llvm-82b21c086e519dfbfcd7f103b121dadc13d0c771.zip
The accumulator tail recursion transform claims to work for any associative
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
Diffstat (limited to 'llvm/lib/CodeGen/VirtRegRewriter.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud