[PATCH][PR98791]: IRA: Make sure allocno copy mode's are ordered

Vladimir Makarov vmakarov@redhat.com
Fri Feb 19 15:05:18 GMT 2021


On 2021-02-19 5:53 a.m., Andre Vieira (lists) wrote:
> Hi,
>
> This patch makes sure that allocno copies are not created for 
> unordered modes. The testcases in the PR highlighted a case where an 
> allocno copy was being created for:
> (insn 121 120 123 11 (parallel [
>             (set (reg:VNx2QI 217)
>                 (vec_duplicate:VNx2QI (subreg/s/v:QI (reg:SI 93 [ _2 
> ]) 0)))
>             (clobber (scratch:VNx16BI))
>         ]) 4750 {*vec_duplicatevnx2qi_reg}
>      (expr_list:REG_DEAD (reg:SI 93 [ _2 ])
>         (nil)))
>
> As the compiler detected that the vec_duplicate<mode>_reg pattern 
> allowed the input and output operand to be of the same register class, 
> it tried to create an allocno copy for these two operands, stripping 
> subregs in the process. However, this meant that the copy was between 
> VNx2QI and SI, which have unordered mode precisions.
>
> So at compile time we do not know which of the two modes is smaller 
> which is a requirement when updating allocno copy costs.
>
> Regression tested on aarch64-linux-gnu.
>
> Is this OK for trunk (and after a week backport to gcc-10) ?
>
OK.  Yes, it is wise to wait a bit and see how the patch behaves on the 
trunk before submitting it to gcc-10 branch.  Sometimes such changes can 
have quite unexpected consequences.  But I guess not in this is case.

Thank you for working on the issue.

> gcc/ChangeLog:
> 2021-02-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
>
>         PR rtl-optimization/98791
>         * ira-conflicts.c (process_regs_for_copy): Don't create 
> allocno copies for unordered modes.
>
> gcc/testsuite/ChangeLog:
> 2021-02-19  Andre Vieira  <andre.simoesdiasvieira@arm.com>
>
>         PR rtl-optimization/98791
>         * gcc.target/aarch64/sve/pr98791.c: New test.
>



More information about the Gcc-patches mailing list