@@ -138,49 +138,33 @@ static cl::opt<TargetAddressing> targetAddressingMode(
138138
139139char StatelessToStateful::ID = 0 ;
140140
141- StatelessToStateful::StatelessToStateful () : ModulePass (ID), m_targetAddressing(targetAddressingMode) {}
141+ StatelessToStateful::StatelessToStateful () : FunctionPass (ID), m_targetAddressing(targetAddressingMode) {}
142142
143143StatelessToStateful::StatelessToStateful (TargetAddressing addressing)
144- : ModulePass (ID),
144+ : FunctionPass (ID),
145145 m_targetAddressing(addressing)
146146{
147147 initializeStatelessToStatefulPass (*PassRegistry::getPassRegistry ());
148148}
149149
150- bool StatelessToStateful::runOnModule (llvm::Module& M)
151- {
152- m_Module = &M;
153-
154- if (m_targetAddressing == TargetAddressing::BINDFUL && getModuleUsesBindless () == true )
155- {
156- return false ;
157- }
158-
159- for (auto & it : M.functions ())
160- {
161- handleFunction (it);
162- }
163-
164- return m_changed;
165- }
166-
167- void StatelessToStateful::handleFunction (llvm::Function& F)
150+ bool StatelessToStateful::runOnFunction (llvm::Function& F)
168151{
169152 MetaDataUtils* pMdUtils = getAnalysis<MetaDataUtilsWrapper>().getMetaDataUtils ();
170153 ModuleMetaData* modMD = getAnalysis<MetaDataUtilsWrapper>().getModuleMetaData ();
171154
172155 if (modMD->compOpt .OptDisable )
173156 {
174157 IGC_ASSERT_MESSAGE (0 , " StatelessToStateful should be disabled for -O0!" );
175- return ;
158+ return false ;
176159 }
177160
178161 // skip non-entry functions
179162 if (!isEntryFunc (pMdUtils, &F))
180163 {
181- return ;
164+ return false ;
182165 }
183166
167+ m_Module = F.getParent ();
184168 m_F = &F;
185169
186170 if (IGC_IS_FLAG_ENABLED (EnableCodeAssumption))
@@ -216,6 +200,7 @@ void StatelessToStateful::handleFunction(llvm::Function& F)
216200 delete m_pImplicitArgs;
217201 delete m_pKernelArgs;
218202 m_promotionMap.clear ();
203+ return m_changed;
219204}
220205
221206Argument* StatelessToStateful::getBufferOffsetArg (Function* F, uint32_t ArgNumber)
@@ -594,8 +579,6 @@ void StatelessToStateful::promoteIntrinsic(InstructionInfo& II)
594579 newBlockRead->setDebugLoc (I->getDebugLoc ());
595580 I->replaceAllUsesWith (newBlockRead);
596581 I->eraseFromParent ();
597-
598- setModuleUsesBindless ();
599582 }
600583 else if (intrinID == GenISAIntrinsic::GenISA_simdBlockWrite)
601584 {
@@ -606,8 +589,6 @@ void StatelessToStateful::promoteIntrinsic(InstructionInfo& II)
606589 newBlockWrite->setDebugLoc (I->getDebugLoc ());
607590 I->replaceAllUsesWith (newBlockWrite);
608591 I->eraseFromParent ();
609-
610- setModuleUsesBindless ();
611592 }
612593 return ;
613594 }
@@ -714,7 +695,6 @@ void StatelessToStateful::promoteLoad(InstructionInfo& II)
714695
715696 I->replaceAllUsesWith (bindlessLoad);
716697 I->eraseFromParent ();
717- setModuleUsesBindless ();
718698 }
719699 else if (m_targetAddressing == TargetAddressing::BINDFUL || WA_ForcedUsedOfBindfulMode (*m_F))
720700 {
@@ -768,7 +748,6 @@ void StatelessToStateful::promoteStore(InstructionInfo& II)
768748 bindlessStore->setDebugLoc (DL);
769749
770750 I->eraseFromParent ();
771- setModuleUsesBindless ();
772751 }
773752 else if (m_targetAddressing == TargetAddressing::BINDFUL || WA_ForcedUsedOfBindfulMode (*m_F))
774753 {
@@ -832,7 +811,6 @@ void StatelessToStateful::promote()
832811 *UndefValue::get (Type::getInt32Ty (m_Module->getContext ())),
833812 IGC::BINDLESS);
834813 setPointerSizeTo32bit (statefullAddrspace, m_Module);
835- setModuleUsesBindless ();
836814 }
837815 else
838816 {
@@ -1120,15 +1098,3 @@ void StatelessToStateful::finalizeArgInitialValue(Function* F)
11201098 AddInst->eraseFromParent ();
11211099 }
11221100}
1123-
1124- void StatelessToStateful::setModuleUsesBindless ()
1125- {
1126- auto MD = getAnalysis<MetaDataUtilsWrapper>().getModuleMetaData ();
1127- MD->ModuleUsesBindless = true ;
1128- IGC::serialize (*MD, m_Module);
1129- }
1130-
1131- bool StatelessToStateful::getModuleUsesBindless ()
1132- {
1133- return getAnalysis<MetaDataUtilsWrapper>().getModuleMetaData ()->ModuleUsesBindless ;
1134- }
0 commit comments