aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDale Johannesen <dalej@apple.com>2007-10-21 01:07:44 +0000
committerDale Johannesen <dalej@apple.com>2007-10-21 01:07:44 +0000
commit61c7ef34e35dbf059cfc1add03780343dfe33459 (patch)
tree7d50f302db0df01edf7ed0fc3b50086a621eba4e
parentd0e908e830b2d2415e501e862c0aafbb9d5c2a5f (diff)
downloadexternal_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.cpp9
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;