This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] Fix Ada bootstrap (was: 16: EH redirection)


On Mon, Apr 27, 2009 at 4:28 PM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> This is the patch I am testing (x86_64-linux) and will commit once
>> passes. ?The problem here is that removing dead TRY region imply need to
>> update prev_try pointers in the subregions. ?This is actually ages old
>> bug, I am surprised it did not lead to any wrong code issues.
>>
>> There is still one ICE on ada testsuite in my run. ?This one is caused
>> by dominance calcuation being called in forprop2 on CFG containing dead
>> code. ?Seems weird since preceeding CCP calls cfgcleanup.
>
> Actually it is RTL fwprop2 ?and problem seems to be introduced by fact
> that CSE calls cleanup_cfg only conditionally while it can produce dead
> BBs.
>
> Steven, since I think you are responsible for the conditional cfgcleanup
> here, do you have any preferrences how to fix this?

CSE should cleanup_cfg when cse_main modifies jumps. cse_main returns
non-zero in this case. From cse.c:cse_main():

/* Perform cse on the instructions of a function.
   F is the first instruction.
   NREGS is one plus the highest pseudo-reg number used in the instruction.

   Return 2 if jump optimizations should be redone due to simplifications
   in conditional jump instructions.
   Return 1 if the CFG should be cleaned up because it has been modified.
   Return 0 otherwise.  */

int
cse_main (rtx f ATTRIBUTE_UNUSED, int nregs)
{
(...etc...)

If CSE introduces unreachable basic blocks and cse_main does *not*
return non-zero, then cse_main is broken.

Ciao!
Steven


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]