On Sun, Jul 24, 2011 at 6:08 PM, Dimitrios Apostolou <ji...@gmx.net> wrote:
> Hello all,
>
> attached is my attempt to replace bitmaps, that we are *sure* they will
> never map any pseudo regs, with HARD_REG_SETs. Jakub, I have moved the check
> you suggested, for never surpassing FIRST_PSEUDO_REGS, into hard-reg-set.h,
> that's one of the two patches.
>
> Unfortunately the other patch is a little intrusive and it breaks something.
> I'm out of ideas for some days now, can you spot what's wrong?

Hi Jimis,

Can you please create your patches with the -p option, so that it's
easier to see what function you are changing? Also, even for an RFC
patch a ChangeLog is more than just nice to have ;-)

This hunk in df-problems looks odd:

@@ -2511,9 +2535,9 @@
       if (bb_index == EXIT_BLOCK)
        {
          unsigned regno;
-         bitmap_iterator bi;
-         EXECUTE_IF_SET_IN_BITMAP (df->exit_block_uses, FIRST_PSEUDO_REGISTER,
-                                   regno, bi)

So this EXECUTE_IF_SET_IN_BITMAP starts with FIRST_PSEUDO_REGISTER
(i.e. works on pseudo registers) ...

+         hard_reg_set_iterator iter;
+         EXECUTE_IF_SET_IN_HARD_REG_SET (df->exit_block_uses, 
FIRST_PSEUDO_REGISTER,
+                                         regno, iter)
            gcc_unreachable ();
        }
       else

... and you change it to work only on hard registers. That code looked
like a check to verify that exit_block_uses only contains hard
registers. So you can probably just drop this check.

The only suggestion that I can make for now to investigate the ICE in
reg-stack, is to compare the DF info before your patch and after.
Since your patch does not (or rather: should not) change the logic in
DF, the DF info at reg-stack should be the same. Your ICE suggests
that the register allocator has left a stack register live across an
abnormal edge, and that may be due to changed DF info.

Ciao!
Steven

Reply via email to