On 05.09.19 13:10, Ilya Leoshkevich wrote: > Currently gcc does not emit wf{c,k}* instructions when comparing long > double values. Middle-end actually adds them in the first place, but > then veclower pass replaces them with floating point register pair > operations, because the corresponding expander is missing. > > gcc/ChangeLog: > > 2019-08-09 Ilya Leoshkevich <i...@linux.ibm.com> > > PR target/77918 > * config/s390/vector.md (vcondv1tiv1tf): New variant of > vcond$a$b expander.
Couldn't you just add V1TI to V_HW and V_HW2 instead? Andreas > --- > gcc/config/s390/vector.md | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/gcc/config/s390/vector.md b/gcc/config/s390/vector.md > index d7a266c5605..ca5ec0dd3b0 100644 > --- a/gcc/config/s390/vector.md > +++ b/gcc/config/s390/vector.md > @@ -649,6 +649,21 @@ > DONE; > }) > > +(define_expand "vcondv1tiv1tf" > + [(set (match_operand:V1TI 0 "register_operand" "") > + (if_then_else:V1TI > + (match_operator 3 "vcond_comparison_operator" > + [(match_operand:V1TF 4 "register_operand" "") > + (match_operand:V1TF 5 "nonmemory_operand" "")]) > + (match_operand:V1TI 1 "nonmemory_operand" "") > + (match_operand:V1TI 2 "nonmemory_operand" "")))] > + "TARGET_VXE" > +{ > + s390_expand_vcond (operands[0], operands[1], operands[2], > + GET_CODE (operands[3]), operands[4], operands[5]); > + DONE; > +}) > + > (define_expand "vcondu<V_HW:mode><V_HW2:mode>" > [(set (match_operand:V_HW 0 "register_operand" "") > (if_then_else:V_HW >