aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReed Kotler <rkotler@mips.com>2013-08-25 02:40:25 +0000
committerReed Kotler <rkotler@mips.com>2013-08-25 02:40:25 +0000
commit5e5c3069cd92741852f10a7395133d6d79c5bce7 (patch)
treeb782bf475a1a3d3214ade4338a86309cc2ad1f14
parent676537aaaaaefe982207da058af27bb09ad1949d (diff)
downloadexternal_llvm-5e5c3069cd92741852f10a7395133d6d79c5bce7.zip
external_llvm-5e5c3069cd92741852f10a7395133d6d79c5bce7.tar.gz
external_llvm-5e5c3069cd92741852f10a7395133d6d79c5bce7.tar.bz2
Start to add the LLVM builtins to the mips16 exclusion lists for fp.
I need to add the rest of these to the list or else to delay putting out the actual stub until later in code generation when I know if the external function ever got emitted Resubmit this patch. The target triple needs to be added to the test so that clang does not tell the backend the wrong target when the host is BSD. There is a clang bug in here somewhere that I need to track down. At Mips this has been filed internally as a bug. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@189186 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/Mips/Mips16HardFloat.cpp2
-rw-r--r--test/CodeGen/Mips/powif64_16.ll28
2 files changed, 29 insertions, 1 deletions
diff --git a/lib/Target/Mips/Mips16HardFloat.cpp b/lib/Target/Mips/Mips16HardFloat.cpp
index 46b04c3..617c178 100644
--- a/lib/Target/Mips/Mips16HardFloat.cpp
+++ b/lib/Target/Mips/Mips16HardFloat.cpp
@@ -325,7 +325,7 @@ static void assureFPCallStub(Function &F, Module *M,
// Functions that are inline intrinsics don't need helpers.
//
static const char *IntrinsicInline[] =
- {"fabs"};
+ {"fabs", "llvm.powi.f64"};
static bool isIntrinsicInline(Function *F) {
return std::binary_search(
diff --git a/test/CodeGen/Mips/powif64_16.ll b/test/CodeGen/Mips/powif64_16.ll
new file mode 100644
index 0000000..8431f31
--- /dev/null
+++ b/test/CodeGen/Mips/powif64_16.ll
@@ -0,0 +1,28 @@
+; RUN: llc -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16 -mips16-hard-float -soft-float -relocation-model=static < %s | FileCheck %s
+
+@x = global double 4.500000e+00, align 8
+@i = global i32 4, align 4
+@y = common global double 0.000000e+00, align 8
+
+; Function Attrs: nounwind optsize
+define i32 @main() #0 {
+entry:
+ %0 = load double* @x, align 8, !tbaa !0
+ %1 = load i32* @i, align 4, !tbaa !3
+ %2 = tail call double @llvm.powi.f64(double %0, i32 %1)
+; CHECK-NOT: .ent __call_stub_fp_llvm.powi.f64
+; CHECK-NOT: {{.*}} jal llvm.powi.f64
+ store double %2, double* @y, align 8, !tbaa !0
+ ret i32 0
+}
+
+; Function Attrs: nounwind readonly
+declare double @llvm.powi.f64(double, i32) #1
+
+attributes #0 = { nounwind optsize "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float"="true" }
+attributes #1 = { nounwind readonly }
+
+!0 = metadata !{metadata !"double", metadata !1}
+!1 = metadata !{metadata !"omnipotent char", metadata !2}
+!2 = metadata !{metadata !"Simple C/C++ TBAA"}
+!3 = metadata !{metadata !"int", metadata !1}