[llvm] r189727 - Make sure we don't generate stubs for any of these functions because they

Reed Kotler rkotler at mips.com
Sat Aug 31 21:12:59 PDT 2013


Author: rkotler
Date: Sat Aug 31 23:12:59 2013
New Revision: 189727

URL: http://llvm.org/viewvc/llvm-project?rev=189727&view=rev
Log:
Make sure we don't generate stubs for any of these functions because they
don't exist in libc. This is really not the right way to solve this problem;
but it's not clear to me at this time exactly what is the right way.
If we create stubs here, they will cause link errors because these functions
do not exist in libc.


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

Modified: llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp?rev=189727&r1=189726&r2=189727&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp (original)
+++ llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp Sat Aug 31 23:12:59 2013
@@ -322,10 +322,29 @@ static void assureFPCallStub(Function &F
 }
 
 //
-// Functions that are inline intrinsics don't need helpers.
+// Functions that are llvm intrinsics and don't need helpers.
 //
 static const char *IntrinsicInline[] =
-  {"fabs", "llvm.powi.f64"};
+  {"fabs",
+   "llvm.ceil.f32", "llvm.ceil.f64",
+   "llvm.copysign.f32", "llvm.copysign.f64",
+   "llvm.cos.f32", "llvm.cos.f64",
+   "llvm.exp.f32", "llvm.exp.f64",
+   "llvm.exp2.f32", "llvm.exp2.f64",
+   "llvm.fabs.f32", "llvm.fabs.f64",
+   "llvm.floor.f32", "llvm.floor.f64",
+   "llvm.fma.f32", "llvm.fma.f64",
+   "llvm.log.f32", "llvm.log.f64",
+   "llvm.log10.f32", "llvm.log10.f64",
+   "llvm.nearbyint.f32", "llvm.nearbyint.f64",
+   "llvm.pow.f32", "llvm.pow.f64",
+   "llvm.powi.f32", "llvm.powi.f64",
+   "llvm.rint.f32", "llvm.rint.f64",
+   "llvm.round.f32", "llvm.round.f64",
+   "llvm.sin.f32", "llvm.sin.f64",
+   "llvm.sqrt.f32", "llvm.sqrt.f64",
+   "llvm.trunc.f32", "llvm.trunc.f64",
+  };
 
 static bool isIntrinsicInline(Function *F) {
   return std::binary_search(

Modified: llvm/trunk/test/CodeGen/Mips/powif64_16.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Mips/powif64_16.ll?rev=189727&r1=189726&r2=189727&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/Mips/powif64_16.ll (original)
+++ llvm/trunk/test/CodeGen/Mips/powif64_16.ll Sat Aug 31 23:12:59 2013
@@ -1,23 +1,21 @@
 ; 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
+declare float     @llvm.powi.f32(float  %Val, i32 %power)
+declare double    @llvm.powi.f64(double %Val, i32 %power)
 
-; 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)
+define float @foo_pow_f32(float %y, i32 %p)  {
+  %1 = tail call float @llvm.powi.f32(float %y, i32 %p)
+; CHECK-NOT: .ent	__call_stub_fp_llvm.powi.f32
+; CHECK-NOT: {{.*}} jal llvm.powi.f32
+  ret float %1
+} 
+
+define double @foo_pow_f64(double %y, i32 %p)  {
+  %1 = tail call double @llvm.powi.f64(double %y, i32 %p)
 ; 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
+  ret double %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 }





More information about the llvm-commits mailing list