[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
================
@@ -1168,60 +1168,54 @@ static bool isVectorElementTypeUpsized(EVT EltVT) {
bool NVPTXDAGToDAGISel::tryLoadVector(SDNode *N) {
MemSDNode *MemSD = cast<MemSDNode>(N);
- EVT LoadedVT = MemSD->getMemoryVT();
- if (!LoadedVT.isSimple())
+ const EVT MemEVT = MemSD->getMemoryVT();
+ if (!MemEVT.isSimple())
return false;
+ const MVT MemVT = MemEVT.getSimpleVT();
// Address Space Setting
unsigned int CodeAddrSpace = getCodeAddrSpace(MemSD);
if (canLowerToLDG(MemSD, *Subtarget, CodeAddrSpace, MF)) {
return tryLDGLDU(N);
}
+ EVT EltVT = N->getValueType(0);
SDLoc DL(N);
SDValue Chain = N->getOperand(0);
auto [Ordering, Scope] = insertMemoryInstructionFence(DL, Chain, MemSD);
- // Vector Setting
- MVT SimpleVT = LoadedVT.getSimpleVT();
-
// Type Setting: fromType + fromTypeWidth
//
// Sign : ISD::SEXTLOAD
// Unsign : ISD::ZEXTLOAD, ISD::NON_EXTLOAD or ISD::EXTLOAD and the
// type is integer
// Float : ISD::NON_EXTLOAD or ISD::EXTLOAD and the type is float
- MVT ScalarVT = SimpleVT.getScalarType();
// Read at least 8 bits (predicates are stored as 8-bit values)
- unsigned FromTypeWidth = std::max(8U, (unsigned)ScalarVT.getSizeInBits());
- unsigned int FromType;
// The last operand holds the original LoadSDNode::getExtensionType() value
- unsigned ExtensionType = cast<ConstantSDNode>(
- N->getOperand(N->getNumOperands() - 1))->getZExtValue();
- if (ExtensionType == ISD::SEXTLOAD)
- FromType = NVPTX::PTXLdStInstCode::Signed;
- else
- FromType = getLdStRegType(ScalarVT);
+ const unsigned TotalWidth = MemVT.getSizeInBits();
+ unsigned ExtensionType = N->getConstantOperandVal(N->getNumOperands() - 1);
+ unsigned FromType = (ExtensionType == ISD::SEXTLOAD)
+ ? NVPTX::PTXLdStInstCode::Signed
+ : getLdStRegType(MemVT.getScalarType());
unsigned VecType;
-
+ unsigned FromTypeWidth;
switch (N->getOpcode()) {
case NVPTXISD::LoadV2:
+ FromTypeWidth = TotalWidth / 2;
VecType = NVPTX::PTXLdStInstCode::V2;
break;
case NVPTXISD::LoadV4:
+ FromTypeWidth = TotalWidth / 4;
VecType = NVPTX::PTXLdStInstCode::V4;
break;
default:
return false;
}
- EVT EltVT = N->getValueType(0);
-
if (isVectorElementTypeUpsized(EltVT)) {
----------------
Artem-B wrote:
We should probably rename it to something more meaningful. `isSubVectorPackedInI32`?
Otherwise it's not clear why we're using i32 here without having to go and look at the implementation.
https://github.com/llvm/llvm-project/pull/136638
More information about the llvm-commits
mailing list