@@ -2319,39 +2319,39 @@ SDValue NVPTXTargetLowering::LowerBITCAST(SDValue Op, SelectionDAG &DAG) const {
23192319 // Handle bitcasting to/from v2i8 without hitting the default promotion
23202320 // strategy which goes through stack memory.
23212321 SDNode *Node = Op.getNode ();
2322- SDLoc dl (Node);
2322+ SDLoc DL (Node);
23232323
2324- auto maybeBitcast = [&](EVT vt, SDValue val) {
2325- if (val->getValueType (0 ) == vt) {
2326- return val;
2327- }
2328- return DAG.getNode (ISD::BITCAST, dl, vt, val);
2324+ auto maybeBitcast = [&](EVT VT, SDValue Value) {
2325+ if (Value->getValueType (0 ) == VT)
2326+ return Value;
2327+ return DAG.getNode (ISD::BITCAST, DL, VT, Value);
23292328 };
23302329
2331- EVT VT = Op->getValueType (0 );
2332- EVT fromVT = Op->getOperand (0 )->getValueType (0 );
2330+ EVT ToVT = Op->getValueType (0 );
2331+ EVT FromVT = Op->getOperand (0 )->getValueType (0 );
23332332
2334- if (VT == MVT::v2i8) {
2333+ if (ToVT == MVT::v2i8) {
23352334 // Bitcast to i16 and unpack elements into a vector
2336- SDValue reg = maybeBitcast (MVT::i16 , Op->getOperand (0 ));
2337- SDValue v0 = DAG.getNode (ISD::TRUNCATE, dl, MVT::i8 , reg);
2338- SDValue C8 = DAG.getConstant (8 , dl, MVT::i16 );
2339- SDValue v1 = DAG.getNode (ISD::TRUNCATE, dl, MVT::i8 ,
2340- DAG.getNode (ISD::SRL, dl, MVT::i16 , {reg, C8}));
2341- return DAG.getNode (ISD::BUILD_VECTOR, dl, MVT::v2i8, {v0, v1});
2342- } else if (fromVT == MVT::v2i8) {
2335+ SDValue AsInt = maybeBitcast (MVT::i16 , Op->getOperand (0 ));
2336+ SDValue Vec0 = DAG.getNode (ISD::TRUNCATE, DL, MVT::i8 , AsInt);
2337+ SDValue Const8 = DAG.getConstant (8 , DL, MVT::i16 );
2338+ SDValue Vec1 =
2339+ DAG.getNode (ISD::TRUNCATE, DL, MVT::i8 ,
2340+ DAG.getNode (ISD::SRL, DL, MVT::i16 , {AsInt, Const8}));
2341+ return DAG.getNode (ISD::BUILD_VECTOR, DL, MVT::v2i8, {Vec0, Vec1});
2342+ } else if (FromVT == MVT::v2i8) {
23432343 // Pack vector elements into i16 and bitcast to final type
2344- SDValue v0 = DAG.getNode (ISD::EXTRACT_VECTOR_ELT, dl , MVT::i8 ,
2345- Op->getOperand (0 ), DAG.getIntPtrConstant (0 , dl ));
2346- SDValue v1 = DAG.getNode (ISD::EXTRACT_VECTOR_ELT, dl , MVT::i8 ,
2347- Op->getOperand (0 ), DAG.getIntPtrConstant (1 , dl ));
2348- SDValue E0 = DAG.getNode (ISD::ZERO_EXTEND, dl , MVT::i16 , v0 );
2349- SDValue E1 = DAG.getNode (ISD::ZERO_EXTEND, dl , MVT::i16 , v1 );
2350- SDValue C8 = DAG.getConstant (8 , dl , MVT::i16 );
2351- SDValue reg =
2352- DAG. getNode ( ISD::OR, dl , MVT::i16 ,
2353- { E0 , DAG.getNode (ISD::SHL, dl , MVT::i16 , {E1 , C8 })});
2354- return maybeBitcast (VT, reg );
2344+ SDValue Vec0 = DAG.getNode (ISD::EXTRACT_VECTOR_ELT, DL , MVT::i8 ,
2345+ Op->getOperand (0 ), DAG.getIntPtrConstant (0 , DL ));
2346+ SDValue Vec1 = DAG.getNode (ISD::EXTRACT_VECTOR_ELT, DL , MVT::i8 ,
2347+ Op->getOperand (0 ), DAG.getIntPtrConstant (1 , DL ));
2348+ SDValue Extend0 = DAG.getNode (ISD::ZERO_EXTEND, DL , MVT::i16 , Vec0 );
2349+ SDValue Extend1 = DAG.getNode (ISD::ZERO_EXTEND, DL , MVT::i16 , Vec1 );
2350+ SDValue Const8 = DAG.getConstant (8 , DL , MVT::i16 );
2351+ SDValue AsInt = DAG. getNode (
2352+ ISD::OR, DL , MVT::i16 ,
2353+ {Extend0 , DAG.getNode (ISD::SHL, DL , MVT::i16 , {Extend1, Const8 })});
2354+ return maybeBitcast (ToVT, AsInt );
23552355 }
23562356 return Op;
23572357}
0 commit comments