@@ -352,19 +352,19 @@ int dominates(pseudo_t pseudo, struct instruction *insn, struct instruction *dom
return 1;
}
-static int phisrc_in_bb(struct pseudo_list *list, struct basic_block *bb)
+static int phisrc_in_bb(struct instruction_list *list, struct basic_block *bb)
{
- pseudo_t p;
- FOR_EACH_PTR(list, p) {
- if (p->def->bb == bb)
+ struct instruction *def;
+ FOR_EACH_PTR(list, def) {
+ if (def->bb == bb)
return 1;
- } END_FOR_EACH_PTR(p);
+ } END_FOR_EACH_PTR(def);
return 0;
}
static int find_dominating_parents(pseudo_t pseudo, struct instruction *insn,
- struct basic_block *bb, unsigned long generation, struct pseudo_list **dominators,
+ struct basic_block *bb, unsigned long generation, struct instruction_list **dominators,
int local)
{
struct basic_block *parent;
@@ -401,7 +401,7 @@ no_dominance:
found_dominator:
if (dominators && phisrc_in_bb(*dominators, parent))
continue;
- add_dominator(dominators, insn, one, pseudo->ident);
+ add_instruction(dominators, one);
} END_FOR_EACH_PTR(parent);
return 1;
}
@@ -472,7 +472,8 @@ static int find_dominating_stores(pseudo_t pseudo, struct instruction *insn,
{
struct basic_block *bb = insn->bb;
struct instruction *one, *dom = NULL;
- struct pseudo_list *dominators;
+ struct instruction_list *dominators;
+ struct pseudo_list *phi_list;
int partial;
/* Unreachable load? Undo it */
@@ -534,7 +535,8 @@ found:
* have to turn the load into a phi-node of the
* dominators.
*/
- rewrite_load_instruction(insn, dominators);
+ phi_list = add_load_dominators(insn, dominators, pseudo->ident);
+ rewrite_load_instruction(insn, phi_list);
return 1;
}
new file mode 100644
@@ -0,0 +1,17 @@
+extern void abort(void);
+extern int bar;
+
+int foo(void)
+{
+ if (bar)
+ abort();
+ return bar;
+}
+
+/*
+ * check-name: phisrc orphaned (stores)
+ * check-command: test-linearize -Wno-decl $file
+ *
+ * check-output-ignore
+ * check-output-excludes: phisrc
+ */