@@ -359,22 +359,22 @@ void SsaBuilder::ComputeImmediateDom(BasicBlock** postOrder, int count)
359359 * @remarks This would help us answer queries such as "a dom b?" in constant time. 
360360 *          For example, if a dominated b, then Pre[a] < Pre[b] but Post[a] > Post[b] 
361361 */  
362- void  SsaBuilder::DomTreeWalk (BasicBlock* curBlock, BlkToBlkSetMap * domTree, int * preIndex, int * postIndex)
362+ void  SsaBuilder::DomTreeWalk (BasicBlock* curBlock, BlkToBlkVectorMap * domTree, int * preIndex, int * postIndex)
363363{
364364    JITDUMP (" [SsaBuilder::DomTreeWalk] block %s:\n " dspToString ());
365365
366366    //  Store the order number at the block number in the pre order list.
367367    m_pDomPreOrder[curBlock->bbNum ] = *preIndex;
368368    ++(*preIndex);
369369
370-     BlkSet* pBlkSet ;
371-     if  (domTree-> Lookup (curBlock, &pBlkSet) )
370+     BlkVector* domChildren = domTree-> LookupPointer (curBlock) ;
371+     if  (domChildren !=  nullptr )
372372    {
373-         for  (BlkSet::KeyIterator ki = pBlkSet-> Begin (); !ki. Equal (pBlkSet-> End ()); ++ki )
373+         for  (BasicBlock* child : *domChildren )
374374        {
375-             if  (curBlock != ki. Get () )
375+             if  (curBlock != child )
376376            {
377-                 DomTreeWalk (ki. Get () , domTree, preIndex, postIndex);
377+                 DomTreeWalk (child , domTree, preIndex, postIndex);
378378            }
379379        }
380380    }
@@ -393,7 +393,7 @@ void SsaBuilder::DomTreeWalk(BasicBlock* curBlock, BlkToBlkSetMap* domTree, int*
393393 * 
394394 */  
395395/*  static */ 
396- void  SsaBuilder::ConstructDomTreeForBlock (Compiler* pCompiler, BasicBlock* block, BlkToBlkSetMap * domTree)
396+ void  SsaBuilder::ConstructDomTreeForBlock (Compiler* pCompiler, BasicBlock* block, BlkToBlkVectorMap * domTree)
397397{
398398    BasicBlock* bbIDom = block->bbIDom ;
399399
@@ -404,16 +404,11 @@ void SsaBuilder::ConstructDomTreeForBlock(Compiler* pCompiler, BasicBlock* block
404404    }
405405
406406    //  If the bbIDom map key doesn't exist, create one.
407-     BlkSet* pBlkSet;
408-     if  (!domTree->Lookup (bbIDom, &pBlkSet))
409-     {
410-         pBlkSet = new  (domTree->GetAllocator ()) BlkSet (domTree->GetAllocator ());
411-         domTree->Set (bbIDom, pBlkSet);
412-     }
407+     BlkVector* domChildren = domTree->Emplace (bbIDom, domTree->GetAllocator ());
413408
414409    DBG_SSA_JITDUMP (" Inserting BB%02u as dom child of BB%02u.\n " bbNum , bbIDom->bbNum );
415410    //  Insert the block into the block's set.
416-     pBlkSet-> Set (block,  true );
411+     domChildren-> push_back (block);
417412}
418413
419414/* *
@@ -426,7 +421,7 @@ void SsaBuilder::ConstructDomTreeForBlock(Compiler* pCompiler, BasicBlock* block
426421 * 
427422 */  
428423/*  static */ 
429- void  SsaBuilder::ComputeDominators (Compiler* pCompiler, BlkToBlkSetMap * domTree)
424+ void  SsaBuilder::ComputeDominators (Compiler* pCompiler, BlkToBlkVectorMap * domTree)
430425{
431426    JITDUMP (" *************** In SsaBuilder::ComputeDominators(Compiler*, ...)\n " 
432427
@@ -450,7 +445,7 @@ void SsaBuilder::ComputeDominators(Compiler* pCompiler, BlkToBlkSetMap* domTree)
450445 * @param domTree A map of (block -> set of blocks) tree representation that is empty. 
451446 * 
452447 */  
453- void  SsaBuilder::ComputeDominators (BasicBlock** postOrder, int  count, BlkToBlkSetMap * domTree)
448+ void  SsaBuilder::ComputeDominators (BasicBlock** postOrder, int  count, BlkToBlkVectorMap * domTree)
454449{
455450    JITDUMP (" *************** In SsaBuilder::ComputeDominators(BasicBlock** postOrder, int count, ...)\n " 
456451
@@ -486,21 +481,22 @@ void SsaBuilder::ComputeDominators(BasicBlock** postOrder, int count, BlkToBlkSe
486481 * @param domTree A map of (block -> set of blocks) tree representation. 
487482 */  
488483/*  static */ 
489- void  SsaBuilder::DisplayDominators (BlkToBlkSetMap * domTree)
484+ void  SsaBuilder::DisplayDominators (BlkToBlkVectorMap * domTree)
490485{
491486    printf (" After computing dominator tree: \n " 
492-     for  (BlkToBlkSetMap ::KeyIterator nodes = domTree->Begin (); !nodes.Equal (domTree->End ()); ++nodes)
487+     for  (BlkToBlkVectorMap ::KeyIterator nodes = domTree->Begin (); !nodes.Equal (domTree->End ()); ++nodes)
493488    {
494489        printf (" BB%02u := {" Get ()->bbNum );
490+         bool  first = true ;
495491
496-         BlkSet* pBlkSet = nodes.GetValue ();
497-         for  (BlkSet::KeyIterator ki = pBlkSet->Begin (); !ki.Equal (pBlkSet->End ()); ++ki)
492+         for  (BasicBlock* child : nodes.GetValue ())
498493        {
499-             if  (!ki. Equal (pBlkSet-> Begin ()) )
494+             if  (!first )
500495            {
501496                printf (" ," 
502497            }
503-             printf (" BB%02u" Get ()->bbNum );
498+             first = false ;
499+             printf (" BB%02u" bbNum );
504500        }
505501        printf (" }\n " 
506502    }
@@ -1657,7 +1653,7 @@ void SsaBuilder::BlockPopStacks(BasicBlock* block, SsaRenameState* pRenameState)
16571653 *      and Destruction of Static Single Assignment Form." 
16581654 */  
16591655
1660- void  SsaBuilder::RenameVariables (BlkToBlkSetMap * domTree, SsaRenameState* pRenameState)
1656+ void  SsaBuilder::RenameVariables (BlkToBlkVectorMap * domTree, SsaRenameState* pRenameState)
16611657{
16621658    JITDUMP (" *************** In SsaBuilder::RenameVariables()\n " 
16631659
@@ -1750,13 +1746,13 @@ void SsaBuilder::RenameVariables(BlkToBlkSetMap* domTree, SsaRenameState* pRenam
17501746            AssignPhiNodeRhsVariables (block, pRenameState);
17511747
17521748            //  Recurse with the block's DOM children.
1753-             BlkSet* pBlkSet ;
1754-             if  (domTree-> Lookup (block, &pBlkSet) )
1749+             BlkVector* domChildren = domTree-> LookupPointer (block) ;
1750+             if  (domChildren !=  nullptr )
17551751            {
1756-                 for  (BlkSet::KeyIterator  child = pBlkSet-> Begin (); !child. Equal (pBlkSet-> End ()); ++child )
1752+                 for  (BasicBlock*  child : *domChildren )
17571753                {
1758-                     DBG_SSA_JITDUMP (" [SsaBuilder::RenameVariables](pushing dom child BB%02u)\n " . Get () ->bbNum );
1759-                     blocksToDo->push_back (BlockWork (child. Get () ));
1754+                     DBG_SSA_JITDUMP (" [SsaBuilder::RenameVariables](pushing dom child BB%02u)\n " bbNum );
1755+                     blocksToDo->push_back (BlockWork (child));
17601756                }
17611757            }
17621758        }
@@ -1867,7 +1863,7 @@ void SsaBuilder::Build()
18671863    ComputeImmediateDom (postOrder, count);
18681864
18691865    //  Compute the dominator tree.
1870-     BlkToBlkSetMap * domTree = new  (&m_allocator) BlkToBlkSetMap (&m_allocator);
1866+     BlkToBlkVectorMap * domTree = new  (&m_allocator) BlkToBlkVectorMap (&m_allocator);
18711867    ComputeDominators (postOrder, count, domTree);
18721868    EndPhase (PHASE_BUILD_SSA_DOMS);
18731869
0 commit comments