Improve 'tail' call marking in TRE. A bootstrap of clang goes from 375k calls marked...
authorNick Lewycky <nicholas@mxc.ca>
Mon, 5 May 2014 23:59:03 +0000 (23:59 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Mon, 5 May 2014 23:59:03 +0000 (23:59 +0000)
commit05da4dd998a212a262aca58e49a1c5e04c8844f3
tree5fb381a8bd5abff639e0a1937934415e52aa1116
parent59c397de1a18d0368c003ceae0794f4168a26f3c
Improve 'tail' call marking in TRE. A bootstrap of clang goes from 375k calls marked tail in the IR to 470k, however this improvement does not carry into an improvement of the call/jmp ratio on x86. The most common pattern is a tail call + br to a block with nothing but a 'ret'.

The number of tail call to loop conversions remains the same (1618 by my count).

The new algorithm does a local scan over the use-def chains to identify local "alloca-derived" values, as well as points where the alloca could escape. Then, a visit over the CFG marks blocks as being before or after the allocas have escaped, and annotates the calls accordingly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@208017 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/IR/CallSite.h
lib/Transforms/Scalar/TailRecursionElimination.cpp
test/Transforms/TailCallElim/basic.ll