[CodeGen][ARM] ARM runtime helper functions are not always soft-fp
authorPeter Smith <peter.smith@linaro.org>
Thu, 27 Jul 2017 09:21:41 +0000 (09:21 +0000)
committerPeter Smith <peter.smith@linaro.org>
Thu, 27 Jul 2017 09:21:41 +0000 (09:21 +0000)
commit8459922df7bfdf34b9b58252a6ffa0205bbe44c7
tree4f20bc7b0bf47f993e02e6c689c5fbb80ca1a4a4
parentf88f81c4446df338fed041513ceb4c36a4445ec3
[CodeGen][ARM] ARM runtime helper functions are not always soft-fp

The ARM Runtime ABI document (IHI0043) defines the AEABI floating point
helper functions in 4.1.2 The floating-point helper functions. These
functions always use the base PCS (soft-fp). However helper functions
defined outside of this document such as the complex-number multiply and
divide helpers are not covered by this requirement and should use
hard-float PCS if the target is hard-float as both compiler-rt and libgcc
for a hard-float sysroot implement these functions with a hard-float PCS.

All of the floating point helper functions that are explicitly soft float
are expanded in the llvm ARM backend. This change makes clang not force the
BuiltinCC to AAPCS for AAPCS_VFP. With this change the ARM compiler-rt
tests involving _Complex pass with both hard-fp and soft-fp targets.

Differential Revision: https://reviews.llvm.org/D35538

llvm-svn: 309257
clang/lib/CodeGen/TargetInfo.cpp
clang/test/CodeGen/arm-float-helpers.c [new file with mode: 0644]
clang/test/CodeGen/complex-math.c