@@ -513,7 +513,7 @@ void SsaBuilder::DisplayDominators(BlkToBlkSetMap* domTree)
513513//  dominance frontiers by a closure operation.
514514BlkToBlkSetMap* SsaBuilder::ComputeIteratedDominanceFrontier (BasicBlock** postOrder, int  count)
515515{
516-     BlkToBlkSetMap* frontier =  new  (&m_allocator)  BlkToBlkSetMap (&m_allocator);
516+     BlkToBlkVectorMap  mapDF (&m_allocator);
517517
518518    DBG_SSA_JITDUMP (" Computing IDF: First computing DF.\n " 
519519
@@ -534,8 +534,8 @@ BlkToBlkSetMap* SsaBuilder::ComputeIteratedDominanceFrontier(BasicBlock** postOr
534534
535535        flowList* blockPreds = m_pCompiler->BlockPredsWithEH (block);
536536
537-         //  If block has more  0/1 predecessor, skip.
538-         if  (blockPreds == nullptr  || blockPreds->flNext  == nullptr )
537+         //  If block has 0/1 predecessor, skip.
538+         if  (( blockPreds == nullptr )  || ( blockPreds->flNext  == nullptr ) )
539539        {
540540            DBG_SSA_JITDUMP ("    Has %d preds; skipping.\n " nullptr  ? 0  : 1 );
541541            continue ;
@@ -544,7 +544,7 @@ BlkToBlkSetMap* SsaBuilder::ComputeIteratedDominanceFrontier(BasicBlock** postOr
544544        //  Otherwise, there are > 1 preds.  Each is a candidate B2 in the definition --
545545        //  *unless* it dominates "block"/B3.
546546
547-         for  (flowList* pred = blockPreds; pred; pred = pred->flNext )
547+         for  (flowList* pred = blockPreds; pred !=  nullptr ; pred = pred->flNext )
548548        {
549549            DBG_SSA_JITDUMP ("    Considering predecessor BB%02u.\n " flBlock ->bbNum );
550550
@@ -560,13 +560,13 @@ BlkToBlkSetMap* SsaBuilder::ComputeIteratedDominanceFrontier(BasicBlock** postOr
560560                 b1             = b1->bbIDom )
561561            {
562562                DBG_SSA_JITDUMP ("       Adding BB%02u to dom frontier of pred dom BB%02u.\n " bbNum , b1->bbNum );
563-                 BlkSet* pBlkSet;
564-                 if  (!frontier->Lookup (b1, &pBlkSet))
563+ 
564+                 BlkVector& b1DF = *mapDF.Emplace (b1, &m_allocator);
565+                 //  It's possible to encounter the same DF multiple times, ensure that we don't add duplicates.
566+                 if  (b1DF.empty () || (b1DF.back () != block))
565567                {
566-                     pBlkSet = new  (&m_allocator) BlkSet (&m_allocator);
567-                     frontier->Set (b1, pBlkSet);
568+                     b1DF.push_back (block);
568569                }
569-                 pBlkSet->Set (block, true );
570570            }
571571        }
572572    }
@@ -577,20 +577,20 @@ BlkToBlkSetMap* SsaBuilder::ComputeIteratedDominanceFrontier(BasicBlock** postOr
577577        printf (" \n Computed DF:\n " 
578578        for  (int  i = 0 ; i < count; ++i)
579579        {
580-             BasicBlock* block  = postOrder[i];
581-             printf (" Block BB%02u := {" block ->bbNum );
580+             BasicBlock* b  = postOrder[i];
581+             printf (" Block BB%02u := {" b ->bbNum );
582582
583-             bool     first = true ;
584-             BlkSet* blkDf ;
585-             if  (frontier-> Lookup (block, &blkDf) )
583+             bool         first = true ;
584+             BlkVector* bDF   = mapDF. LookupPointer (b) ;
585+             if  (bDF !=  nullptr )
586586            {
587-                 for  (BlkSet::KeyIterator blkDfIter = blkDf-> Begin (); !blkDfIter. Equal (blkDf-> End ()); blkDfIter++ )
587+                 for  (BasicBlock* f : *bDF )
588588                {
589589                    if  (!first)
590590                    {
591591                        printf (" ," 
592592                    }
593-                     printf (" BB%02u" blkDfIter. Get () ->bbNum );
593+                     printf (" BB%02u" f ->bbNum );
594594                    first = false ;
595595                }
596596            }
@@ -602,8 +602,7 @@ BlkToBlkSetMap* SsaBuilder::ComputeIteratedDominanceFrontier(BasicBlock** postOr
602602    //  Now do the closure operation to make the dominance frontier into an IDF.
603603    //  There's probably a better way to do this...
604604    BlkToBlkSetMap* idf = new  (&m_allocator) BlkToBlkSetMap (&m_allocator);
605-     for  (BlkToBlkSetMap::KeyIterator kiFrontBlks = frontier->Begin (); !kiFrontBlks.Equal (frontier->End ());
606-          kiFrontBlks++)
605+     for  (BlkToBlkVectorMap::KeyIterator kiFrontBlks = mapDF.Begin (); !kiFrontBlks.Equal (mapDF.End ()); kiFrontBlks++)
607606    {
608607        //  Create IDF(b)
609608        BlkSet* blkIdf = new  (&m_allocator) BlkSet (&m_allocator);
@@ -623,16 +622,16 @@ BlkToBlkSetMap* SsaBuilder::ComputeIteratedDominanceFrontier(BasicBlock** postOr
623622            delta->Remove (curBlk);
624623
625624            //  Get DF(x).
626-             BlkSet * blkDf;
627-             if  (frontier-> Lookup (curBlk, & blkDf) )
625+             BlkVector * blkDf = mapDF. LookupPointer (curBlk) ;
626+             if  (blkDf !=  nullptr )
628627            {
629628                //  Add DF(x) to IDF(b) and update "delta" i.e., new additions to IDF(b).
630-                 for  (BlkSet::KeyIterator ki =  blkDf-> Begin (); !ki. Equal (blkDf-> End ()); ki++ )
629+                 for  (BasicBlock* f : * blkDf)
631630                {
632-                     if  (!blkIdf->Lookup (ki. Get () ))
631+                     if  (!blkIdf->Lookup (f ))
633632                    {
634-                         delta->Set (ki. Get () , true );
635-                         blkIdf->Set (ki. Get () , true );
633+                         delta->Set (f , true );
634+                         blkIdf->Set (f , true );
636635                    }
637636                }
638637            }
0 commit comments