summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CGCall.cpp
diff options
context:
space:
mode:
authorArtyom Skrobov <Artyom.Skrobov@arm.com>2015-10-20 13:14:52 +0000
committerArtyom Skrobov <Artyom.Skrobov@arm.com>2015-10-20 13:14:52 +0000
commit7fd67e25aa95e8702322841e40e8c5bf93e0ff29 (patch)
tree5060d7c85a8045cc534ffa76f5e953cc2b3bed73 /clang/lib/CodeGen/CGCall.cpp
parentb844fa7fc0aa4b47d062dea7495183d78d23b7b9 (diff)
downloadbcm5719-llvm-7fd67e25aa95e8702322841e40e8c5bf93e0ff29.tar.gz
bcm5719-llvm-7fd67e25aa95e8702322841e40e8c5bf93e0ff29.zip
Adding support for TargetLoweringBase::LibCall
Summary: TargetLoweringBase::Expand is defined as "Try to expand this to other ops, otherwise use a libcall." For ISD::UDIV and ISD::SDIV, the choice between the two possibilities was defined in a rather convoluted way: - if DIVREM is legal, expand to DIVREM - if DIVREM has a custom lowering, expand to DIVREM - if DIVREM libcall is defined and a remainder from the same division is computed elsewhere, expand to a DIVREM libcall - else, expand to a DIV libcall This had the undesirable effect that if both DIV and DIVREM are implemented as libcalls, then ISD::UDIV and ISD::SDIV are expanded to the heavier DIVREM libcall, even when the remainder isn't used. The new code adds a new LegalizeAction, TargetLoweringBase::LibCall, so that backends can directly control whether they prefer an expansion or a conversion to a libcall. This makes the generic lowering code even more generic, allowing its reuse in a wider range of target-specific configurations. The useful effect is that ARM backend will now generate a call to __aeabi_{i,u}div rather than __aeabi_{i,u}divmod in cases where it doesn't need the remainder. There's no functional change outside the ARM backend. Reviewers: t.p.northover, rengolin Subscribers: t.p.northover, llvm-commits, aemerson Differential Revision: http://reviews.llvm.org/D13862 llvm-svn: 250826
Diffstat (limited to 'clang/lib/CodeGen/CGCall.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud