[llvm] r189186 - Start to add the LLVM builtins to the mips16 exclusion lists for fp.

Reed Kotler rkotler at mips.com
Sat Aug 24 19:40:25 PDT 2013


Author: rkotler
Date: Sat Aug 24 21:40:25 2013
New Revision: 189186

URL: http://llvm.org/viewvc/llvm-project?rev=189186&view=rev
Log:
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.



Added:
    llvm/trunk/test/CodeGen/Mips/powif64_16.ll
Modified:
    llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp

Modified: llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp?rev=189186&r1=189185&r2=189186&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp (original)
+++ llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp Sat Aug 24 21:40:25 2013
@@ -325,7 +325,7 @@ static void assureFPCallStub(Function &F
 // 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(

Added: llvm/trunk/test/CodeGen/Mips/powif64_16.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Mips/powif64_16.ll?rev=189186&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Mips/powif64_16.ll (added)
+++ llvm/trunk/test/CodeGen/Mips/powif64_16.ll Sat Aug 24 21:40:25 2013
@@ -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 
+
+ at x = global double 4.500000e+00, align 8
+ at i = global i32 4, align 4
+ at 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}





More information about the llvm-commits mailing list