@@ -14685,11 +14685,12 @@ void EmitPass::emitScalarAtomics(llvm::Instruction *pInst,
14685
14685
}
14686
14686
if (shouldGenerateLSC(pInst))
14687
14687
{
14688
+ auto cacheOpts = LSC_DEFAULT_CACHING;
14688
14689
if (pU || pV || pR)
14689
14690
{
14690
14691
m_encoder->LSC_TypedAtomic(uniformAtomicOp, &resource, pU, pV, pR,
14691
14692
pFinalAtomicSrcVal, nullptr /*src1*/,
14692
- pReturnVal, bitWidth, LSC_ADDR_SIZE_32b);
14693
+ pReturnVal, bitWidth, LSC_ADDR_SIZE_32b, cacheOpts );
14693
14694
}
14694
14695
else
14695
14696
{
@@ -14704,7 +14705,7 @@ void EmitPass::emitScalarAtomics(llvm::Instruction *pInst,
14704
14705
addrSize,
14705
14706
immOffset,
14706
14707
immScale,
14707
- LSC_DEFAULT_CACHING );
14708
+ cacheOpts );
14708
14709
}
14709
14710
}
14710
14711
else
@@ -14823,6 +14824,7 @@ void EmitPass::emitScalarAtomicLoad(
14823
14824
pDstAddr ? pDstAddr->getName() : CName::NONE) : nullptr;
14824
14825
if (shouldGenerateLSC(pInst))
14825
14826
{
14827
+ auto cacheOpts = LSC_DEFAULT_CACHING;
14826
14828
if (pU || pV || pR)
14827
14829
{
14828
14830
m_encoder->LSC_TypedAtomic(
@@ -14835,7 +14837,8 @@ void EmitPass::emitScalarAtomicLoad(
14835
14837
nullptr /*src1*/,
14836
14838
atomicDst,
14837
14839
bitWidth,
14838
- LSC_ADDR_SIZE_32b);
14840
+ LSC_ADDR_SIZE_32b,
14841
+ cacheOpts);
14839
14842
}
14840
14843
else
14841
14844
{
@@ -14850,7 +14853,7 @@ void EmitPass::emitScalarAtomicLoad(
14850
14853
addrSize,
14851
14854
immOffset,
14852
14855
immScale,
14853
- LSC_DEFAULT_CACHING );
14856
+ cacheOpts );
14854
14857
}
14855
14858
}
14856
14859
else
@@ -15213,10 +15216,11 @@ void EmitPass::emitAtomicRaw(llvm::GenIntrinsicInst *pInst, Value *dstAddr,
15213
15216
else
15214
15217
{
15215
15218
if (shouldGenerateLSC()) {
15219
+ auto cacheOpts = LSC_DEFAULT_CACHING;
15216
15220
m_encoder->LSC_AtomicRaw(atomic_op, pDst,
15217
15221
pDstAddr, pSrc0, pSrc1, bitwidth,
15218
15222
&resource, addrSize, immOffsetVal,
15219
- immScaleVal, LSC_DEFAULT_CACHING );
15223
+ immScaleVal, cacheOpts );
15220
15224
}
15221
15225
else
15222
15226
{
@@ -15263,10 +15267,11 @@ void EmitPass::emitAtomicRaw(llvm::GenIntrinsicInst *pInst, Value *dstAddr,
15263
15267
CVariable* flag = nullptr;
15264
15268
bool needLoop = ResourceLoopHeader(resource, flag, label);
15265
15269
if (shouldGenerateLSC(pInst)) {
15270
+ auto cacheOpts = LSC_DEFAULT_CACHING;
15266
15271
m_encoder->LSC_AtomicRaw(atomic_op, pDst,
15267
15272
pDstAddr, pSrc0, pSrc1, bitwidth,
15268
15273
&resource, addrSize, immOffsetVal,
15269
- immScaleVal, LSC_DEFAULT_CACHING );
15274
+ immScaleVal, cacheOpts );
15270
15275
}
15271
15276
else
15272
15277
{
@@ -19566,10 +19571,11 @@ void EmitPass::emitLSCAtomicTyped(llvm::GenIntrinsicInst* inst)
19566
19571
uint regsPerAddrChannel = 32 * numLanes(instWidth) / 8 / getGRFSize();
19567
19572
uint regsPerDataChannel = eltSizeInBits * numLanes(instWidth) / 8 / getGRFSize();
19568
19573
LSC_ADDR_SIZE addrSize = LSC_ADDR_SIZE_32b;
19574
+ auto cacheOpts = LSC_DEFAULT_CACHING;
19569
19575
if (!needsSplit)
19570
19576
{
19571
19577
m_encoder->SetPredicate(flag);
19572
- m_encoder->LSC_TypedAtomic(atomic_op, &resource, pU, pV, pR, pSrc0, pSrc1, returnsImmValue ? m_destination : nullptr, eltSizeInBits, addrSize);
19578
+ m_encoder->LSC_TypedAtomic(atomic_op, &resource, pU, pV, pR, pSrc0, pSrc1, returnsImmValue ? m_destination : nullptr, eltSizeInBits, addrSize, cacheOpts );
19573
19579
m_encoder->Push();
19574
19580
}
19575
19581
else
@@ -19590,7 +19596,7 @@ void EmitPass::emitLSCAtomicTyped(llvm::GenIntrinsicInst* inst)
19590
19596
setSIMDSizeMask(m_encoder, m_currShader, i);
19591
19597
m_encoder->SetSrcSubVar(0, i * regsPerAddrChannel);
19592
19598
m_encoder->SetSrcSubVar(1, i * regsPerDataChannel);
19593
- m_encoder->LSC_TypedAtomic(atomic_op, &resource, pU, pV, pR, pSrc0, pSrc1, tempdst[i], eltSizeInBits, addrSize);
19599
+ m_encoder->LSC_TypedAtomic(atomic_op, &resource, pU, pV, pR, pSrc0, pSrc1, tempdst[i], eltSizeInBits, addrSize, cacheOpts );
19594
19600
m_encoder->Push();
19595
19601
}
19596
19602
}
0 commit comments