[llvm] [NVPTX] Use v2.u64 to load/store 128-bit values (PR #136638)
Artem Belevich via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 22 11:25:25 PDT 2025
================
@@ -3201,28 +3197,31 @@ NVPTXTargetLowering::LowerSTOREVector(SDValue Op, SelectionDAG &DAG) const {
Ops.push_back(N->getOperand(0));
// Then the split values
- assert(NumElts <= ValVT.getVectorNumElements() &&
- "NumElts should not increase, only decrease or stay the same.");
- if (NumElts < ValVT.getVectorNumElements()) {
- // If the number of elements has decreased, getVectorLoweringShape has
- // upsized the element types
- assert(EltVT.isVector() && EltVT.getSizeInBits() == 32 &&
- EltVT.getVectorNumElements() <= 4 && "Unexpected upsized type.");
+ if (EltVT.isVector()) {
+ assert(EVT(EltVT.getVectorElementType()) == ValVT.getVectorElementType());
+ assert(NumElts * EltVT.getVectorNumElements() ==
+ ValVT.getVectorNumElements());
// Combine individual elements into v2[i,f,bf]16/v4i8 subvectors to be
// stored as b32s
- unsigned NumEltsPerSubVector = EltVT.getVectorNumElements();
- for (unsigned i = 0; i < NumElts; ++i) {
+ const unsigned NumEltsPerSubVector = EltVT.getVectorNumElements();
+ for (const auto I : llvm::seq(NumElts)) {
SmallVector<SDValue, 4> SubVectorElts;
- DAG.ExtractVectorElements(Val, SubVectorElts, i * NumEltsPerSubVector,
+ DAG.ExtractVectorElements(Val, SubVectorElts, I * NumEltsPerSubVector,
NumEltsPerSubVector);
SDValue SubVector = DAG.getBuildVector(EltVT, DL, SubVectorElts);
Ops.push_back(SubVector);
----------------
Artem-B wrote:
Nit: We could just push_back getBuildVector result directly.
https://github.com/llvm/llvm-project/pull/136638
More information about the llvm-commits
mailing list