-
-/*-----------------------------------------------------------------*/
-/* addLoopBlocks - will add all blocks inside a loop to this loop */
-/* this should fix most of the liverange problems */
-/*-----------------------------------------------------------------*/
-void
-addLoopBlocks (eBBlock ** ebbs, int count)
-{
- region *aloop;
- struct eBBlock *block;
- int seqMin, seqMax;
- int i, j;
-
- for (i = 0; i < count; i++)
- {
- if (!ebbs[i]->KpartOfLoop)
- continue;
-
- /* for all loops this block belongs to */
- /* add inner block not already marked as part of this loop */
- aloop = setFirstItem (ebbs[i]->KpartOfLoop);
- for (; aloop; aloop = setNextItem (ebbs[i]->KpartOfLoop))
- {
-
- if (aloop->visited)
- continue;
-
- aloop->visited = 1;
-
- /* set max & min Seq for loopRegion */
- block = setFirstItem (aloop->regBlocks);
- seqMax = block->lSeq;
- seqMin = block->fSeq;
- for (; block; block = setNextItem (aloop->regBlocks))
- {
- if (block->lSeq > seqMax)
- seqMax = block->lSeq;
- if (block->fSeq < seqMin)
- seqMin = block->fSeq;
- }
-
- /* add all blocks between seqMin, seqMax to loop */
- for (j = 0; j < count; j++)
- {
- if (ebbs[j]->fSeq > seqMin && ebbs[j]->lSeq < seqMax &&
- !isinSet (aloop->regBlocks, ebbs[j]))
- {
- if (!isinSet (ebbs[j]->KpartOfLoop, aloop))
- addSetHead (&ebbs[j]->KpartOfLoop, aloop);
- }
- }
- }
- }
-}