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 (); > +}