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

Peter Bergner <bergner at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Target|                            |powerpc64-linux,
                   |                            |powerpc64le-linux
                   |                            |powerpc-linux
                 CC|                            |meissner at gcc dot gnu.org,
                   |                            |segher at gcc dot gnu.org

--- Comment #1 from Peter Bergner <bergner at gcc dot gnu.org> ---
Talking with Mike and Segher offline, the problem is in the
*extenddftf2_internal pattern.  LRA is more pedantic than reload and wants
patterns to only use constraints that can hold types they're allowed to.

 (define_insn_and_split "*extenddftf2_internal"
   [(set (match_operand:TF 0 "nonimmediate_operand" "=m,Y,ws,d,&d")
        (float_extend:TF (match_operand:DF 1 "input_operand" "d,r,md,md,md")))
    (use (match_operand:DF 2 "zero_reg_mem_operand" "d,r,j,m,d"))]

TFmode variables are not allowed in Altivec registers, yet alternative 2 for
the *extenddftf2_internal pattern allows "ws" which is a scalar FP value in a
VSX register (ie, a superset of the FP and Altivec registers).  Therefore, this
pattern should not use the "ws" constrint and should be using "d" instead.

Reply via email to