@@ -11615,16 +11615,24 @@ SDValue SITargetLowering::lowerPointerAsRsrcIntrin(SDNode *Op,
1161511615 DAG.getNode(ISD::OR, Loc, MVT::i64, ExtPointer, NumRecordsLHS);
1161611616
1161711617 // Build the higher 64-bit value, which has the higher 38-bit num_records,
11618- // 6-bit zero (omit), 14 -bit stride and 6 -bit zero (omit) .
11618+ // 6-bit zero (omit), 16 -bit stride and scale and 4 -bit flag .
1161911619 SDValue NumRecordsRHS =
1162011620 DAG.getNode(ISD::SRL, Loc, MVT::i64, NumRecords,
1162111621 DAG.getShiftAmountConstant(7, MVT::i32, Loc));
1162211622 SDValue ExtStride = DAG.getAnyExtOrTrunc(Stride, Loc, MVT::i64);
1162311623 SDValue ShiftedStride =
1162411624 DAG.getNode(ISD::SHL, Loc, MVT::i64, ExtStride,
1162511625 DAG.getShiftAmountConstant(44, MVT::i32, Loc));
11626- SDValue HighHalf =
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));
11629+ SDValue ShiftedFlags =
11630+ DAG.getNode(ISD::SHL, Loc, MVT::i64, NewFlags,
11631+ DAG.getShiftAmountConstant(60, MVT::i32, Loc));
11632+ SDValue CombinedFields =
1162711633 DAG.getNode(ISD::OR, Loc, MVT::i64, NumRecordsRHS, ShiftedStride);
11634+ SDValue HighHalf =
11635+ DAG.getNode(ISD::OR, Loc, MVT::i64, CombinedFields, ShiftedFlags);
1162811636
1162911637 Rsrc = DAG.getNode(ISD::BUILD_VECTOR, Loc, MVT::v2i64, LowHalf, HighHalf);
1163011638 } else {
0 commit comments