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

Tom de Vries <vries at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |kcy at codesourcery dot com

--- Comment #3 from Tom de Vries <vries at gcc dot gnu.org> ---
(In reply to Tom de Vries from comment #0)
> Trying a bit harder, I can fix the problem by skipping over the unaligned
> register here:
> ...
> diff --git a/gcc/lra-spills.c b/gcc/lra-spills.c
> index 492fc18..6ecfad2 100644
> --- a/gcc/lra-spills.c
> +++ b/gcc/lra-spills.c
> @@ -276,7 +276,10 @@ assign_spill_hard_regs (int *pseudo_regnos, int n)
>        for (k = 0; k < spill_class_size; k++)
>         {
>           hard_regno = ira_class_hard_regs[spill_class][k];
> -         if (! overlaps_hard_reg_set_p (conflict_hard_regs, mode,
> hard_regno))
> +         if (!
> ira_prohibited_class_mode_regs[spill_class][PSEUDO_REGNO_MODE (regno)]
> +             && ! overlaps_hard_reg_set_p (conflict_hard_regs, mode,
> +                                           hard_regno))
>             break;
>         }
>        if (k >= spill_class_size)
> ...
> 

Kwok has pointed out that in fact ira_prohibited_class_mode_regs is a
HARD_REG_SET which needs to be tested using TEST_HARD_REG_BIT.

Reply via email to