This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH, rs6000] Fix PR83332 (missing vcond patterns)
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Bill Schmidt <wschmidt at linux dot vnet dot ibm dot com>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Segher Boessenkool <segher at kernel dot crashing dot org>, David Edelsohn <dje dot gcc at gmail dot com>
- Date: Tue, 12 Dec 2017 09:02:04 +0100
- Subject: Re: [PATCH, rs6000] Fix PR83332 (missing vcond patterns)
- Authentication-results: sourceware.org; auth=none
- References: <184e4c3d-02f9-6623-bf0e-451852e7d47b@linux.vnet.ibm.com>
On Mon, Dec 11, 2017 at 10:55 PM, Bill Schmidt
<wschmidt@linux.vnet.ibm.com> wrote:
> Hi,
>
> A new test case introduced for PR81303 failed on powerpc64 (BE, LE). This
> turns out to be due to a missing standard pattern (vcondv2div2df). This
> and a couple of other patterns are easy to support with existing logic
> by just adding new patterns with appropriate modes. That's all this patch
> does. That's sufficient to cause the failing test to pass.
>
> Bootstrapped and tested on powerpc64le-linux-gnu with no regressions. Is
> this okay for trunk?
>
> Thanks,
> Bill
>
>
> 2017-12-11 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
>
> PR target/83332
> * config/rs6000/vector.md (vcondv2dfv2di): New define_expand.
> (vcondv2div2df): Likewise.
> (vconduv2dfv2di): Likewise.
>
> Index: gcc/config/rs6000/vector.md
> ===================================================================
> --- gcc/config/rs6000/vector.md (revision 255539)
> +++ gcc/config/rs6000/vector.md (working copy)
> @@ -455,6 +455,44 @@
> FAIL;
> }")
>
> +(define_expand "vcondv2dfv2di"
given you already have vcondv4siv4sf this asks for macroization, no? I see you
have vcond<mode><mode> already, you can use
vcond<VEC_I:mode><VEC_F:mode>
and guard with GET_MODE_NUNITS () == GET_MODE_NUNINTS ()?
> + [(set (match_operand:V2DF 0 "vfloat_operand" "")
> + (if_then_else:V2DF
> + (match_operator 3 "comparison_operator"
> + [(match_operand:V2DI 4 "vint_operand" "")
> + (match_operand:V2DI 5 "vint_operand" "")])
> + (match_operand:V2DF 1 "vfloat_operand" "")
> + (match_operand:V2DF 2 "vfloat_operand" "")))]
> + "VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DFmode)
> + && VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DImode)"
> + "
> +{
> + if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
> + operands[3], operands[4], operands[5]))
> + DONE;
> + else
> + FAIL;
> +}")
> +
> +(define_expand "vcondv2div2df"
> + [(set (match_operand:V2DI 0 "vint_operand" "")
> + (if_then_else:V2DI
> + (match_operator 3 "comparison_operator"
> + [(match_operand:V2DF 4 "vfloat_operand" "")
> + (match_operand:V2DF 5 "vfloat_operand" "")])
> + (match_operand:V2DI 1 "vint_operand" "")
> + (match_operand:V2DI 2 "vint_operand" "")))]
> + "VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DFmode)
> + && VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DImode)"
> + "
> +{
> + if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
> + operands[3], operands[4], operands[5]))
> + DONE;
> + else
> + FAIL;
> +}")
> +
> (define_expand "vcondu<mode><mode>"
> [(set (match_operand:VEC_I 0 "vint_operand")
> (if_then_else:VEC_I
> @@ -492,6 +530,25 @@
> FAIL;
> }")
>
> +(define_expand "vconduv2dfv2di"
> + [(set (match_operand:V2DF 0 "vfloat_operand" "")
> + (if_then_else:V2DF
> + (match_operator 3 "comparison_operator"
> + [(match_operand:V2DI 4 "vint_operand" "")
> + (match_operand:V2DI 5 "vint_operand" "")])
> + (match_operand:V2DF 1 "vfloat_operand" "")
> + (match_operand:V2DF 2 "vfloat_operand" "")))]
> + "VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DFmode)
> + && VECTOR_UNIT_ALTIVEC_OR_VSX_P (V2DImode)"
> + "
> +{
> + if (rs6000_emit_vector_cond_expr (operands[0], operands[1], operands[2],
> + operands[3], operands[4], operands[5]))
> + DONE;
> + else
> + FAIL;
> +}")
> +
> (define_expand "vector_eq<mode>"
> [(set (match_operand:VEC_C 0 "vlogical_operand" "")
> (eq:VEC_C (match_operand:VEC_C 1 "vlogical_operand" "")
>