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

Martin Liška <marxin at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |ASSIGNED
           Assignee|unassigned at gcc dot gnu.org      |marxin at gcc dot 
gnu.org
     Ever confirmed|0                           |1

--- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> ---
(In reply to Uroš Bizjak from comment #2)
> ix86_expand_sse_compare_mask generates temporary by itself, so the REG RTX
> is just overwritten. There is no issue with reusage of pseudos as they are
> short lived, and die in AND RTX anyway. OTOH, non-AVX AND RTX requires
> matched registers so I guess that this is a non-issue.
> 
> I think the following (untested) patch should fix all mentioned issues for
> good:

Thank you for the patch, I'll test it and install.
Is it pre-approved?

> 
> --cut here--
> diff --git a/gcc/config/i386/i386-expand.c b/gcc/config/i386/i386-expand.c
> index d50b811d863f..8a4955f87d2f 100644
> --- a/gcc/config/i386/i386-expand.c
> +++ b/gcc/config/i386/i386-expand.c
> @@ -16052,14 +16052,13 @@ ix86_expand_rounddf_32 (rtx operand0, rtx operand1)
>                                0, OPTAB_DIRECT);
>  
>    /* Compensate.  */
> -  tmp = gen_reg_rtx (mode);
>    /* xa2 = xa2 - (dxa > 0.5 ? 1 : 0) */
>    tmp = ix86_expand_sse_compare_mask (UNGT, dxa, half, false);
> -  emit_insn (gen_rtx_SET (tmp, gen_rtx_AND (mode, one, tmp)));
> +  emit_insn (gen_rtx_SET (tmp, gen_rtx_AND (mode, tmp, one)));
>    xa2 = expand_simple_binop (mode, MINUS, xa2, tmp, NULL_RTX, 0,
> OPTAB_DIRECT);
>    /* xa2 = xa2 + (dxa <= -0.5 ? 1 : 0) */
>    tmp = ix86_expand_sse_compare_mask (UNGE, mhalf, dxa, false);
> -  emit_insn (gen_rtx_SET (tmp, gen_rtx_AND (mode, one, tmp)));
> +  emit_insn (gen_rtx_SET (tmp, gen_rtx_AND (mode, tmp, one)));
>    xa2 = expand_simple_binop (mode, PLUS, xa2, tmp, NULL_RTX, 0,
> OPTAB_DIRECT);
>  
>    /* res = copysign (xa2, operand1) */
> --cut here--

Reply via email to