diff mbox series

FIx PR88855

Message ID alpine.LSU.2.20.1901151635350.23386@zhemvz.fhfr.qr
State New
Headers show
Series FIx PR88855 | expand

Commit Message

Richard Biener Jan. 15, 2019, 3:36 p.m. UTC
Bootstrapped and tested on x86_64-unknown-linux-gnu, applied to trunk.

Richard.

2019-01-15  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/88855
	* tree-if-conv.c (combine_blocks): Collect
	SSA_NAME_OCCURS_IN_ABNORMAL_PHI from propagated out virtuals.

	* gcc.dg/pr88855.c: New testcase.
diff mbox series

Patch

Index: gcc/tree-if-conv.c
===================================================================
--- gcc/tree-if-conv.c	(revision 267930)
+++ gcc/tree-if-conv.c	(working copy)
@@ -2633,6 +2633,8 @@  combine_blocks (struct loop *loop)
 	      FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
 		SET_USE (use_p, last_vdef);
 	    }
+	  if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (gimple_phi_result (vphi)))
+	    SSA_NAME_OCCURS_IN_ABNORMAL_PHI (last_vdef) = 1;
 	  gsi = gsi_for_stmt (vphi); 
 	  remove_phi_node (&gsi, true);
 	}
@@ -2691,6 +2693,8 @@  combine_blocks (struct loop *loop)
 	      FOR_EACH_IMM_USE_ON_STMT (use_p, iter)
 		SET_USE (use_p, last_vdef);
 	    }
+	  if (SSA_NAME_OCCURS_IN_ABNORMAL_PHI (gimple_phi_result (vphi)))
+	    SSA_NAME_OCCURS_IN_ABNORMAL_PHI (last_vdef) = 1;
 	  gimple_stmt_iterator gsi = gsi_for_stmt (vphi); 
 	  remove_phi_node (&gsi, true);
 	}
Index: gcc/testsuite/gcc.dg/pr88855.c
===================================================================
--- gcc/testsuite/gcc.dg/pr88855.c	(nonexistent)
+++ gcc/testsuite/gcc.dg/pr88855.c	(working copy)
@@ -0,0 +1,21 @@ 
+/* { dg-do compile } */
+/* { dg-options "-O -ftree-loop-if-convert -ftree-vrp -fno-tree-copy-prop -fno-tree-dce -fno-tree-dominator-opts" } */
+
+typedef int jmp_buf[1];
+
+extern void exit(int) __attribute__((__noreturn__));
+extern int setjmpx(jmp_buf) __attribute__((__returns_twice__));
+
+jmp_buf jbAnagram;
+int a[6];
+int d;
+int b () { exit (1); }
+int c () { b (); }
+int e ()
+{
+  int f = 0;
+  for (; f < 6; f++)
+    a[f] = d;
+  c ();
+  setjmpx (jbAnagram);
+}