From 0af6eba921de98d90aac554a890e410ba26595d5 Mon Sep 17 00:00:00 2001 From: zoltan Date: Fri, 18 Jun 2010 14:38:03 +0000 Subject: [PATCH] 2010-06-18 Zoltan Varga * mini-llvm.c (process_bb): Add support for OP_SQRT when using the LLVM mono branch. git-svn-id: svn+ssh://mono-cvs.ximian.com/source/trunk/mono@159139 e3ebcda4-bce8-0310-ba0a-eca2169e7518 --- mono/mini/ChangeLog | 4 ++++ mono/mini/mini-llvm.c | 22 ++++++++++++---------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/mono/mini/ChangeLog b/mono/mini/ChangeLog index e615ddfb6..587ce5de4 100755 --- a/mono/mini/ChangeLog +++ b/mono/mini/ChangeLog @@ -1,3 +1,7 @@ +2010-06-18 Zoltan Varga + + * mini-llvm.c (process_bb): Add support for OP_SQRT when using the LLVM mono branch. + 2010-06-17 Geoff Norton * mini-arm.h: diff --git a/mono/mini/mini-llvm.c b/mono/mini/mini-llvm.c index 06f5eb900..46f8e329e 100644 --- a/mono/mini/mini-llvm.c +++ b/mono/mini/mini-llvm.c @@ -2915,17 +2915,19 @@ process_bb (EmitContext *ctx, MonoBasicBlock *bb) values [ins->dreg] = LLVMBuildCall (builder, LLVMGetNamedFunction (module, "llvm.cos.f64"), args, 1, dname); break; } - /* test_0_sqrt_nan fails with LLVM */ - /* - case OP_SQRT: { - LLVMValueRef args [1]; - - args [0] = lhs; - values [ins->dreg] = LLVMBuildCall (builder, LLVMGetNamedFunction (module, "llvm.sqrt.f64"), args, 1, dname); - break; - } - */ + case OP_SQRT: { + LLVMValueRef args [1]; + if (!IS_LLVM_MONO_BRANCH) + /* + * LLVM optimizes sqrt(nan) into undefined in + * lib/Analysis/ConstantFolding.cpp + */ + LLVM_FAILURE (ctx, "sqrt"); + args [0] = lhs; + values [ins->dreg] = LLVMBuildCall (builder, LLVMGetNamedFunction (module, "llvm.sqrt.f64"), args, 1, dname); + break; + } case OP_ABS: { LLVMValueRef args [1]; -- 2.11.4.GIT