@@ -8767,7 +8767,7 @@ void EmitPass::emitLoadRawIndexed(
8767
8767
setRovCacheCtrl(inst);
8768
8768
}
8769
8769
LSC_CACHE_OPTS cacheOpts =
8770
- translateLSCCacheControlsFromMetadata(inst, true);
8770
+ translateLSCCacheControlsFromMetadata(inst, true, false );
8771
8771
emitLSCVectorLoad(
8772
8772
bufPtrv,
8773
8773
varOffset,
@@ -9075,7 +9075,7 @@ void EmitPass::emitLoad(LoadInst* inst, Value* offset, ConstantInt* immOffset)
9075
9075
{
9076
9076
offset = immOffset ? offset : inst->getPointerOperand();
9077
9077
LSC_CACHE_OPTS cacheOpts =
9078
- translateLSCCacheControlsFromMetadata(inst, true);
9078
+ translateLSCCacheControlsFromMetadata(inst, true, false );
9079
9079
emitLSCVectorLoad(
9080
9080
inst->getPointerOperand(),
9081
9081
offset,
@@ -10031,7 +10031,7 @@ void EmitPass::emitStoreRawIndexed(
10031
10031
if (shouldGenerateLSC(inst))
10032
10032
{
10033
10033
LSC_CACHE_OPTS cacheOpts =
10034
- translateLSCCacheControlsFromMetadata(inst, false);
10034
+ translateLSCCacheControlsFromMetadata(inst, false, false );
10035
10035
emitLSCVectorStore(
10036
10036
pBufPtr,
10037
10037
varOffset,
@@ -10194,7 +10194,7 @@ void EmitPass::emitStore(StoreInst* inst, Value* varOffset, ConstantInt* immOffs
10194
10194
if (shouldGenerateLSC(inst))
10195
10195
{
10196
10196
LSC_CACHE_OPTS cacheOpts =
10197
- translateLSCCacheControlsFromMetadata(inst, false);
10197
+ translateLSCCacheControlsFromMetadata(inst, false, false );
10198
10198
emitLSCVectorStore(
10199
10199
inst->getPointerOperand(),
10200
10200
varOffset,
@@ -13066,7 +13066,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
13066
13066
pLOD = pLOD ? BroadcastIfUniform(pLOD, m_currShader->GetIsUniform(pInsn)) : nullptr;
13067
13067
13068
13068
ResourceDescriptor resource = GetResourceVariable(pllSrcBuffer);
13069
-
13069
+ LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(pInsn, true, true);
13070
13070
uint numChannels = iSTD::BitCount(writeMask.getEM());
13071
13071
auto doLSC = shouldGenerateLSC(pInsn);
13072
13072
@@ -13085,7 +13085,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
13085
13085
13086
13086
if (doLSC)
13087
13087
{
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,
13089
13089
numLanes(nativeDispatchMode), LSC_ADDR_SIZE_32b, writeMask.getEM());
13090
13090
}
13091
13091
else
@@ -13129,7 +13129,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
13129
13129
13130
13130
if (doLSC)
13131
13131
{
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,
13133
13133
numLanes(SIMDMode::SIMD16), LSC_ADDR_SIZE_32b, writeMask.getEM());
13134
13134
}
13135
13135
else
@@ -13161,7 +13161,7 @@ void EmitPass::emitTypedRead(llvm::Instruction* pInsn)
13161
13161
13162
13162
if (doLSC)
13163
13163
{
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,
13165
13165
numLanes(SIMDMode::SIMD16), LSC_ADDR_SIZE_32b, writeMask.getEM());
13166
13166
}
13167
13167
else
@@ -13209,6 +13209,7 @@ void EmitPass::emitTypedWrite(llvm::Instruction* pInsn)
13209
13209
pV = pV ? BroadcastIfUniform(pV) : nullptr;
13210
13210
pR = pR ? BroadcastIfUniform(pR) : nullptr;
13211
13211
pLOD = pLOD ? BroadcastIfUniform(pLOD) : nullptr;
13212
+ LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(pInsn, false, true);
13212
13213
13213
13214
uint writeMask =
13214
13215
(!llvm::isa<UndefValue>(pllSrc_X) ? 1 : 0) |
@@ -18720,21 +18721,37 @@ EmitPass::setCacheOptionsForConstantBufferLoads(Instruction& inst) const
18720
18721
return cacheOpts;
18721
18722
}
18722
18723
18723
- static bool tryOverrideCacheOpts(LSC_CACHE_OPTS& cacheOpts, bool isLoad)
18724
+ static bool tryOverrideCacheOpts(LSC_CACHE_OPTS& cacheOpts, bool isLoad, bool isTGM )
18724
18725
{
18725
- uint32_t l1l3CacheVal = isLoad ?
18726
- IGC_GET_FLAG_VALUE(LscLoadCacheControlOverride) :
18727
- IGC_GET_FLAG_VALUE(LscStoreCacheControlOverride);
18728
- if (l1l3CacheVal != 0)
18726
+ if (isTGM)
18729
18727
{
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;
18732
18750
}
18733
- return l1l3CacheVal != 0;
18734
18751
}
18735
18752
18736
18753
LSC_CACHE_OPTS EmitPass::translateLSCCacheControlsFromMetadata(
18737
- Instruction* inst, bool isLoad) const
18754
+ Instruction* inst, bool isLoad, bool isTGM ) const
18738
18755
{
18739
18756
LSC_CACHE_OPTS cacheOpts{ LSC_CACHING_DEFAULT, LSC_CACHING_DEFAULT };
18740
18757
@@ -18773,7 +18790,7 @@ LSC_CACHE_OPTS EmitPass::translateLSCCacheControlsFromMetadata(
18773
18790
}
18774
18791
}
18775
18792
18776
- if (tryOverrideCacheOpts(cacheOpts, isLoad))
18793
+ if (tryOverrideCacheOpts(cacheOpts, isLoad, isTGM ))
18777
18794
{
18778
18795
// global override cache settings have highest priority
18779
18796
return cacheOpts;
@@ -19215,7 +19232,7 @@ void EmitPass::emitLSCLoad(
19215
19232
LSC_DATA_ORDER data_order,
19216
19233
int immOffset)
19217
19234
{
19218
- LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(inst, true);
19235
+ LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(inst, true, false );
19219
19236
emitLSCLoad(cacheOpts, dst, offset, elemSize, numElems, blockOffset,
19220
19237
resource, addr_size, data_order, immOffset);
19221
19238
}
@@ -19251,7 +19268,7 @@ void EmitPass::emitLSCStore(
19251
19268
LSC_DATA_ORDER data_order,
19252
19269
int immOffset)
19253
19270
{
19254
- LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(inst, false);
19271
+ LSC_CACHE_OPTS cacheOpts = translateLSCCacheControlsFromMetadata(inst, false, false );
19255
19272
emitLSCStore(cacheOpts, src, offset, elemSize, numElems, blockOffset,
19256
19273
resource, addr_size, data_order, immOffset);
19257
19274
}
0 commit comments