From 61c7ef34e35dbf059cfc1add03780343dfe33459 Mon Sep 17 00:00:00 2001 From: Dale Johannesen Date: Sun, 21 Oct 2007 01:07:44 +0000 Subject: [PATCH] Allow for copysign having f80 second argument. Fixes 5550319. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43205 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86ISelLowering.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 2d16c3c63c6..4d528abb6b4 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -4040,6 +4040,15 @@ SDOperand X86TargetLowering::LowerFCOPYSIGN(SDOperand Op, SelectionDAG &DAG) { SrcVT = VT; SrcTy = MVT::getTypeForValueType(SrcVT); } + // And if it is bigger, shrink it first. + if (MVT::getSizeInBits(SrcVT) > MVT::getSizeInBits(VT)) { + Op1 = DAG.getNode(ISD::FP_ROUND, VT, Op1); + SrcVT = VT; + SrcTy = MVT::getTypeForValueType(SrcVT); + } + + // At this point the operands and the result should have the same + // type, and that won't be f80 since that is not custom lowered. // First get the sign bit of second operand. std::vector CV;