new file mode 100644
@@ -0,0 +1,18 @@
+/* { dg-do compile } */
+
+int a, b, c, d;
+void h();
+int e() __attribute__((returns_twice));
+void f() {
+ int *g = (int *)(__INTPTR_TYPE__)c;
+ if (b) {
+ h();
+ g--;
+ if (a)
+ if (d)
+ h();
+ }
+ if (g++)
+ e();
+ c = (__INTPTR_TYPE__)g;
+}
@@ -3412,7 +3412,11 @@ do_pre_regular_insertion (basic_block block, basic_block dom,
/* If all edges produce the same value and that value is
an invariant, then the PHI has the same value on all
edges. Note this. */
- else if (!cant_insert && all_same)
+ else if (!cant_insert
+ && all_same
+ && (edoubleprime->kind != NAME
+ || !SSA_NAME_OCCURS_IN_ABNORMAL_PHI
+ (PRE_EXPR_NAME (edoubleprime))))
{
gcc_assert (edoubleprime->kind == CONSTANT
|| edoubleprime->kind == NAME);