From: Petr Hosek Date: Sun, 23 Jul 2017 22:30:00 +0000 (+0000) Subject: [CodeGen][X86] Fuchsia supports sincos* libcalls and sin+cos->sincos optimization X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=b12c7b197482e4535139715f7e9acf087c10fcfc;p=llvm [CodeGen][X86] Fuchsia supports sincos* libcalls and sin+cos->sincos optimization Patch by Roland McGrath Differential Revision: https://reviews.llvm.org/D35748 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@308854 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/TargetLoweringBase.cpp b/lib/CodeGen/TargetLoweringBase.cpp index 8be9e192e5b..40a126a89fc 100644 --- a/lib/CodeGen/TargetLoweringBase.cpp +++ b/lib/CodeGen/TargetLoweringBase.cpp @@ -97,7 +97,7 @@ static void InitLibcallNames(const char **Names, const Triple &TT) { Names[RTLIB::FPROUND_F32_F16] = "__gnu_f2h_ieee"; } - if (TT.isGNUEnvironment()) { + if (TT.isGNUEnvironment() || TT.isOSFuchsia()) { Names[RTLIB::SINCOS_F32] = "sincosf"; Names[RTLIB::SINCOS_F64] = "sincos"; Names[RTLIB::SINCOS_F80] = "sincosl"; diff --git a/lib/Target/X86/X86Subtarget.cpp b/lib/Target/X86/X86Subtarget.cpp index 24845beac22..ea921cfac23 100644 --- a/lib/Target/X86/X86Subtarget.cpp +++ b/lib/Target/X86/X86Subtarget.cpp @@ -189,9 +189,12 @@ const char *X86Subtarget::getBZeroEntry() const { } bool X86Subtarget::hasSinCos() const { - return getTargetTriple().isMacOSX() && - !getTargetTriple().isMacOSXVersionLT(10, 9) && - is64Bit(); + if (getTargetTriple().isMacOSX()) { + return !getTargetTriple().isMacOSXVersionLT(10, 9) && is64Bit(); + } else if (getTargetTriple().isOSFuchsia()) { + return true; + } + return false; } /// Return true if the subtarget allows calls to immediate address. diff --git a/test/CodeGen/X86/sincos-opt.ll b/test/CodeGen/X86/sincos-opt.ll index e2fd63eab30..dfe6e784e38 100644 --- a/test/CodeGen/X86/sincos-opt.ll +++ b/test/CodeGen/X86/sincos-opt.ll @@ -3,6 +3,8 @@ ; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu -mcpu=core2 | FileCheck %s --check-prefix=GNU_SINCOS ; RUN: llc < %s -mtriple=x86_64-pc-linux-gnu -mcpu=core2 -enable-unsafe-fp-math | FileCheck %s --check-prefix=GNU_SINCOS_FASTMATH ; RUN: llc < %s -mtriple=x86_64-pc-linux-gnux32 -mcpu=core2 -enable-unsafe-fp-math | FileCheck %s --check-prefix=GNU_SINCOS_FASTMATH +; RUN: llc < %s -mtriple=x86_64-fuchsia -mcpu=core2 | FileCheck %s --check-prefix=GNU_SINCOS +; RUN: llc < %s -mtriple=x86_64-fuchsia -mcpu=core2 -enable-unsafe-fp-math | FileCheck %s --check-prefix=GNU_SINCOS_FASTMATH ; Combine sin / cos into a single call unless they may write errno (as ; captured by readnone attrbiute, controlled by clang -fmath-errno