diff options
author | Dale Johannesen <dalej@apple.com> | 2007-10-21 01:07:44 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2007-10-21 01:07:44 +0000 |
commit | 61c7ef34e35dbf059cfc1add03780343dfe33459 (patch) | |
tree | 7d50f302db0df01edf7ed0fc3b50086a621eba4e | |
parent | d0e908e830b2d2415e501e862c0aafbb9d5c2a5f (diff) | |
download | external_llvm-61c7ef34e35dbf059cfc1add03780343dfe33459.zip external_llvm-61c7ef34e35dbf059cfc1add03780343dfe33459.tar.gz external_llvm-61c7ef34e35dbf059cfc1add03780343dfe33459.tar.bz2 |
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
-rw-r--r-- | lib/Target/X86/X86ISelLowering.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 2d16c3c..4d528ab 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<Constant*> CV; |