+2016-06-02 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR rtl-optimization/71295
+ * rtlanal.c (subreg_get_info): If taking a subreg at the requested
+ offset would go over the size of the inner mode reject it.
+
2016-06-02 Jakub Jelinek <jakub@redhat.com>
* config/i386/sse.md (*vec_concatv4si): Use v=v,v instead of
info->offset = offset / regsize_xmode;
return;
}
+ /* It's not valid to extract a subreg of mode YMODE at OFFSET that
+ would go outside of XMODE. */
+ if (!rknown
+ && GET_MODE_SIZE (ymode) + offset > GET_MODE_SIZE (xmode))
+ {
+ info->representable_p = false;
+ info->nregs = nregs_ymode;
+ info->offset = offset / regsize_xmode;
+ return;
+ }
/* Quick exit for the simple and common case of extracting whole
subregisters from a multiregister value. */
/* ??? It would be better to integrate this into the code below,
+2016-06-02 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ PR rtl-optimization/71295
+ * gcc.c-torture/compile/pr71295.c: New test.
+
2016-06-02 Jakub Jelinek <jakub@redhat.com>
* gcc.target/i386/avx512vl-concatv4si-1.c: New test.
--- /dev/null
+extern void fn2 (long long);
+int a;
+
+void
+fn1 ()
+{
+ long long b[3];
+ a = 0;
+ for (; a < 3; a++)
+ b[a] = 1;
+ fn2 (b[1]);
+}