On 03.09.20 08:39, Ilya Leoshkevich wrote: > Bootstrapped (with BOOT_CFLAGS='-g -O2 -Wno-error=maybe-uninitialized') > and regtested on s390x-redhat-linux. Ok for master? > > > > Certain alternatives of *vec_tf_to_v1tf use "v" constraint for its > TFmode source operand. Therefore it is assigned to VEC_REGS class, and > when it is reloaded using *movtf_64, whose relevant alternatives need > FP_REGS, LRA loops and ICE happens. The reason is that register class > mismatch causes LRA to emit another reload, which triggers this issue > again. > > Fix by using "f" constraint, which is more appropriate for FP register > pairs anyway. > > gcc/ChangeLog: > > 2020-09-02 Ilya Leoshkevich <i...@linux.ibm.com> > > * config/s390/vector.md(*vec_tf_to_v1tf): Use "f" instead of "v" > for the source operand.
Ok. Thanks! Andreas > --- > gcc/config/s390/vector.md | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md > index 131bbda09bc..2573b7d980a 100644 > --- a/gcc/config/s390/vector.md > +++ b/gcc/config/s390/vector.md > @@ -567,7 +567,7 @@ (define_insn "*vec_splats_bswap_elem<mode>" > ; single vector register. > (define_insn "*vec_tf_to_v1tf" > [(set (match_operand:V1TF 0 "nonimmediate_operand" > "=v,v,R,v,v") > - (vec_duplicate:V1TF (match_operand:TF 1 "general_operand" > "v,R,v,G,d")))] > + (vec_duplicate:V1TF (match_operand:TF 1 "general_operand" > "f,R,f,G,d")))] > "TARGET_VX" > "@ > vmrhg\t%v0,%1,%N1 >