Skip to content

Commit c525925

Browse files
krystian-andrzejewskiigcbot
authored andcommitted
Disallow assigning no mask flags for ld raw instructions
This change is to prevent from assigning no mask flags for ld raw instructions which contribute to sample coordinates as it may cause OOB access and page faults.
1 parent 6fabacd commit c525925

File tree

1 file changed

+24
-5
lines changed

1 file changed

+24
-5
lines changed

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -269,11 +269,30 @@ bool EmitPass::IsNoMaskAllowed(SDAG& sdag)
269269
{
270270
if (auto* I = dyn_cast<LoadInst>(sdag.m_root))
271271
{
272-
BufferType bufType = DecodeBufferType(I->getPointerAddressSpace());
273-
return I->getPointerAddressSpace() != ADDRESS_SPACE_PRIVATE &&
274-
I->getPointerAddressSpace() != ADDRESS_SPACE_GLOBAL &&
275-
I->getPointerAddressSpace() != ADDRESS_SPACE_CONSTANT &&
276-
!(bufType == CONSTANT_BUFFER && m_currShader->GetContext()->getModuleMetaData()->compOpt.WaDisableSubspanUseNoMaskForCB);
272+
switch (I->getPointerAddressSpace())
273+
{
274+
case ADDRESS_SPACE_PRIVATE:
275+
case ADDRESS_SPACE_GLOBAL:
276+
case ADDRESS_SPACE_CONSTANT:
277+
return false;
278+
default:
279+
{
280+
BufferType bufType = DecodeBufferType(I->getPointerAddressSpace());
281+
return bufType != CONSTANT_BUFFER ||
282+
!m_currShader->GetContext()->getModuleMetaData()->compOpt.WaDisableSubspanUseNoMaskForCB;
283+
}
284+
}
285+
}
286+
else if (auto* I = dyn_cast<GenIntrinsicInst>(sdag.m_root))
287+
{
288+
switch (I->getIntrinsicID())
289+
{
290+
case GenISAIntrinsic::GenISA_ldraw_indexed:
291+
case GenISAIntrinsic::GenISA_ldrawvector_indexed:
292+
return false;
293+
default:
294+
break;
295+
}
277296
}
278297

279298
return true;

0 commit comments

Comments
 (0)