Skip to content

Commit 3165800

Browse files
skarczewigcbot
authored andcommitted
Minor refactor
Minor refactor
1 parent 52b3f31 commit 3165800

File tree

1 file changed

+26
-33
lines changed

1 file changed

+26
-33
lines changed

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6339,6 +6339,7 @@ void EmitPass::emitLSCSimdBlockWrite(llvm::Instruction* inst, llvm::Value* ptrVa
63396339

63406340
CVariable* data = GetSymbol(dataPtr);
63416341
bool useA64 = isA64Ptr(ptrType, m_currShader->GetContext());
6342+
LSC_ADDR_SIZE addrSize = useA64 ? LSC_ADDR_SIZE_64b : LSC_ADDR_SIZE_32b;
63426343

63436344
if (!IsGRFAligned(data, EALIGN_GRF) && !data->IsUniform())
63446345
{
@@ -6389,7 +6390,7 @@ void EmitPass::emitLSCSimdBlockWrite(llvm::Instruction* inst, llvm::Value* ptrVa
63896390
uint32_t blkBits = 64;
63906391
uint32_t nBlks = bytesToRead * 8 / 64;
63916392

6392-
emitLSCStore(inst, data, pTempVar, blkBits, nBlks, srcOffset, &resource, useA64 ? LSC_ADDR_SIZE_64b : LSC_ADDR_SIZE_32b, LSC_DATA_ORDER_TRANSPOSE, immOffset, 1);
6393+
emitLSCStore(inst, data, pTempVar, blkBits, nBlks, srcOffset, &resource, addrSize, LSC_DATA_ORDER_TRANSPOSE, immOffset, 1);
63936394
m_encoder->Push();
63946395

63956396
bytesRemaining -= bytesToRead;
@@ -6416,6 +6417,7 @@ void EmitPass::emitLSCSimdBlockRead(llvm::Instruction* inst, llvm::Value* ptrVal
64166417
}
64176418

64186419
bool useA64 = isA64Ptr(ptrType, m_currShader->GetContext());
6420+
LSC_ADDR_SIZE addrSize = useA64 ? LSC_ADDR_SIZE_64b : LSC_ADDR_SIZE_32b;
64196421

64206422
Type* Ty = inst->getType();
64216423
IGCLLVM::FixedVectorType* VTy = dyn_cast<IGCLLVM::FixedVectorType>(Ty);
@@ -6451,7 +6453,7 @@ void EmitPass::emitLSCSimdBlockRead(llvm::Instruction* inst, llvm::Value* ptrVal
64516453
uint32_t bytesToRead = getLSCBlockMsgSize(bytesRemaining, m_currShader->m_Platform->getMaxLSCBlockMsgSize(isD64));
64526454
uint32_t nBlks = (bytesToRead * 8) / blkBits;
64536455

6454-
emitLSCLoad(inst, m_destination, pTempVar, blkBits, nBlks, dstOffset, &resource, useA64 ? LSC_ADDR_SIZE_64b : LSC_ADDR_SIZE_32b, LSC_DATA_ORDER_TRANSPOSE, immOffset, 1);
6456+
emitLSCLoad(inst, m_destination, pTempVar, blkBits, nBlks, dstOffset, &resource, addrSize, LSC_DATA_ORDER_TRANSPOSE, immOffset, 1);
64556457
m_encoder->Push();
64566458

64576459
bytesRemaining -= bytesToRead;
@@ -14390,6 +14392,7 @@ void EmitPass::emitAtomicRaw(llvm::GenIntrinsicInst* pInsn)
1439014392

1439114393
PointerType* PtrTy = dyn_cast<PointerType>(pllDstAddr->getType());
1439214394
bool isA64 = PtrTy && isA64Ptr(PtrTy, m_currShader->GetContext());
14395+
LSC_ADDR_SIZE addrSize = isA64 ? LSC_ADDR_SIZE_64b : LSC_ADDR_SIZE_32b;
1439314396
bool extendPointer = (bitwidth == 64 && !isA64);
1439414397
// DG2 onward with LSC we do not have to extend an A32 pointer to an
1439514398
// A64 pointer for 64bit atomics
@@ -14415,7 +14418,7 @@ void EmitPass::emitAtomicRaw(llvm::GenIntrinsicInst* pInsn)
1441514418
pSrc0, pSrc1,
1441614419
bitwidth,
1441714420
&resource,
14418-
isA64 ? LSC_ADDR_SIZE_64b : LSC_ADDR_SIZE_32b,
14421+
addrSize,
1441914422
0,
1442014423
LSC_DEFAULT_CACHING);
1442114424
}
@@ -14470,7 +14473,7 @@ void EmitPass::emitAtomicRaw(llvm::GenIntrinsicInst* pInsn)
1447014473
pDst, pDstAddr,
1447114474
pSrc0, pSrc1,
1447214475
bitwidth,
14473-
&resource, isA64 ? LSC_ADDR_SIZE_64b : LSC_ADDR_SIZE_32b,
14476+
&resource, addrSize,
1447414477
0,
1447514478
LSC_DEFAULT_CACHING);
1447614479
}
@@ -14732,7 +14735,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
1473214735

1473314736
uint numChannels = iSTD::BitCount(writeMask.getEM());
1473414737
auto doLSC = shouldGenerateLSC(pInsn, true);
14735-
14738+
LSC_ADDR_SIZE addrSize = LSC_ADDR_SIZE_32b;
1473614739
if (m_currShader->GetIsUniform(pInsn))
1473714740
{
1473814741
SIMDMode nativeDispatchMode = m_currShader->m_Platform->getMinDispatchMode();
@@ -14749,7 +14752,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
1474914752
if (doLSC)
1475014753
{
1475114754
m_encoder->LSC_TypedReadWrite(LSC_LOAD_QUAD, &resource, pU, pV, pR, pLOD, tempdst, 4 * 8,
14752-
numLanes(nativeDispatchMode), LSC_ADDR_SIZE_32b, writeMask.getEM(), cacheOpts);
14755+
numLanes(nativeDispatchMode), addrSize, writeMask.getEM(), cacheOpts);
1475314756
}
1475414757
else
1475514758
{
@@ -14793,7 +14796,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
1479314796
if (doLSC)
1479414797
{
1479514798
m_encoder->LSC_TypedReadWrite(LSC_LOAD_QUAD, &resource, pU, pV, pR, pLOD, m_destination, 4 * 8,
14796-
numLanes(SIMDMode::SIMD16), LSC_ADDR_SIZE_32b, writeMask.getEM(), cacheOpts);
14799+
numLanes(SIMDMode::SIMD16), addrSize, writeMask.getEM(), cacheOpts);
1479714800
}
1479814801
else
1479914802
{
@@ -14827,7 +14830,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
1482714830
if (doLSC)
1482814831
{
1482914832
m_encoder->LSC_TypedReadWrite(LSC_LOAD_QUAD, &resource, pU, pV, pR, pLOD, tempdst[i], 4 * 8,
14830-
numLanes(SIMDMode::SIMD16), LSC_ADDR_SIZE_32b, writeMask.getEM(), cacheOpts);
14833+
numLanes(SIMDMode::SIMD16), addrSize, writeMask.getEM(), cacheOpts);
1483114834
}
1483214835
else
1483314836
{
@@ -14884,7 +14887,7 @@ void EmitPass::emitTypedWrite(llvm::Instruction* pInsn)
1488414887
ResourceDescriptor resource = GetResourceVariable(pllDstBuffer);
1488514888
LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(pInsn, false, true);
1488614889
m_currShader->HasLscStoreCacheControls(cacheOpts);
14887-
14890+
LSC_ADDR_SIZE addrSize = LSC_ADDR_SIZE_32b;
1488814891
if (m_currShader->GetIsUniform(pInsn))
1488914892
{
1489014893
IGC_ASSERT_MESSAGE(0, "Uniform store_uav_typed not implemented yet");
@@ -18025,13 +18028,14 @@ void EmitPass::emitLSCVectorLoad(Instruction* inst,
1802518028
else if (auto CI = dyn_cast<LdRawIntrinsic>(inst))
1802618029
align = CI->getAlignment();
1802718030
PointerType* ptrType = cast<PointerType>(Ptr->getType());
18031+
ResourceDescriptor resource = GetResourceVariable(Ptr);
1802818032
bool useA32 = !IGC::isA64Ptr(ptrType, m_currShader->GetContext());
18033+
LSC_ADDR_SIZE addrSize = useA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b;
1802918034
IGCLLVM::FixedVectorType* VTy = dyn_cast<IGCLLVM::FixedVectorType>(Ty);
1803018035
Type* eltTy = VTy ? VTy->getElementType() : Ty;
1803118036
uint32_t eltBytes = GetScalarTypeSizeInRegister(eltTy);
1803218037
uint32_t elts = VTy ? int_cast<uint32_t>(VTy->getNumElements()) : 1;
1803318038

18034-
ResourceDescriptor resource = GetResourceVariable(Ptr);
1803518039
CountStatelessIndirectAccess(Ptr, resource);
1803618040
// eOffset is in bytes
1803718041
// offset corresponds to Int2Ptr operand obtained during pattern matching
@@ -18080,14 +18084,6 @@ void EmitPass::emitLSCVectorLoad(Instruction* inst,
1808018084
const int immScaleInt =
1808118085
immScale ? static_cast<int>(immScale->getSExtValue()) : 1;
1808218086

18083-
LSC_ADDR_SIZE addrSize = LSC_ADDR_SIZE_INVALID;
18084-
if (useA32) {
18085-
addrSize = LSC_ADDR_SIZE_32b;
18086-
}
18087-
else {
18088-
addrSize = LSC_ADDR_SIZE_64b;
18089-
}
18090-
1809118087
// 1. handle cases eltBytes < 4
1809218088
if (eltBytes < 4)
1809318089
{
@@ -18379,6 +18375,7 @@ void EmitPass::emitLSCVectorStore(Value *Ptr,
1837918375
// offset corresponds to Int2Ptr operand obtained during pattern matching
1838018376
CVariable* eOffset = GetSymbol(varOffset);
1838118377
bool useA32 = !isA64Ptr(ptrType, m_currShader->GetContext());
18378+
LSC_ADDR_SIZE addrSize = useA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b;
1838218379
if (useA32)
1838318380
{
1838418381
eOffset = TruncatePointer(eOffset);
@@ -18411,14 +18408,6 @@ void EmitPass::emitLSCVectorStore(Value *Ptr,
1841118408
const int immScaleVal =
1841218409
immScale ? static_cast<int>(immScale->getSExtValue()) : 1;
1841318410

18414-
LSC_ADDR_SIZE addrSize = LSC_ADDR_SIZE_INVALID;
18415-
if (useA32) {
18416-
addrSize = LSC_ADDR_SIZE_32b;
18417-
}
18418-
else {
18419-
addrSize = LSC_ADDR_SIZE_64b;
18420-
}
18421-
1842218411
// 1. handle cases eltBytes < 4
1842318412
if (eltBytes < 4)
1842418413
{
@@ -21132,6 +21121,7 @@ void EmitPass::emitLscIntrinsicLoad(llvm::GenIntrinsicInst* inst)
2113221121
ResourceDescriptor resource = GetResourceVariable(Ptr);
2113321122
CVariable* offset = GetSymbol(Ptr);
2113421123
bool useA32 = !isA64Ptr(ptrType, m_currShader->GetContext());
21124+
LSC_ADDR_SIZE addrSize = useA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b;
2113521125
offset = useA32 ? TruncatePointer(offset) : offset;
2113621126
bool isBlockLoad = inst->getIntrinsicID() == GenISAIntrinsic::GenISA_LSCLoadBlock;
2113721127
if (isBlockLoad) {
@@ -21157,14 +21147,14 @@ void EmitPass::emitLscIntrinsicLoad(llvm::GenIntrinsicInst* inst)
2115721147
m_encoder->LSC_LoadBlock1D(
2115821148
gatherDst, offset,
2115921149
dataSize, fragElems, &resource,
21160-
useA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b,
21150+
addrSize,
2116121151
fragImmOffset,
2116221152
cacheOpts);
2116321153
} else {
2116421154
m_encoder->LSC_LoadGather(
2116521155
LSC_LOAD, gatherDst,
2116621156
offset, dataSize, fragElems, 0, &resource,
21167-
useA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b,
21157+
addrSize,
2116821158
LSC_DATA_ORDER_NONTRANSPOSE, fragImmOffset, 1, cacheOpts, addrSpace);
2116921159
}
2117021160
m_encoder->Push();
@@ -21194,6 +21184,7 @@ void EmitPass::emitLscIntrinsicPrefetch(llvm::GenIntrinsicInst* inst)
2119421184
ResourceDescriptor resource = GetResourceVariable(Ptr);
2119521185
CVariable* offset = GetSymbol(Ptr);
2119621186
bool useA32 = !isA64Ptr(ptrType, m_currShader->GetContext());
21187+
LSC_ADDR_SIZE addrSize = useA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b;
2119721188
offset = useA32 ? TruncatePointer(offset) : offset;
2119821189

2119921190
auto dataSize = (LSC_DATA_SIZE)cast<ConstantInt>(inst->getOperand(2))->getZExtValue();
@@ -21232,7 +21223,7 @@ void EmitPass::emitLscIntrinsicPrefetch(llvm::GenIntrinsicInst* inst)
2123221223
m_encoder->LSC_LoadGather(
2123321224
lscOp, fragDst,
2123421225
offset, dataSize, fragElems, 0, &resource,
21235-
useA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b,
21226+
addrSize,
2123621227
LSC_DATA_ORDER_NONTRANSPOSE, fragImmOffset, 1, cacheOpts, addrSpace);
2123721228
m_encoder->Push();
2123821229
});
@@ -21297,6 +21288,7 @@ void EmitPass::emitLscIntrinsicStore(llvm::GenIntrinsicInst* inst)
2129721288
PointerType* ptrType = cast<PointerType>(Ptr->getType());
2129821289
CVariable* offset = GetSymbol(Ptr);
2129921290
bool useA32 = !isA64Ptr(ptrType, m_currShader->GetContext());
21291+
LSC_ADDR_SIZE addrSize = useA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b;
2130021292
offset = useA32 ? TruncatePointer(offset) : offset;
2130121293
bool isBlockStore = inst->getIntrinsicID() == GenISAIntrinsic::GenISA_LSCStoreBlock;
2130221294
if (isBlockStore) {
@@ -21322,7 +21314,7 @@ void EmitPass::emitLscIntrinsicStore(llvm::GenIntrinsicInst* inst)
2132221314
fragData, offset,
2132321315
dataSize, fragElems,
2132421316
&resource,
21325-
useA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b,
21317+
addrSize,
2132621318
fragImmOffset,
2132721319
cacheOpts);
2132821320
} else {
@@ -21331,7 +21323,7 @@ void EmitPass::emitLscIntrinsicStore(llvm::GenIntrinsicInst* inst)
2133121323
fragData, offset,
2133221324
dataSize, fragElems,
2133321325
0, &resource,
21334-
useA32 ? LSC_ADDR_SIZE_32b : LSC_ADDR_SIZE_64b,
21326+
addrSize,
2133521327
LSC_DATA_ORDER_NONTRANSPOSE,
2133621328
fragImmOffset,
2133721329
1,
@@ -21575,6 +21567,8 @@ void EmitPass::emitLSCAtomic(llvm::GenIntrinsicInst* inst)
2157521567

2157621568
PointerType* ptrType = cast<PointerType>(Ptr->getType());
2157721569
bool isA64 = isA64Ptr(ptrType, m_currShader->GetContext());
21570+
LSC_ADDR_SIZE addrSize = isA64 ? LSC_ADDR_SIZE_64b : LSC_ADDR_SIZE_32b;
21571+
ResourceDescriptor resource = GetResourceVariable(Ptr);
2157821572
if (Ptr->getType()->getPointerAddressSpace() == ADDRESS_SPACE_GLOBAL)
2157921573
{
2158021574
m_currShader->SetHasGlobalAtomics();
@@ -21597,7 +21591,6 @@ void EmitPass::emitLSCAtomic(llvm::GenIntrinsicInst* inst)
2159721591
GetSymbol(inst->getArgOperand(3)) : nullptr;
2159821592
pAtomicCmp = (pAtomicCmp != nullptr) ? BroadcastIfUniform(pAtomicCmp) : pAtomicCmp;
2159921593

21600-
ResourceDescriptor resource = GetResourceVariable(Ptr);
2160121594
// take the bitwidth from the pointer type since the return type might
2160221595
// differ; e.g. uint lsc_atomic_add(ushort *, uint) D16U32
2160321596
unsigned short bitwidth =
@@ -21609,7 +21602,7 @@ void EmitPass::emitLSCAtomic(llvm::GenIntrinsicInst* inst)
2160921602
m_encoder->LSC_AtomicRaw(
2161021603
atomicOp, pOldValue, pDstAddr, pAtomicVal,
2161121604
pAtomicCmp, bitwidth, &resource,
21612-
isA64 ? LSC_ADDR_SIZE_64b : LSC_ADDR_SIZE_32b, immOff,
21605+
addrSize, immOff,
2161321606
cacheOpts);
2161421607
m_encoder->Push();
2161521608
}

0 commit comments

Comments
 (0)