Skip to content

Commit 2102e7e

Browse files
fftzengigcbot
authored andcommitted
Add tgm cache control with registry keys
Add tgm cache control with registry keys
1 parent 8ec2c17 commit 2102e7e

File tree

5 files changed

+44
-23
lines changed

5 files changed

+44
-23
lines changed

IGC/Compiler/CISACodeGen/CISABuilder.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8368,6 +8368,7 @@ namespace IGC
83688368
}
83698369

83708370
void CEncoder::LSC_TypedReadWrite(
8371+
LSC_CACHE_OPTS cacheOpts,
83718372
LSC_OP subOp,
83728373
ResourceDescriptor* resource,
83738374
CVariable* pU,
@@ -8404,7 +8405,7 @@ namespace IGC
84048405

84058406
VISA_EMask_Ctrl mask = ConvertMaskToVisaType(m_encoderState.m_mask, m_encoderState.m_noMask);
84068407
VISA_VectorOpnd* globalOffsetOpnd = GetVISALSCSurfaceOpnd(resource->m_surfaceType, resource->m_resource);
8407-
LSC_CACHE_OPTS cache{ LSC_CACHING_DEFAULT, LSC_CACHING_DEFAULT };
8408+
84088409
LSC_DATA_SHAPE dataShape{};
84098410
dataShape.size = LSC_GetElementSize(elemSize);
84108411
dataShape.order = LSC_DATA_ORDER_NONTRANSPOSE;
@@ -8416,7 +8417,7 @@ namespace IGC
84168417
predOpnd,
84178418
execSize,
84188419
mask,
8419-
cache,
8420+
cacheOpts,
84208421
getLSCAddrType(resource),
84218422
addr_size,
84228423
dataShape,

IGC/Compiler/CISACodeGen/CISABuilder.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,7 @@ namespace IGC
297297
CVariable* flatImageHeight, CVariable* flatImagePitch);
298298
void NamedBarrier(e_barrierKind BarrierKind, CVariable* src0, CVariable* src1);
299299
void LSC_TypedReadWrite(
300+
LSC_CACHE_OPTS cacheOpts,
300301
LSC_OP subOp, ResourceDescriptor* resource,
301302
CVariable* pU, CVariable* pV, CVariable* pR, CVariable* pLOD,
302303
CVariable* pSrcDst,

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 37 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -8767,7 +8767,7 @@ void EmitPass::emitLoadRawIndexed(
87678767
setRovCacheCtrl(inst);
87688768
}
87698769
LSC_CACHE_OPTS cacheOpts =
8770-
translateLSCCacheControlsFromMetadata(inst, true);
8770+
translateLSCCacheControlsFromMetadata(inst, true, false);
87718771
emitLSCVectorLoad(
87728772
bufPtrv,
87738773
varOffset,
@@ -9075,7 +9075,7 @@ void EmitPass::emitLoad(LoadInst* inst, Value* offset, ConstantInt* immOffset)
90759075
{
90769076
offset = immOffset ? offset : inst->getPointerOperand();
90779077
LSC_CACHE_OPTS cacheOpts =
9078-
translateLSCCacheControlsFromMetadata(inst, true);
9078+
translateLSCCacheControlsFromMetadata(inst, true, false);
90799079
emitLSCVectorLoad(
90809080
inst->getPointerOperand(),
90819081
offset,
@@ -10031,7 +10031,7 @@ void EmitPass::emitStoreRawIndexed(
1003110031
if (shouldGenerateLSC(inst))
1003210032
{
1003310033
LSC_CACHE_OPTS cacheOpts =
10034-
translateLSCCacheControlsFromMetadata(inst, false);
10034+
translateLSCCacheControlsFromMetadata(inst, false, false);
1003510035
emitLSCVectorStore(
1003610036
pBufPtr,
1003710037
varOffset,
@@ -10194,7 +10194,7 @@ void EmitPass::emitStore(StoreInst* inst, Value* varOffset, ConstantInt* immOffs
1019410194
if (shouldGenerateLSC(inst))
1019510195
{
1019610196
LSC_CACHE_OPTS cacheOpts =
10197-
translateLSCCacheControlsFromMetadata(inst, false);
10197+
translateLSCCacheControlsFromMetadata(inst, false, false);
1019810198
emitLSCVectorStore(
1019910199
inst->getPointerOperand(),
1020010200
varOffset,
@@ -13066,7 +13066,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
1306613066
pLOD = pLOD ? BroadcastIfUniform(pLOD, m_currShader->GetIsUniform(pInsn)) : nullptr;
1306713067

1306813068
ResourceDescriptor resource = GetResourceVariable(pllSrcBuffer);
13069-
13069+
LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(pInsn, true, true);
1307013070
uint numChannels = iSTD::BitCount(writeMask.getEM());
1307113071
auto doLSC = shouldGenerateLSC(pInsn);
1307213072

@@ -13085,7 +13085,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
1308513085

1308613086
if (doLSC)
1308713087
{
13088-
m_encoder->LSC_TypedReadWrite(LSC_LOAD_QUAD, &resource, pU, pV, pR, pLOD, tempdst, 4 * 8,
13088+
m_encoder->LSC_TypedReadWrite(cacheOpts, LSC_LOAD_QUAD, &resource, pU, pV, pR, pLOD, tempdst, 4 * 8,
1308913089
numLanes(nativeDispatchMode), LSC_ADDR_SIZE_32b, writeMask.getEM());
1309013090
}
1309113091
else
@@ -13129,7 +13129,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
1312913129

1313013130
if (doLSC)
1313113131
{
13132-
m_encoder->LSC_TypedReadWrite(LSC_LOAD_QUAD, &resource, pU, pV, pR, pLOD, m_destination, 4 * 8,
13132+
m_encoder->LSC_TypedReadWrite(cacheOpts, LSC_LOAD_QUAD, &resource, pU, pV, pR, pLOD, m_destination, 4 * 8,
1313313133
numLanes(SIMDMode::SIMD16), LSC_ADDR_SIZE_32b, writeMask.getEM());
1313413134
}
1313513135
else
@@ -13161,7 +13161,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
1316113161

1316213162
if (doLSC)
1316313163
{
13164-
m_encoder->LSC_TypedReadWrite(LSC_LOAD_QUAD, &resource, pU, pV, pR, pLOD, tempdst[i], 4 * 8,
13164+
m_encoder->LSC_TypedReadWrite(cacheOpts, LSC_LOAD_QUAD, &resource, pU, pV, pR, pLOD, tempdst[i], 4 * 8,
1316513165
numLanes(SIMDMode::SIMD16), LSC_ADDR_SIZE_32b, writeMask.getEM());
1316613166
}
1316713167
else
@@ -13209,6 +13209,7 @@ void EmitPass::emitTypedWrite(llvm::Instruction* pInsn)
1320913209
pV = pV ? BroadcastIfUniform(pV) : nullptr;
1321013210
pR = pR ? BroadcastIfUniform(pR) : nullptr;
1321113211
pLOD = pLOD ? BroadcastIfUniform(pLOD) : nullptr;
13212+
LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(pInsn, false, true);
1321213213

1321313214
uint writeMask =
1321413215
(!llvm::isa<UndefValue>(pllSrc_X) ? 1 : 0) |
@@ -18720,21 +18721,37 @@ EmitPass::setCacheOptionsForConstantBufferLoads(Instruction& inst) const
1872018721
return cacheOpts;
1872118722
}
1872218723

18723-
static bool tryOverrideCacheOpts(LSC_CACHE_OPTS& cacheOpts, bool isLoad)
18724+
static bool tryOverrideCacheOpts(LSC_CACHE_OPTS& cacheOpts, bool isLoad, bool isTGM)
1872418725
{
18725-
uint32_t l1l3CacheVal = isLoad ?
18726-
IGC_GET_FLAG_VALUE(LscLoadCacheControlOverride) :
18727-
IGC_GET_FLAG_VALUE(LscStoreCacheControlOverride);
18728-
if (l1l3CacheVal != 0)
18726+
if (isTGM)
1872918727
{
18730-
cacheOpts = translateLSCCacheControlsEnum(
18731-
static_cast<LSC_L1_L3_CC>(l1l3CacheVal), isLoad);
18728+
uint32_t tgmCacheVal = isLoad ?
18729+
IGC_GET_FLAG_VALUE(TgmLoadCacheControlOverride) :
18730+
IGC_GET_FLAG_VALUE(TgmStoreCacheControlOverride);
18731+
if (tgmCacheVal != 0)
18732+
{
18733+
cacheOpts = translateLSCCacheControlsEnum(
18734+
static_cast<LSC_L1_L3_CC>(tgmCacheVal), isLoad);
18735+
}
18736+
return tgmCacheVal != 0;
18737+
18738+
}
18739+
else
18740+
{
18741+
uint32_t l1l3CacheVal = isLoad ?
18742+
IGC_GET_FLAG_VALUE(LscLoadCacheControlOverride) :
18743+
IGC_GET_FLAG_VALUE(LscStoreCacheControlOverride);
18744+
if (l1l3CacheVal != 0)
18745+
{
18746+
cacheOpts = translateLSCCacheControlsEnum(
18747+
static_cast<LSC_L1_L3_CC>(l1l3CacheVal), isLoad);
18748+
}
18749+
return l1l3CacheVal != 0;
1873218750
}
18733-
return l1l3CacheVal != 0;
1873418751
}
1873518752

1873618753
LSC_CACHE_OPTS EmitPass::translateLSCCacheControlsFromMetadata(
18737-
Instruction* inst, bool isLoad) const
18754+
Instruction* inst, bool isLoad, bool isTGM) const
1873818755
{
1873918756
LSC_CACHE_OPTS cacheOpts{ LSC_CACHING_DEFAULT, LSC_CACHING_DEFAULT };
1874018757

@@ -18773,7 +18790,7 @@ LSC_CACHE_OPTS EmitPass::translateLSCCacheControlsFromMetadata(
1877318790
}
1877418791
}
1877518792

18776-
if (tryOverrideCacheOpts(cacheOpts, isLoad))
18793+
if (tryOverrideCacheOpts(cacheOpts, isLoad, isTGM))
1877718794
{
1877818795
// global override cache settings have highest priority
1877918796
return cacheOpts;
@@ -19215,7 +19232,7 @@ void EmitPass::emitLSCLoad(
1921519232
LSC_DATA_ORDER data_order,
1921619233
int immOffset)
1921719234
{
19218-
LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(inst, true);
19235+
LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(inst, true, false);
1921919236
emitLSCLoad(cacheOpts, dst, offset, elemSize, numElems, blockOffset,
1922019237
resource, addr_size, data_order, immOffset);
1922119238
}
@@ -19251,7 +19268,7 @@ void EmitPass::emitLSCStore(
1925119268
LSC_DATA_ORDER data_order,
1925219269
int immOffset)
1925319270
{
19254-
LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(inst, false);
19271+
LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(inst, false, false);
1925519272
emitLSCStore(cacheOpts, src, offset, elemSize, numElems, blockOffset,
1925619273
resource, addr_size, data_order, immOffset);
1925719274
}

IGC/Compiler/CISACodeGen/EmitVISAPass.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -460,7 +460,7 @@ class EmitPass : public llvm::FunctionPass
460460
LSC_CACHE_OPTS translateLSCCacheControlsFromValue(
461461
llvm::Value *value, bool isLoad) const;
462462
LSC_CACHE_OPTS translateLSCCacheControlsFromMetadata(
463-
llvm::Instruction* inst, bool isLoad) const;
463+
llvm::Instruction* inst, bool isLoad, bool isTGM) const;
464464
struct LscMessageFragmentInfo {
465465
LSC_DATA_ELEMS fragElem;
466466
int fragElemCount;

IGC/common/igc_flags.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,8 @@ DECLARE_IGC_REGKEY(bool, Enable_Wa22010493955, false, "Enable Wa_22010493955 reg
503503
DECLARE_IGC_REGKEY(bool, EnablePartialEmuI64, true, "Enable the partial I64 emulation for PVC-B", true)
504504
DECLARE_IGC_REGKEY_ENUM(LscLoadCacheControlOverride, 0, "Overrides cache-control options for non-intrinsic LSC loads.", LSC_CACHE_CTRL_OPTIONS, true)
505505
DECLARE_IGC_REGKEY_ENUM(LscStoreCacheControlOverride, 0, "Overrides cache-control options for non-intrinsic LSC stores.", LSC_CACHE_CTRL_OPTIONS, true)
506+
DECLARE_IGC_REGKEY_ENUM(TgmLoadCacheControlOverride, 0, "Overrides cache-control options for non-intrinsic LSC tgm loads.", LSC_CACHE_CTRL_OPTIONS, true)
507+
DECLARE_IGC_REGKEY_ENUM(TgmStoreCacheControlOverride, 0, "Overrides cache-control options for non-intrinsic LSC tgm stores.", LSC_CACHE_CTRL_OPTIONS, true)
506508
DECLARE_IGC_REGKEY(bool, LscForceSpillNonStackcall, false, "Non-stack call kernels that spill will use LSC on DG2+", true)
507509
DECLARE_IGC_REGKEY(bool, EnableQWAddSupport, true, "Enable QW Add support", true)
508510
DECLARE_IGC_REGKEY(bool, ForceQWAddSupport, false, "Force enabling the QW Add support along with ForcePartialInt64", true)

0 commit comments

Comments
 (0)