Author: johannes Date: Thu Sep 27 20:10:03 2007 New Revision: 42425 URL: http://llvm.org/viewvc/llvm-project?rev=42425&view=rev Log: Add long double intrinsics for sqrt and powi.
Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Modified: llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp URL: http://llvm.org/viewvc/llvm-project/llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp?rev=42425&r1=42424&r2=42425&view=diff ============================================================================== --- llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp (original) +++ llvm-gcc-4.2/trunk/gcc/llvm-convert.cpp Thu Sep 27 20:10:03 2007 @@ -3916,9 +3916,6 @@ case BUILT_IN_UNWIND_INIT: return EmitBuiltinUnwindInit(exp, Result); -#define HANDLE_UNARY_FP(F32, F64, V) \ - Result = EmitBuiltinUnaryFPOp(V, Intrinsic::F32, Intrinsic::F64) - // Unary bit counting intrinsics. // NOTE: do not merge these case statements. That will cause the memoized // Function* to be incorrectly shared across the different typed functions. @@ -3961,22 +3958,19 @@ Result = Builder.CreateIntCast(Result, DestTy, "cast"); return true; } - case BUILT_IN_SQRTL: - return false; // treat long double as normal call case BUILT_IN_SQRT: case BUILT_IN_SQRTF: + case BUILT_IN_SQRTL: // If errno math has been disabled, expand these to llvm.sqrt calls. if (!flag_errno_math) { - Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0); - HANDLE_UNARY_FP(sqrt_f32, sqrt_f64, Amt); + Result = EmitBuiltinSQRT(exp); Result = CastToFPType(Result, ConvertType(TREE_TYPE(exp))); return true; } break; - case BUILT_IN_POWIL: - return false; // treat long double as normal call case BUILT_IN_POWI: case BUILT_IN_POWIF: + case BUILT_IN_POWIL: Result = EmitBuiltinPOWI(exp); return true; case BUILT_IN_FFS: // These GCC builtins always return int. @@ -3996,9 +3990,6 @@ return true; } - -#undef HANDLE_UNARY_FP - #if 1 // FIXME: Should handle these GCC extensions eventually. case BUILT_IN_APPLY_ARGS: case BUILT_IN_APPLY: @@ -4058,15 +4049,17 @@ Amt, "tmp"); } -Value *TreeToLLVM::EmitBuiltinUnaryFPOp(Value *Amt, - Intrinsic::ID F32ID, - Intrinsic::ID F64ID) { +Value *TreeToLLVM::EmitBuiltinSQRT(tree exp) { + Value *Amt = Emit(TREE_VALUE(TREE_OPERAND(exp, 1)), 0); Intrinsic::ID Id = Intrinsic::not_intrinsic; switch (Amt->getType()->getTypeID()) { default: assert(0 && "Unknown FP type!"); - case Type::FloatTyID: Id = F32ID; break; - case Type::DoubleTyID: Id = F64ID; break; + case Type::FloatTyID: Id = Intrinsic::sqrt_f32; break; + case Type::DoubleTyID: Id = Intrinsic::sqrt_f64; break; + case Type::X86_FP80TyID: Id = Intrinsic::sqrt_f80; break; + case Type::FP128TyID: Id = Intrinsic::sqrt_f128; break; + case Type::PPC_FP128TyID: Id = Intrinsic::sqrt_ppcf128; break; } return Builder.CreateCall(Intrinsic::getDeclaration(TheModule, Id), @@ -4088,6 +4081,9 @@ default: assert(0 && "Unknown FP type!"); case Type::FloatTyID: Id = Intrinsic::powi_f32; break; case Type::DoubleTyID: Id = Intrinsic::powi_f64; break; + case Type::X86_FP80TyID: Id = Intrinsic::powi_f80; break; + case Type::FP128TyID: Id = Intrinsic::powi_f128; break; + case Type::PPC_FP128TyID: Id = Intrinsic::powi_ppcf128; break; } SmallVector<Value *,2> Args; _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits