@@ -1,3 +1,10 @@
+2014-02-27 Jeff Law <law@redhat.com>
+
+ PR rtl-optimization/52714
+ * combine.c (try_combine): When splitting an unrecognized PARALLEL
+ into two independent simple sets, if I3 is a jump, ensure the
+ pattern we place into I3 is a (set (pc) ...)
+
2014-02-27 Mikael Pettersson <mikpe@it.uu.se>
Jeff Law <law@redhat.com>
@@ -3712,6 +3712,9 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p,
#ifdef HAVE_cc0
&& !reg_referenced_p (cc0_rtx, set0)
#endif
+ /* If I3 is a jump, ensure that set0 is a jump so that
+ we do not create invalid RTL. */
+ && (!JUMP_P (i3) || SET_DEST (set0) == pc_rtx)
)
{
newi2pat = set1;
@@ -3726,6 +3729,9 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p,
#ifdef HAVE_cc0
&& !reg_referenced_p (cc0_rtx, set1)
#endif
+ /* If I3 is a jump, ensure that set1 is a jump so that
+ we do not create invalid RTL. */
+ && (!JUMP_P (i3) || SET_DEST (set1) == pc_rtx)
)
{
newi2pat = set0;
@@ -1,3 +1,8 @@
+2014-02-27 Jeff Law <law@redhat.com>
+
+ PR rtl-optimization/52714
+ * gcc.c-torture/compile/pr52714.c: New test.
+
2014-02-27 Mikael Pettersson <mikpe@it.uu.se>
Jeff Law <law@redhat.com>
new file mode 100644
@@ -0,0 +1,25 @@
+
+int __re_compile_fastmap(unsigned char *p)
+{
+ unsigned char **stack;
+ unsigned size;
+ unsigned avail;
+
+ stack = __builtin_alloca(5 * sizeof(unsigned char*));
+ if (stack == 0)
+ return -2;
+ size = 5;
+ avail = 0;
+
+ for (;;) {
+ switch (*p++) {
+ case 0:
+ if (avail == size)
+ return -2;
+ stack[avail++] = p;
+ }
+ }
+
+ return 0;
+}
+