@@ -2499,16 +2499,18 @@ HexagonTargetLowering::buildVector32(ArrayRef<SDValue> Elem, const SDLoc &dl,
2499
2499
// (zxtb(Elem[0]) | (zxtb(Elem[1]) << 8)) |
2500
2500
// (zxtb(Elem[2]) | (zxtb(Elem[3]) << 8)) << 16
2501
2501
SDValue S8 = DAG.getConstant (8 , dl, MVT::i32);
2502
- SDValue S16 = DAG.getConstant (16 , dl, MVT::i32);
2503
- SDValue V0 = DAG.getZExtOrTrunc (Elem[0 ], dl, MVT::i32);
2504
- SDValue V1 = DAG.getZExtOrTrunc (Elem[2 ], dl, MVT::i32);
2505
- SDValue V2 = DAG.getNode (ISD::SHL, dl, MVT::i32, {Elem[1 ], S8});
2506
- SDValue V3 = DAG.getNode (ISD::SHL, dl, MVT::i32, {Elem[3 ], S8});
2507
- SDValue V4 = DAG.getNode (ISD::OR, dl, MVT::i32, {V0, V2});
2508
- SDValue V5 = DAG.getNode (ISD::OR, dl, MVT::i32, {V1, V3});
2509
- SDValue V6 = DAG.getNode (ISD::SHL, dl, MVT::i32, {V5, S16});
2510
- SDValue V7 = DAG.getNode (ISD::OR, dl, MVT::i32, {V4, V6});
2511
- return DAG.getBitcast (MVT::v4i8, V7);
2502
+ SDValue V0 = DAG.getZeroExtendInReg (Elem[0 ], dl, MVT::i8);
2503
+ SDValue V1 = DAG.getZeroExtendInReg (Elem[1 ], dl, MVT::i8);
2504
+ SDValue V2 = DAG.getZeroExtendInReg (Elem[2 ], dl, MVT::i8);
2505
+ SDValue V3 = DAG.getZeroExtendInReg (Elem[3 ], dl, MVT::i8);
2506
+
2507
+ SDValue V4 = DAG.getNode (ISD::SHL, dl, MVT::i32, {V1, S8});
2508
+ SDValue V5 = DAG.getNode (ISD::SHL, dl, MVT::i32, {V3, S8});
2509
+ SDValue V6 = DAG.getNode (ISD::OR, dl, MVT::i32, {V0, V4});
2510
+ SDValue V7 = DAG.getNode (ISD::OR, dl, MVT::i32, {V2, V5});
2511
+ SDNode *T0 = DAG.getMachineNode (Hexagon::A2_combine_ll, dl, MVT::i32,
2512
+ {V7, V6});
2513
+ return DAG.getBitcast (MVT::v4i8, SDValue (T0,0 ));
2512
2514
}
2513
2515
2514
2516
SDValue
0 commit comments