On Tue, Nov 17, 2015 at 12:49 PM, Ilya Enkovich <enkovich....@gmail.com> wrote:
> Hi,
>
> Default hook for get_mask_mode is supposed to return integer vector modes.  
> This means it should reject calar modes returned by mode_for_vector.  
> Bootstrapped and regtested on x86_64-unknown-linux-gnu, regtested on 
> aarch64-unknown-linux-gnu.  OK for trunk?

Ok.

Thanks,
Richard.

> Thanks,
> Ilya
> --
> gcc/
>
> 2015-11-17  Ilya Enkovich  <enkovich....@gmail.com>
>
>         PR middle-end/68134
>         * targhooks.c (default_get_mask_mode): Filter out
>         scalar modes returned by mode_for_vector.
>
> gcc/testsuite/
>
> 2015-11-17  Ilya Enkovich  <enkovich....@gmail.com>
>
>         PR middle-end/68134
>         * gcc.dg/pr68134.c: New test.
>
>
> diff --git a/gcc/targhooks.c b/gcc/targhooks.c
> index c34b4e9..66d983b 100644
> --- a/gcc/targhooks.c
> +++ b/gcc/targhooks.c
> @@ -1093,8 +1093,8 @@ default_get_mask_mode (unsigned nunits, unsigned 
> vector_size)
>    gcc_assert (elem_size * nunits == vector_size);
>
>    vector_mode = mode_for_vector (elem_mode, nunits);
> -  if (VECTOR_MODE_P (vector_mode)
> -      && !targetm.vector_mode_supported_p (vector_mode))
> +  if (!VECTOR_MODE_P (vector_mode)
> +      || !targetm.vector_mode_supported_p (vector_mode))
>      vector_mode = BLKmode;
>
>    return vector_mode;
> diff --git a/gcc/testsuite/gcc.dg/pr68134.c b/gcc/testsuite/gcc.dg/pr68134.c
> new file mode 100644
> index 0000000..522b4c6
> --- /dev/null
> +++ b/gcc/testsuite/gcc.dg/pr68134.c
> @@ -0,0 +1,19 @@
> +/* { dg-do compile } */
> +/* { dg-options "-std=c99" } */
> +
> +#include <stdint.h>
> +
> +typedef double float64x1_t __attribute__ ((vector_size (8)));
> +typedef uint64_t uint64x1_t;
> +
> +void
> +foo (void)
> +{
> +  float64x1_t arg1 = (float64x1_t) 0x3fedf9d4343c7c80;
> +  float64x1_t arg2 = (float64x1_t) 0x3fcdc53742ea9c40;
> +  uint64x1_t result = (uint64x1_t) (arg1 == arg2);
> +  uint64_t got = result;
> +  uint64_t exp = 0;
> +  if (got != 0)
> +    __builtin_abort ();
> +}

Reply via email to