@@ -2565,7 +2565,7 @@ Constant* IGCConstProp::replaceShaderConstant(LoadInst* inst)
25652565 if (modMD && ((directBuf && (bufType == CONSTANT_BUFFER)) || statelessBuf))
25662566 {
25672567 Value* ptrVal = inst->getPointerOperand ();
2568- unsigned eltId = 0 ;
2568+ int eltId = 0 ;
25692569 size_in_bytes = (unsigned int )inst->getType ()->getPrimitiveSizeInBits () / 8 ;
25702570 if (!EvalConstantAddress (ptrVal, eltId, m_TD, pointerSrc))
25712571 {
@@ -2586,18 +2586,36 @@ Constant* IGCConstProp::replaceShaderConstant(LoadInst* inst)
25862586 uint32_t eltSize_in_bytes = (unsigned int )srcEltTy->getPrimitiveSizeInBits () / 8 ;
25872587 IRBuilder<> builder (inst);
25882588 Value* vectorValue = UndefValue::get (inst->getType ());
2589+ char * pEltValue; // Pointer to element value
25892590 for (uint i = 0 ; i < srcNElts; i++)
25902591 {
2592+ if (eltId < 0 || eltId >= (int )modMD->immConstant .data .size ())
2593+ {
2594+ int OOBvalue = 0 ; // OOB access to immediate constant buffer should return 0
2595+ char * pOOBvalue = (char *)& OOBvalue; // Pointer to value 0 which is a OOB access value
2596+ pEltValue = pOOBvalue;
2597+ }
2598+ else
2599+ pEltValue = offset + eltId + (i * eltSize_in_bytes);
25912600 vectorValue = builder.CreateInsertElement (
25922601 vectorValue,
2593- GetConstantValue (srcEltTy, offset + eltId + (i * eltSize_in_bytes) ),
2602+ GetConstantValue (srcEltTy, pEltValue ),
25942603 builder.getInt32 (i));
25952604 }
25962605 return dyn_cast<Constant>(vectorValue);
25972606 }
25982607 else
25992608 {
2600- return GetConstantValue (inst->getType (), offset + eltId);
2609+ char * pEltValue; // Pointer to element value
2610+ if (eltId < 0 || eltId >= (int )modMD->immConstant .data .size ())
2611+ {
2612+ int OOBvalue = 0 ; // OOB access to immediate constant buffer should return 0
2613+ char * pOOBvalue = (char *)& OOBvalue; // Pointer to value 0 which is a OOB access value
2614+ pEltValue = pOOBvalue;
2615+ }
2616+ else
2617+ pEltValue = offset + eltId;
2618+ return GetConstantValue (inst->getType (), pEltValue);
26012619 }
26022620 }
26032621 else if ((!IGC_IS_FLAG_ENABLED (DisableDynamicConstantFolding)) && (modMD->inlineDynConstants .size () > 0 ))
0 commit comments