* lower-subreg.c (simplify_subreg_concatn): Reject paradoxical subregs.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@234524
138bc75d-0d04-0410-961f-
82ee72b054a4
+2016-03-29 Richard Henderson <rth@redhat.com>
+
+ PR middle-end/70355
+ * lower-subreg.c (simplify_subreg_concatn): Reject paradoxical
+ subregs.
+
2016-03-29 Richard Biener <rguenther@suse.de>
PR middle-end/70424
2016-03-29 Richard Biener <rguenther@suse.de>
PR middle-end/70424
innermode = GET_MODE (op);
gcc_assert (byte < GET_MODE_SIZE (innermode));
innermode = GET_MODE (op);
gcc_assert (byte < GET_MODE_SIZE (innermode));
- gcc_assert (GET_MODE_SIZE (outermode) <= GET_MODE_SIZE (innermode));
+ if (GET_MODE_SIZE (outermode) > GET_MODE_SIZE (innermode))
+ return NULL_RTX;
inner_size = GET_MODE_SIZE (innermode) / XVECLEN (op, 0);
part = XVECEXP (op, 0, byte / inner_size);
inner_size = GET_MODE_SIZE (innermode) / XVECLEN (op, 0);
part = XVECEXP (op, 0, byte / inner_size);
--- /dev/null
+/* { dg-require-effective-target int128 } */
+/* { dg-additional-options "-g" } */
+
+typedef unsigned __int128 v2ti __attribute__ ((vector_size (32)));
+
+unsigned
+foo (unsigned i, v2ti v)
+{
+ do {
+ i--;
+ v %= ~v;
+ } while (i);
+ return v[0] + v[1];
+}
--- /dev/null
+/* { dg-require-effective-target int128 } */
+/* { dg-options "-O2 -fno-tree-ter -funroll-loops -mavx512f -g" } */
+
+typedef unsigned __int128 v2ti __attribute__ ((vector_size (32)));
+
+unsigned
+foo (unsigned i, v2ti v)
+{
+ do {
+ i--;
+ v %= ~v;
+ } while (i);
+ return v[0] + v[1];
+}