@@ -119,14 +119,6 @@ static int try_to_simplify_bb(struct basic_block
*bb, struct instruction *first,
{
int changed = 0;
pseudo_t phi;
- int bogus;
-
- /*
- * This a due to improper dominance tracking during
- * simplify_symbol_usage()/conversion to SSA form.
- * No sane simplification can be done when we have this.
- */
- bogus = bb_list_size(bb->parents) != pseudo_list_size(first->phi_list);
FOR_EACH_PTR(first->phi_list, phi) {
struct instruction *def = phi->def;
@@ -156,8 +148,14 @@ static int try_to_simplify_bb(struct basic_block
*bb, struct instruction *first,
continue;
changed |= rewrite_branch(source, &br->bb_true, bb, target);
changed |= rewrite_branch(source, &br->bb_false, bb, target);
- if (changed && !bogus)
+ /*
+ * FIXME: change 11b1a83 cause deadloop on wine compile,
+ * disable for now.
+ */
+#if 0
+ if (changed)
kill_use(THIS_ADDRESS(phi));
+#endif
} END_FOR_EACH_PTR(phi);
return changed;
}
@@ -22,6 +22,7 @@ static int foo(int a, int b)
* Verify if OP_PHI usage is adjusted after successful try_to_simplify_bb()
* check-command: test-linearize $file
* check-output-ignore
+ * check-known-to-fail
*
* check-output-excludes: phi\\.
* check-output-excludes: phisrc\\.
b/validation/kill-unreachable-phi.c
new file mode 100644
@@ -0,0 +1,27 @@
+extern char *strcpy (char *__dest, const char *__src);
+
+static void test_menu_iteminfo( void )
+{
+ int ansi = 1;
+ void *init, *string;
+ char initA[]="XYZ";
+ char stringA[0x80];
+ do {
+ if(ansi) {
+ string=stringA;
+ init = initA;
+ }
+ if(ansi)
+ strcpy( string, init );
+ } while( !(ansi = !ansi) );
+}
+/*
+ * check-name: kill-unreachable-phi
+ * check-description:
+ * In wine source tests/menu.c
+ * Improper killing a phi instruction inside not reachable BB cause
+ * dead loop on sparse.
+ *
+ * check-output-ignore
+ *
+ */
Michael Stefaniuc report that sparse deadloop on one of the wine source file. The minimal test case to reproduced the deadloop has been add to validation as "kill-unreachable-phi.c". The change that introduce the deadloop can be trace back to 11b1a83b "fix OP_PHI usage in try_to_simplify_bb()" and later d7985338 "fix OP_PHI usage in try_to_simplify_bb() only when non-bogus" Temporary revert the change to avoid the deadloop. The revert cause one of the test case fail because some phi related optimization was not done. I set that test case to known to fail. Reported-by: Michael Stefaniuc <mstefani@mykolab.com> Signed-off-by: Christopher Li <sparse@chrisli.org> --- flow.c | 16 +++++++--------- validation/kill-phi-ttsbb.c | 1 + validation/kill-unreachable-phi.c | 27 +++++++++++++++++++++++++++ 3 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 validation/kill-unreachable-phi.c