Deleted Added
full compact
LegalizeVectorTypes.cpp (199989) LegalizeVectorTypes.cpp (200581)
1//===------- LegalizeVectorTypes.cpp - Legalization of vector types -------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//

--- 40 unchanged lines hidden (view full) ---

49 case ISD::BIT_CONVERT: R = ScalarizeVecRes_BIT_CONVERT(N); break;
50 case ISD::BUILD_VECTOR: R = N->getOperand(0); break;
51 case ISD::CONVERT_RNDSAT: R = ScalarizeVecRes_CONVERT_RNDSAT(N); break;
52 case ISD::EXTRACT_SUBVECTOR: R = ScalarizeVecRes_EXTRACT_SUBVECTOR(N); break;
53 case ISD::FPOWI: R = ScalarizeVecRes_FPOWI(N); break;
54 case ISD::INSERT_VECTOR_ELT: R = ScalarizeVecRes_INSERT_VECTOR_ELT(N); break;
55 case ISD::LOAD: R = ScalarizeVecRes_LOAD(cast<LoadSDNode>(N));break;
56 case ISD::SCALAR_TO_VECTOR: R = ScalarizeVecRes_SCALAR_TO_VECTOR(N); break;
1//===------- LegalizeVectorTypes.cpp - Legalization of vector types -------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//

--- 40 unchanged lines hidden (view full) ---

49 case ISD::BIT_CONVERT: R = ScalarizeVecRes_BIT_CONVERT(N); break;
50 case ISD::BUILD_VECTOR: R = N->getOperand(0); break;
51 case ISD::CONVERT_RNDSAT: R = ScalarizeVecRes_CONVERT_RNDSAT(N); break;
52 case ISD::EXTRACT_SUBVECTOR: R = ScalarizeVecRes_EXTRACT_SUBVECTOR(N); break;
53 case ISD::FPOWI: R = ScalarizeVecRes_FPOWI(N); break;
54 case ISD::INSERT_VECTOR_ELT: R = ScalarizeVecRes_INSERT_VECTOR_ELT(N); break;
55 case ISD::LOAD: R = ScalarizeVecRes_LOAD(cast<LoadSDNode>(N));break;
56 case ISD::SCALAR_TO_VECTOR: R = ScalarizeVecRes_SCALAR_TO_VECTOR(N); break;
57 case ISD::SIGN_EXTEND_INREG: R = ScalarizeVecRes_SIGN_EXTEND_INREG(N); break;
57 case ISD::SELECT: R = ScalarizeVecRes_SELECT(N); break;
58 case ISD::SELECT_CC: R = ScalarizeVecRes_SELECT_CC(N); break;
59 case ISD::SETCC: R = ScalarizeVecRes_SETCC(N); break;
60 case ISD::UNDEF: R = ScalarizeVecRes_UNDEF(N); break;
61 case ISD::VECTOR_SHUFFLE: R = ScalarizeVecRes_VECTOR_SHUFFLE(N); break;
62 case ISD::VSETCC: R = ScalarizeVecRes_VSETCC(N); break;
63
64 case ISD::CTLZ:

--- 125 unchanged lines hidden (view full) ---

190 // truncated. Make that explicit here.
191 EVT EltVT = N->getValueType(0).getVectorElementType();
192 SDValue InOp = N->getOperand(0);
193 if (InOp.getValueType() != EltVT)
194 return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), EltVT, InOp);
195 return InOp;
196}
197
58 case ISD::SELECT: R = ScalarizeVecRes_SELECT(N); break;
59 case ISD::SELECT_CC: R = ScalarizeVecRes_SELECT_CC(N); break;
60 case ISD::SETCC: R = ScalarizeVecRes_SETCC(N); break;
61 case ISD::UNDEF: R = ScalarizeVecRes_UNDEF(N); break;
62 case ISD::VECTOR_SHUFFLE: R = ScalarizeVecRes_VECTOR_SHUFFLE(N); break;
63 case ISD::VSETCC: R = ScalarizeVecRes_VSETCC(N); break;
64
65 case ISD::CTLZ:

--- 125 unchanged lines hidden (view full) ---

191 // truncated. Make that explicit here.
192 EVT EltVT = N->getValueType(0).getVectorElementType();
193 SDValue InOp = N->getOperand(0);
194 if (InOp.getValueType() != EltVT)
195 return DAG.getNode(ISD::TRUNCATE, N->getDebugLoc(), EltVT, InOp);
196 return InOp;
197}
198
199SDValue DAGTypeLegalizer::ScalarizeVecRes_SIGN_EXTEND_INREG(SDNode *N) {
200 EVT EltVT = N->getValueType(0).getVectorElementType();
201 SDValue LHS = GetScalarizedVector(N->getOperand(0));
202 return DAG.getNode(ISD::SIGN_EXTEND_INREG, N->getDebugLoc(), EltVT,
203 LHS, N->getOperand(1));
204}
205
198SDValue DAGTypeLegalizer::ScalarizeVecRes_SELECT(SDNode *N) {
199 SDValue LHS = GetScalarizedVector(N->getOperand(1));
200 return DAG.getNode(ISD::SELECT, N->getDebugLoc(),
201 LHS.getValueType(), N->getOperand(0), LHS,
202 GetScalarizedVector(N->getOperand(2)));
203}
204
205SDValue DAGTypeLegalizer::ScalarizeVecRes_SELECT_CC(SDNode *N) {

--- 190 unchanged lines hidden (view full) ---

396 case ISD::BIT_CONVERT: SplitVecRes_BIT_CONVERT(N, Lo, Hi); break;
397 case ISD::BUILD_VECTOR: SplitVecRes_BUILD_VECTOR(N, Lo, Hi); break;
398 case ISD::CONCAT_VECTORS: SplitVecRes_CONCAT_VECTORS(N, Lo, Hi); break;
399 case ISD::CONVERT_RNDSAT: SplitVecRes_CONVERT_RNDSAT(N, Lo, Hi); break;
400 case ISD::EXTRACT_SUBVECTOR: SplitVecRes_EXTRACT_SUBVECTOR(N, Lo, Hi); break;
401 case ISD::FPOWI: SplitVecRes_FPOWI(N, Lo, Hi); break;
402 case ISD::INSERT_VECTOR_ELT: SplitVecRes_INSERT_VECTOR_ELT(N, Lo, Hi); break;
403 case ISD::SCALAR_TO_VECTOR: SplitVecRes_SCALAR_TO_VECTOR(N, Lo, Hi); break;
206SDValue DAGTypeLegalizer::ScalarizeVecRes_SELECT(SDNode *N) {
207 SDValue LHS = GetScalarizedVector(N->getOperand(1));
208 return DAG.getNode(ISD::SELECT, N->getDebugLoc(),
209 LHS.getValueType(), N->getOperand(0), LHS,
210 GetScalarizedVector(N->getOperand(2)));
211}
212
213SDValue DAGTypeLegalizer::ScalarizeVecRes_SELECT_CC(SDNode *N) {

--- 190 unchanged lines hidden (view full) ---

404 case ISD::BIT_CONVERT: SplitVecRes_BIT_CONVERT(N, Lo, Hi); break;
405 case ISD::BUILD_VECTOR: SplitVecRes_BUILD_VECTOR(N, Lo, Hi); break;
406 case ISD::CONCAT_VECTORS: SplitVecRes_CONCAT_VECTORS(N, Lo, Hi); break;
407 case ISD::CONVERT_RNDSAT: SplitVecRes_CONVERT_RNDSAT(N, Lo, Hi); break;
408 case ISD::EXTRACT_SUBVECTOR: SplitVecRes_EXTRACT_SUBVECTOR(N, Lo, Hi); break;
409 case ISD::FPOWI: SplitVecRes_FPOWI(N, Lo, Hi); break;
410 case ISD::INSERT_VECTOR_ELT: SplitVecRes_INSERT_VECTOR_ELT(N, Lo, Hi); break;
411 case ISD::SCALAR_TO_VECTOR: SplitVecRes_SCALAR_TO_VECTOR(N, Lo, Hi); break;
412 case ISD::SIGN_EXTEND_INREG: SplitVecRes_SIGN_EXTEND_INREG(N, Lo, Hi); break;
404 case ISD::LOAD:
405 SplitVecRes_LOAD(cast<LoadSDNode>(N), Lo, Hi);
406 break;
407 case ISD::SETCC:
408 case ISD::VSETCC:
409 SplitVecRes_SETCC(N, Lo, Hi);
410 break;
411 case ISD::VECTOR_SHUFFLE:

--- 283 unchanged lines hidden (view full) ---

695 SDValue &Hi) {
696 EVT LoVT, HiVT;
697 DebugLoc dl = N->getDebugLoc();
698 GetSplitDestVTs(N->getValueType(0), LoVT, HiVT);
699 Lo = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, LoVT, N->getOperand(0));
700 Hi = DAG.getUNDEF(HiVT);
701}
702
413 case ISD::LOAD:
414 SplitVecRes_LOAD(cast<LoadSDNode>(N), Lo, Hi);
415 break;
416 case ISD::SETCC:
417 case ISD::VSETCC:
418 SplitVecRes_SETCC(N, Lo, Hi);
419 break;
420 case ISD::VECTOR_SHUFFLE:

--- 283 unchanged lines hidden (view full) ---

704 SDValue &Hi) {
705 EVT LoVT, HiVT;
706 DebugLoc dl = N->getDebugLoc();
707 GetSplitDestVTs(N->getValueType(0), LoVT, HiVT);
708 Lo = DAG.getNode(ISD::SCALAR_TO_VECTOR, dl, LoVT, N->getOperand(0));
709 Hi = DAG.getUNDEF(HiVT);
710}
711
712void DAGTypeLegalizer::SplitVecRes_SIGN_EXTEND_INREG(SDNode *N, SDValue &Lo,
713 SDValue &Hi) {
714 SDValue LHSLo, LHSHi;
715 GetSplitVector(N->getOperand(0), LHSLo, LHSHi);
716 DebugLoc dl = N->getDebugLoc();
717
718 Lo = DAG.getNode(N->getOpcode(), dl, LHSLo.getValueType(), LHSLo,
719 N->getOperand(1));
720 Hi = DAG.getNode(N->getOpcode(), dl, LHSHi.getValueType(), LHSHi,
721 N->getOperand(1));
722}
723
703void DAGTypeLegalizer::SplitVecRes_LOAD(LoadSDNode *LD, SDValue &Lo,
704 SDValue &Hi) {
705 assert(ISD::isUNINDEXEDLoad(LD) && "Indexed load during type legalization!");
706 EVT LoVT, HiVT;
707 DebugLoc dl = LD->getDebugLoc();
708 GetSplitDestVTs(LD->getValueType(0), LoVT, HiVT);
709
710 ISD::LoadExtType ExtType = LD->getExtensionType();

--- 425 unchanged lines hidden (view full) ---

1136 case ISD::BIT_CONVERT: Res = WidenVecRes_BIT_CONVERT(N); break;
1137 case ISD::BUILD_VECTOR: Res = WidenVecRes_BUILD_VECTOR(N); break;
1138 case ISD::CONCAT_VECTORS: Res = WidenVecRes_CONCAT_VECTORS(N); break;
1139 case ISD::CONVERT_RNDSAT: Res = WidenVecRes_CONVERT_RNDSAT(N); break;
1140 case ISD::EXTRACT_SUBVECTOR: Res = WidenVecRes_EXTRACT_SUBVECTOR(N); break;
1141 case ISD::INSERT_VECTOR_ELT: Res = WidenVecRes_INSERT_VECTOR_ELT(N); break;
1142 case ISD::LOAD: Res = WidenVecRes_LOAD(N); break;
1143 case ISD::SCALAR_TO_VECTOR: Res = WidenVecRes_SCALAR_TO_VECTOR(N); break;
724void DAGTypeLegalizer::SplitVecRes_LOAD(LoadSDNode *LD, SDValue &Lo,
725 SDValue &Hi) {
726 assert(ISD::isUNINDEXEDLoad(LD) && "Indexed load during type legalization!");
727 EVT LoVT, HiVT;
728 DebugLoc dl = LD->getDebugLoc();
729 GetSplitDestVTs(LD->getValueType(0), LoVT, HiVT);
730
731 ISD::LoadExtType ExtType = LD->getExtensionType();

--- 425 unchanged lines hidden (view full) ---

1157 case ISD::BIT_CONVERT: Res = WidenVecRes_BIT_CONVERT(N); break;
1158 case ISD::BUILD_VECTOR: Res = WidenVecRes_BUILD_VECTOR(N); break;
1159 case ISD::CONCAT_VECTORS: Res = WidenVecRes_CONCAT_VECTORS(N); break;
1160 case ISD::CONVERT_RNDSAT: Res = WidenVecRes_CONVERT_RNDSAT(N); break;
1161 case ISD::EXTRACT_SUBVECTOR: Res = WidenVecRes_EXTRACT_SUBVECTOR(N); break;
1162 case ISD::INSERT_VECTOR_ELT: Res = WidenVecRes_INSERT_VECTOR_ELT(N); break;
1163 case ISD::LOAD: Res = WidenVecRes_LOAD(N); break;
1164 case ISD::SCALAR_TO_VECTOR: Res = WidenVecRes_SCALAR_TO_VECTOR(N); break;
1165 case ISD::SIGN_EXTEND_INREG: Res = WidenVecRes_SIGN_EXTEND_INREG(N); break;
1144 case ISD::SELECT: Res = WidenVecRes_SELECT(N); break;
1145 case ISD::SELECT_CC: Res = WidenVecRes_SELECT_CC(N); break;
1146 case ISD::UNDEF: Res = WidenVecRes_UNDEF(N); break;
1147 case ISD::VECTOR_SHUFFLE:
1148 Res = WidenVecRes_VECTOR_SHUFFLE(cast<ShuffleVectorSDNode>(N));
1149 break;
1150 case ISD::VSETCC:
1151 Res = WidenVecRes_VSETCC(N);

--- 534 unchanged lines hidden (view full) ---

1686}
1687
1688SDValue DAGTypeLegalizer::WidenVecRes_SCALAR_TO_VECTOR(SDNode *N) {
1689 EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
1690 return DAG.getNode(ISD::SCALAR_TO_VECTOR, N->getDebugLoc(),
1691 WidenVT, N->getOperand(0));
1692}
1693
1166 case ISD::SELECT: Res = WidenVecRes_SELECT(N); break;
1167 case ISD::SELECT_CC: Res = WidenVecRes_SELECT_CC(N); break;
1168 case ISD::UNDEF: Res = WidenVecRes_UNDEF(N); break;
1169 case ISD::VECTOR_SHUFFLE:
1170 Res = WidenVecRes_VECTOR_SHUFFLE(cast<ShuffleVectorSDNode>(N));
1171 break;
1172 case ISD::VSETCC:
1173 Res = WidenVecRes_VSETCC(N);

--- 534 unchanged lines hidden (view full) ---

1708}
1709
1710SDValue DAGTypeLegalizer::WidenVecRes_SCALAR_TO_VECTOR(SDNode *N) {
1711 EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
1712 return DAG.getNode(ISD::SCALAR_TO_VECTOR, N->getDebugLoc(),
1713 WidenVT, N->getOperand(0));
1714}
1715
1716SDValue DAGTypeLegalizer::WidenVecRes_SIGN_EXTEND_INREG(SDNode *N) {
1717 EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
1718 SDValue WidenLHS = GetWidenedVector(N->getOperand(0));
1719 return DAG.getNode(ISD::SIGN_EXTEND_INREG, N->getDebugLoc(),
1720 WidenVT, WidenLHS, N->getOperand(1));
1721}
1722
1694SDValue DAGTypeLegalizer::WidenVecRes_SELECT(SDNode *N) {
1695 EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
1696 unsigned WidenNumElts = WidenVT.getVectorNumElements();
1697
1698 SDValue Cond1 = N->getOperand(0);
1699 EVT CondVT = Cond1.getValueType();
1700 if (CondVT.isVector()) {
1701 EVT CondEltVT = CondVT.getVectorElementType();

--- 494 unchanged lines hidden ---
1723SDValue DAGTypeLegalizer::WidenVecRes_SELECT(SDNode *N) {
1724 EVT WidenVT = TLI.getTypeToTransformTo(*DAG.getContext(), N->getValueType(0));
1725 unsigned WidenNumElts = WidenVT.getVectorNumElements();
1726
1727 SDValue Cond1 = N->getOperand(0);
1728 EVT CondVT = Cond1.getValueType();
1729 if (CondVT.isVector()) {
1730 EVT CondEltVT = CondVT.getVectorElementType();

--- 494 unchanged lines hidden ---