@@ -11602,9 +11602,11 @@ SDValue SITargetLowering::lowerPointerAsRsrcIntrin(SDNode *Op,
1160211602 SDValue NumRecords = Op->getOperand(3);
1160311603 SDValue Flags = Op->getOperand(4);
1160411604
11605+ SDValue ExtStride = DAG.getAnyExtOrTrunc(Stride, Loc, MVT::i32);
1160511606 SDValue Rsrc;
1160611607
1160711608 if (Subtarget->has45BitNumRecordsBufferResource()) {
11609+ SDValue Zero = DAG.getConstant(0, Loc, MVT::i32);
1160811610 // Build the lower 64-bit value, which has a 57-bit base and the lower 7-bit
1160911611 // num_records.
1161011612 SDValue ExtPointer = DAG.getAnyExtOrTrunc(Pointer, Loc, MVT::i64);
@@ -11619,20 +11621,24 @@ SDValue SITargetLowering::lowerPointerAsRsrcIntrin(SDNode *Op,
1161911621 SDValue NumRecordsRHS =
1162011622 DAG.getNode(ISD::SRL, Loc, MVT::i64, NumRecords,
1162111623 DAG.getShiftAmountConstant(7, MVT::i32, Loc));
11622- SDValue ExtStride = DAG.getAnyExtOrTrunc(Stride, Loc, MVT::i64);
1162311624 SDValue ShiftedStride =
11624- DAG.getNode(ISD::SHL, Loc, MVT::i64, ExtStride,
11625- DAG.getShiftAmountConstant(44, MVT::i32, Loc));
11626- SDValue ExtFlags = DAG.getAnyExtOrTrunc(Flags, Loc, MVT::i64);
11627- SDValue NewFlags = DAG.getNode(ISD::AND, Loc, MVT::i64, ExtFlags,
11628- DAG.getConstant(0x3, Loc, MVT::i64));
11625+ DAG.getNode(ISD::SHL, Loc, MVT::i32, ExtStride,
11626+ DAG.getShiftAmountConstant(12, MVT::i32, Loc));
11627+ SDValue ExtShiftedStrideVec =
11628+ DAG.getNode(ISD::BUILD_VECTOR, Loc, MVT::v2i32, Zero, ShiftedStride);
11629+ SDValue ExtShiftedStride =
11630+ DAG.getNode(ISD::BITCAST, Loc, MVT::i64, ExtShiftedStrideVec);
1162911631 SDValue ShiftedFlags =
11630- DAG.getNode(ISD::SHL, Loc, MVT::i64, NewFlags,
11631- DAG.getShiftAmountConstant(60, MVT::i32, Loc));
11632+ DAG.getNode(ISD::SHL, Loc, MVT::i32, Flags,
11633+ DAG.getShiftAmountConstant(28, MVT::i32, Loc));
11634+ SDValue ExtShiftedFlagsVec =
11635+ DAG.getNode(ISD::BUILD_VECTOR, Loc, MVT::v2i32, Zero, ShiftedFlags);
11636+ SDValue ExtShiftedFlags =
11637+ DAG.getNode(ISD::BITCAST, Loc, MVT::i64, ExtShiftedFlagsVec);
1163211638 SDValue CombinedFields =
11633- DAG.getNode(ISD::OR, Loc, MVT::i64, NumRecordsRHS, ShiftedStride );
11639+ DAG.getNode(ISD::OR, Loc, MVT::i64, NumRecordsRHS, ExtShiftedStride );
1163411640 SDValue HighHalf =
11635- DAG.getNode(ISD::OR, Loc, MVT::i64, CombinedFields, ShiftedFlags );
11641+ DAG.getNode(ISD::OR, Loc, MVT::i64, CombinedFields, ExtShiftedFlags );
1163611642
1163711643 Rsrc = DAG.getNode(ISD::BUILD_VECTOR, Loc, MVT::v2i64, LowHalf, HighHalf);
1163811644 } else {
@@ -11641,7 +11647,6 @@ SDValue SITargetLowering::lowerPointerAsRsrcIntrin(SDNode *Op,
1164111647 DAG.SplitScalar(Pointer, Loc, MVT::i32, MVT::i32);
1164211648 SDValue Mask = DAG.getConstant(0x0000ffff, Loc, MVT::i32);
1164311649 SDValue Masked = DAG.getNode(ISD::AND, Loc, MVT::i32, HighHalf, Mask);
11644- SDValue ExtStride = DAG.getAnyExtOrTrunc(Stride, Loc, MVT::i32);
1164511650 SDValue ShiftedStride =
1164611651 DAG.getNode(ISD::SHL, Loc, MVT::i32, ExtStride,
1164711652 DAG.getShiftAmountConstant(16, MVT::i32, Loc));
0 commit comments