@@ -210,10 +210,10 @@ void block_pred(ref BlockOpt bo)
210210 for (block* b = bo.startblock; b; b = b.Bnext) // for each block
211211 {
212212 // printf("b = %p, BC = BC.%s\n", b, bc_str(b.bc));
213- foreach (bp; ListRange (b.Bsucc))
213+ foreach (bp; BsuccArray (b.Bsucc))
214214 { /* for each successor to b */
215215 // printf("\tbs = %p\n",list_block(bp));
216- list_block(bp) .Bpred.push(b); // original inserts at the beginning, don't think it matters
216+ bp .Bpred.push(b); // original inserts at the beginning, don't think it matters
217217 }
218218 }
219219 assert (bo.startblock.Bpred.length == 0 ); /* startblock has no preds */
@@ -233,13 +233,14 @@ void block_clearvisit(ref BlockOpt bo)
233233/* *******************************************
234234 * Visit block and each of its predecessors.
235235 */
236-
236+ @trusted
237237void block_visit (block* b)
238238{
239239 b.Bflags |= BFL .visited;
240- foreach (l; ListRange(b.Bsucc))
240+ foreach (bs; BsuccArray(b.Bsucc))
241+ // foreach (l; ListRange(b.Bsucc))
241242 {
242- block* bs = list_block(l);
243+ // block* bs = list_block(l);
243244 assert (bs);
244245 if ((bs.Bflags & BFL .visited) == 0 ) // if not visited
245246 block_visit(bs);
@@ -646,9 +647,10 @@ private void bropt(ref GlobalOptimizer go, ref BlockOpt bo)
646647 {
647648 b.bc = BC .exit;
648649 // Exit block has no successors, so remove them
649- foreach (bp; ListRange(b.Bsucc))
650+ foreach (bp; BsuccArray(b.Bsucc))
651+ // foreach (bp; ListRange(b.Bsucc))
650652 {
651- list_block(bp) .Bpred.subtract(b);
653+ bp .Bpred.subtract(b);
652654 }
653655 list_free(&b.Bsucc, FPNULL );
654656 debug if (debugc) printf(" CHANGE: noreturn becomes BC.exit\n " );
@@ -730,11 +732,12 @@ private void bropt(ref GlobalOptimizer go, ref BlockOpt bo)
730732 block* db = b.Bsuccx(i);
731733
732734 /* delete predecessors of successors (!) */
733- foreach (bl; ListRange(b.Bsucc))
735+ foreach (bl; BsuccArray(b.Bsucc))
736+ // foreach (bl; ListRange(b.Bsucc))
734737 {
735738 if (i-- ) // but not the db successor
736739 {
737- bool bx = list_block(bl) .Bpred.subtract(b);
740+ bool bx = bl .Bpred.subtract(b);
738741 assert (bx);
739742 }
740743 }
@@ -848,14 +851,16 @@ void compdfo(ref BlockOpt bo, ref Barray!(block*) dfo, block* startblock)
848851 /* *****************************
849852 * Add b's successors to dfo[], then b
850853 */
854+ @trusted
851855 void walkDFO (block* b)
852856 {
853857 assert (b);
854858 b.Bflags |= BFL .visited; // executed at least once
855859
856- foreach (bl; ListRange(b.Bsucc)) // for each successor
860+ foreach (bs; BsuccArray(b.Bsucc))
861+ // foreach (bl; ListRange(b.Bsucc)) // for each successor
857862 {
858- block* bs = list_block(bl);
863+ // block* bs = list_block(bl);
859864 assert (bs);
860865 if ((bs.Bflags & BFL .visited) == 0 ) // if not visited
861866 walkDFO(bs);
@@ -914,11 +919,12 @@ private void elimblks(ref GlobalOptimizer go, ref BlockOpt bo)
914919 /* for each marked successor S to b */
915920 /* remove b from S.Bpred. */
916921 /* Presumably all predecessors to b are unmarked also. */
917- foreach (s; ListRange(b.Bsucc))
922+ foreach (s; BsuccArray(b.Bsucc))
923+ // foreach (s; ListRange(b.Bsucc))
918924 {
919- assert (list_block(s));
920- if (list_block(s) .Bflags & BFL .visited) /* if it is marked */
921- list_block(s) .Bpred.subtract(b);
925+ // assert(list_block(s));
926+ if (s .Bflags & BFL .visited) /* if it is marked */
927+ s .Bpred.subtract(b);
922928 }
923929 if (b.Balign && b.Bnext && b.Balign > b.Bnext.Balign)
924930 b.Bnext.Balign = b.Balign;
@@ -1396,11 +1402,12 @@ private void bltailmerge(ref GlobalOptimizer go, ref BlockOpt bo)
13961402 /* Update the predecessor list of the successor list
13971403 of bnew, from b to bnew, and removing bn
13981404 */
1399- foreach (bl; ListRange(bnew.Bsucc))
1405+ foreach (bl; BsuccArray(bnew.Bsucc))
1406+ // foreach (bl; ListRange(bnew.Bsucc))
14001407 {
1401- list_block(bl) .Bpred.subtract(b);
1402- list_block(bl) .Bpred.subtract(bn);
1403- list_block(bl) .Bpred.push(bnew);
1408+ bl .Bpred.subtract(b);
1409+ bl .Bpred.subtract(bn);
1410+ bl .Bpred.push(bnew);
14041411 }
14051412
14061413 /* The predecessors to bnew are b and bn */
@@ -1441,7 +1448,7 @@ private void bltailmerge(ref GlobalOptimizer go, ref BlockOpt bo)
14411448}
14421449
14431450/* *********************************
1444- * Rearrange blocks to minimize jmp's .
1451+ * Rearrange blocks to minimize jmps .
14451452 */
14461453
14471454@trusted
@@ -1476,9 +1483,10 @@ private void brmin(ref GlobalOptimizer go, ref BlockOpt bo)
14761483 if (! isExceptionHandler(b.Bnext))
14771484 {
14781485 // Skip the block if one of the successors is already at Bnext.
1479- foreach (bl; ListRange(b.Bsucc))
1486+ foreach (bl; BsuccArray(b.Bsucc))
1487+ // foreach (bl; ListRange(b.Bsucc))
14801488 {
1481- if (list_block(bl) == b.Bnext)
1489+ if (bl == b.Bnext)
14821490 continue Lbb;
14831491 }
14841492 }
0 commit comments