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 <[email protected]>
>
> 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
>