Thanks. after reading expunge_block(), i am curious whether " 'for (i=0; i<n_basic_blocks; i++){}" even works: from one hand, as routines such as 'compute_defs_uses_and_gen()' uses it, it should work; from the other hand, from the code of expunge_block, BASIC_BLOCK[n_basic_blocks-1] may not be the last element in the BASIC_BLOCK array.
For example,
BASIC_BLOCK is like this, [b0, NULL, b1, NULL, b3 ]; aparently, n_basic_blocks ==3.

Shouldn't those code with 'for (i=0; i<n_basic_blocks; i++){}" be a problem? Maybe it did not cause a problem because all these code get executed before any basic_block cleanup.

Thanks,
Sean

---------------------------------------------
   expunge_block (basic_block b)
   {
     unlink_block (b);
     BASIC_BLOCK (b->index) = NULL;
     n_basic_blocks--;
     /* We should be able to ggc_free here, but we are not.
The dead SSA_NAMES are left pointing to dead statements that are pointing
        to dead basic blocks making garbage collector to die.
We should be able to release all dead SSA_NAMES and at the same time we should
        clear out BB pointer of dead statements consistently.  */
   }
-----------------------------------------------


From: Diego Novillo <[EMAIL PROTECTED]>
To: sean yang <[EMAIL PROTECTED]>
CC: gcc@gcc.gnu.org
Subject: Re: Difference between 'FOR_EACH_BB' and 'for (i=0; i<n_basic_blocks; i++){}'
Date: Thu, 01 Jun 2006 14:51:54 -0400

sean yang wrote on 06/01/06 14:44:

> 'for (i=0; i<n_basic_blocks; i++){bb=BASIC_BLOCK(i);}' traverses accoring to the
> BB's index (because BASIC_BLOCK(i)->index ==i)
>
The first form may take you to a NULL basic block.  See expunge_block.

_________________________________________________________________
On the road to retirement? Check out MSN Life Events for advice on how to get there! http://lifeevents.msn.com/category.aspx?cid=Retirement

Reply via email to