Remove DisableTailCalls from TargetOptions and the code in resetTargetOptions
authorAkira Hatanaka <ahatanaka@apple.com>
Tue, 9 Jun 2015 19:07:19 +0000 (19:07 +0000)
committerAkira Hatanaka <ahatanaka@apple.com>
Tue, 9 Jun 2015 19:07:19 +0000 (19:07 +0000)
commit0e3246a86f553aa6fae35d3bfb91de81dd66a18b
tree1d511d8659e84925b625cd5143a6583385962ab3
parentebfbf931a2c56b7d7215ce15dd01c29b1efb7338
Remove DisableTailCalls from TargetOptions and the code in resetTargetOptions
that was resetting it.

Remove the uses of DisableTailCalls in subclasses of TargetLowering and use
the value of function attribute "disable-tail-calls" instead. Also,
unconditionally add pass TailCallElim to the pipeline and check the function
attribute at the start of runOnFunction to disable the pass on a per-function
basis.

This is part of the work to remove TargetMachine::resetTargetOptions, and since
DisableTailCalls was the last non-fast-math option that was being reset in that
function, we should be able to remove the function entirely after the work to
propagate IR-level fast-math flags to DAG nodes is completed.

Out-of-tree users should remove the uses of DisableTailCalls and make changes
to attach attribute "disable-tail-calls"="true" or "false" to the functions in
the IR.

rdar://problem/13752163

Differential Revision: http://reviews.llvm.org/D10099

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239427 91177308-0d34-0410-b5e6-96231b3b80d8
include/llvm/CodeGen/CommandFlags.h
include/llvm/Target/TargetOptions.h
lib/Target/ARM/ARMISelLowering.cpp
lib/Target/Hexagon/HexagonISelLowering.cpp
lib/Target/TargetMachine.cpp
lib/Target/X86/X86ISelLowering.cpp
lib/Transforms/IPO/PassManagerBuilder.cpp
lib/Transforms/Scalar/TailRecursionElimination.cpp
test/CodeGen/ARM/disable-tail-calls.ll [new file with mode: 0644]
test/CodeGen/X86/disable-tail-calls.ll [new file with mode: 0644]