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.