[Bug rtl-optimization/63823] [5.0 Regression] MIPS will not build due to LRA ICE with 64 bit ABI

vmakarov at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Thu Nov 13 14:46:00 GMT 2014


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63823

--- Comment #6 from Vladimir Makarov <vmakarov at gcc dot gnu.org> ---
(In reply to Robert Suchanek from comment #5)
> It appears that enabling the debug info can trigger the ICE. In the
> testcase, after the patch, an instruction 1136 gets deleted and all
> references to pseudo 704 meant to be updated.
> 
> The following change in process_bb_lives () triggers the assertion later in
> the pass.
> 
> +             EXECUTE_IF_SET_IN_BITMAP
> +               (&lra_reg_info[dst_regno].insn_bitmap, 0, uid, bi)
> +               {
> +                 insn = lra_insn_recog_data[uid]->insn;
> +                 lra_substitute_pseudo_within_insn (insn, dst_regno,
> +                                                    SET_SRC (set));
> +                 lra_update_insn_regno_info (insn);
> +               }
> 
> On the first iteration, the list of insns using pseudo 704 is correct:
> 
> (gdb) call debug_bitmap(&lra_reg_info[704].insn_bitmap)
> 
> first = 0x188b720 current = 0x188b770 indx = 3
>         0x188b720 next = 0x188b770 prev = (nil) indx = 2
>                 bits = { 343 }
>         0x188b770 next = (nil) prev = 0x188b720 indx = 3
>                 bits = { 384 }
> 
> Insn 343 gets updated, pseudo 704 is replaced with original pseudo 234.
> However, the call to lra_update_insn_regno_info destroys the remaining
> references to pseudo 704 via invalidate_insn_data_regno_info so we end up
> with the following:
> 
> (gdb) call debug_bitmap(&lra_reg_info[704].insn_bitmap)
>                                                        
> first = 0x1855770 current = 0x1855770 indx = 3         
>         0x1855770 next = (nil) prev = (nil) indx = 3   
>                 bits = { 384 }
> 
> The next iteration(s) in EXECUTE_IF_SET_IN_BITMAP will not happen as
> bmp_iter_set () returns false. Insn 384 is left unchanged and the compiler
> fails later on assertion.

Thanks for analyzing this, Robert.  I've been working on some LRA
rematerialization issues and found this too.  I'll post a patch fixing this
issue soon.  If it works for you, I'll commit it on this week.



More information about the Gcc-bugs mailing list