@@ -566,7 +566,7 @@ void StatelessToStateful::promoteIntrinsic(InstructionInfo& II)
566
566
GenISAIntrinsic::ID const intrinID = I->getIntrinsicID ();
567
567
PointerType* pTy = IGCLLVM::getWithSamePointeeType (dyn_cast<PointerType>(II.ptr ->getType ()), II.getStatefulAddrSpace ());
568
568
569
- if (m_targetAddressing == TargetAddressing::BINDLESS)
569
+ if (m_targetAddressing == TargetAddressing::BINDLESS && ! WA_ForcedUsedOfBindfulMode (*m_F) )
570
570
{
571
571
Argument* srcOffset = m_pImplicitArgs->getNumberedImplicitArg (*m_F, ImplicitArg::BINDLESS_OFFSET, II.getBaseArgIndex ());
572
572
auto newBasePtr = IntToPtrInst::Create (Instruction::IntToPtr, srcOffset, pTy, " " , I);
@@ -593,7 +593,7 @@ void StatelessToStateful::promoteIntrinsic(InstructionInfo& II)
593
593
return ;
594
594
}
595
595
596
- IGC_ASSERT (m_targetAddressing == TargetAddressing::BINDFUL);
596
+ IGC_ASSERT (m_targetAddressing == TargetAddressing::BINDFUL || WA_ForcedUsedOfBindfulMode (*m_F) );
597
597
598
598
Instruction* statefulPtr = IntToPtrInst::Create (Instruction::IntToPtr, II.offset , pTy, " " , I);
599
599
Instruction* statefulInst = nullptr ;
@@ -684,7 +684,7 @@ void StatelessToStateful::promoteLoad(InstructionInfo& II)
684
684
685
685
const DebugLoc& DL = I->getDebugLoc ();
686
686
687
- if (m_targetAddressing == TargetAddressing::BINDLESS)
687
+ if (m_targetAddressing == TargetAddressing::BINDLESS && ! WA_ForcedUsedOfBindfulMode (*m_F) )
688
688
{
689
689
Argument* srcOffset = m_pImplicitArgs->getNumberedImplicitArg (*m_F, ImplicitArg::BINDLESS_OFFSET, II.getBaseArgIndex ());
690
690
auto newBasePtr = IntToPtrInst::Create (Instruction::IntToPtr, srcOffset, pTy, " " , I);
@@ -696,7 +696,7 @@ void StatelessToStateful::promoteLoad(InstructionInfo& II)
696
696
I->replaceAllUsesWith (bindlessLoad);
697
697
I->eraseFromParent ();
698
698
}
699
- else if (m_targetAddressing == TargetAddressing::BINDFUL)
699
+ else if (m_targetAddressing == TargetAddressing::BINDFUL || WA_ForcedUsedOfBindfulMode (*m_F) )
700
700
{
701
701
auto newBasePtr = IntToPtrInst::Create (Instruction::IntToPtr, II.offset , pTy, " " , I);
702
702
auto bindfulLoad = new LoadInst (
@@ -738,7 +738,7 @@ void StatelessToStateful::promoteStore(InstructionInfo& II)
738
738
739
739
const DebugLoc& DL = I->getDebugLoc ();
740
740
741
- if (m_targetAddressing == TargetAddressing::BINDLESS)
741
+ if (m_targetAddressing == TargetAddressing::BINDLESS && ! WA_ForcedUsedOfBindfulMode (*m_F) )
742
742
{
743
743
Argument* srcOffset = m_pImplicitArgs->getNumberedImplicitArg (*m_F, ImplicitArg::BINDLESS_OFFSET, II.getBaseArgIndex ());
744
744
auto newBasePtr = IntToPtrInst::Create (Instruction::IntToPtr, srcOffset, pTy, " " , I);
@@ -749,7 +749,7 @@ void StatelessToStateful::promoteStore(InstructionInfo& II)
749
749
750
750
I->eraseFromParent ();
751
751
}
752
- else if (m_targetAddressing == TargetAddressing::BINDFUL)
752
+ else if (m_targetAddressing == TargetAddressing::BINDFUL || WA_ForcedUsedOfBindfulMode (*m_F) )
753
753
{
754
754
auto newBasePtr = IntToPtrInst::Create (Instruction::IntToPtr, II.offset , pTy, " " , I);
755
755
auto bindfulStore = new StoreInst (
@@ -804,7 +804,7 @@ void StatelessToStateful::promote()
804
804
IGC_ASSERT (bufferPos < maxPromotionCount);
805
805
806
806
unsigned statefullAddrspace = 0 ;
807
- if (m_targetAddressing == TargetAddressing::BINDLESS)
807
+ if (m_targetAddressing == TargetAddressing::BINDLESS && ! WA_ForcedUsedOfBindfulMode (*m_F) )
808
808
{
809
809
statefullAddrspace =
810
810
IGC::EncodeAS4GFXResource (
@@ -989,6 +989,15 @@ void StatelessToStateful::visitStoreInst(StoreInst& I)
989
989
}
990
990
}
991
991
992
+ bool StatelessToStateful::WA_ForcedUsedOfBindfulMode (const Function& F)
993
+ {
994
+ static const std::array kernels{
995
+ " _ZTSZ42oneapi_kernel_integrator_intersect_closestP16KernelGlobalsGPUyyRN4sycl3_V17handlerEPKiPfiEUlNS2_7nd_itemILi1EEENS2_14kernel_handlerEE_" ,
996
+ };
997
+
998
+ return std::any_of (kernels.begin (), kernels.end (), [&F](const auto & it) { return it == F.getName (); });
999
+ }
1000
+
992
1001
void StatelessToStateful::findPromotableInstructions ()
993
1002
{
994
1003
// fill m_promotionMap
0 commit comments