summaryrefslogtreecommitdiff
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorNadav Rotem <nadav.rotem@intel.com>2011-10-21 17:35:19 +0000
committerNadav Rotem <nadav.rotem@intel.com>2011-10-21 17:35:19 +0000
commita054bcb4cf26f9710bf6b7b256ba7313260a7335 (patch)
treec977e2d760488c8233649ab9f03737a452a1dde7 /lib/CodeGen
parent7926db82686be283ec4cdb68989806c69f388cb1 (diff)
downloadllvm-a054bcb4cf26f9710bf6b7b256ba7313260a7335.tar.gz
llvm-a054bcb4cf26f9710bf6b7b256ba7313260a7335.tar.bz2
llvm-a054bcb4cf26f9710bf6b7b256ba7313260a7335.tar.xz
Fix pr11194. When promoting and splitting integers we need to use
ZExtPromotedInteger and SExtPromotedInteger based on the operation we legalize. SetCC return type needs to be legalized via PromoteTargetBoolean. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142660 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp b/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
index e950e072bc..8916e08206 100644
--- a/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
+++ b/lib/CodeGen/SelectionDAG/LegalizeVectorTypes.cpp
@@ -787,7 +787,17 @@ void DAGTypeLegalizer::SplitVecRes_UnaryOp(SDNode *N, SDValue &Lo,
break;
}
case TargetLowering::TypePromoteInteger: {
- SDValue InOp = GetPromotedInteger(N->getOperand(0));
+ SDValue InOp;
+ if (N->getOpcode() == ISD::SIGN_EXTEND ||
+ N->getOpcode() == ISD::SINT_TO_FP) {
+ InOp = SExtPromotedInteger(N->getOperand(0));
+ } else if (
+ N->getOpcode() == ISD::ZERO_EXTEND ||
+ N->getOpcode() == ISD::UINT_TO_FP) {
+ InOp = ZExtPromotedInteger(N->getOperand(0));
+ } else {
+ InOp = GetPromotedInteger(N->getOperand(0));
+ }
EVT InNVT = EVT::getVectorVT(*DAG.getContext(),
InOp.getValueType().getVectorElementType(),
LoVT.getVectorNumElements());
@@ -2189,8 +2199,7 @@ SDValue DAGTypeLegalizer::WidenVecOp_SETCC(SDNode *N) {
SDValue CC = DAG.getNode(ISD::EXTRACT_SUBVECTOR, dl,
ResVT, WideSETCC, DAG.getIntPtrConstant(0));
- // Convert the result mask to the correct kind.
- return DAG.getAnyExtOrTrunc(CC, dl, N->getValueType(0));
+ return PromoteTargetBoolean(CC, N->getValueType(0));
}