diff options
author | Duncan Sands <baldrick@free.fr> | 2008-10-29 14:22:20 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2008-10-29 14:22:20 +0000 |
commit | d22ec5f62813f8cf2ed8091f44a14377209b1a59 (patch) | |
tree | e44982efd9dd16a78c8200883d8e35e6b6164e68 /lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp | |
parent | 54898938673d2a13ce31626ec34b2d4d314b2c81 (diff) |
Add sanity checking for BUILD_PAIR (I noticed the
other day that PPC custom lowering could create
a BUILD_PAIR of two f64 with a result type of...
f64! - already fixed). Fix a place that triggers
the sanity check.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@58378 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp')
-rw-r--r-- | lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp index d04daeb76b..e34e78fca6 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGBuild.cpp @@ -390,14 +390,17 @@ static SDValue getCopyFromParts(SelectionDAG &DAG, ValueVT : MVT::getIntegerVT(RoundBits); SDValue Lo, Hi; + MVT HalfVT = ValueVT.isInteger() ? + MVT::getIntegerVT(RoundBits/2) : + MVT::getFloatingPointVT(RoundBits/2); + if (RoundParts > 2) { - MVT HalfVT = MVT::getIntegerVT(RoundBits/2); Lo = getCopyFromParts(DAG, Parts, RoundParts/2, PartVT, HalfVT); Hi = getCopyFromParts(DAG, Parts+RoundParts/2, RoundParts/2, PartVT, HalfVT); } else { - Lo = Parts[0]; - Hi = Parts[1]; + Lo = DAG.getNode(ISD::BIT_CONVERT, HalfVT, Parts[0]); + Hi = DAG.getNode(ISD::BIT_CONVERT, HalfVT, Parts[1]); } if (TLI.isBigEndian()) std::swap(Lo, Hi); |