aboutsummaryrefslogtreecommitdiff
path: root/main.c
diff options
context:
space:
mode:
authorQuentin Carbonneaux <[email protected]>2019-04-11 19:36:13 +0200
committerQuentin Carbonneaux <[email protected]>2019-04-11 20:18:20 +0200
commit81da1cdebb213077a1ce2c1aaed051de0751e13c (patch)
tree0d4022e2db324543bf9e0caf802043a5b11495d7 /main.c
parentd84f5fcbb75dcf8f6ff1f12e7509d05598a4b561 (diff)
properly detect ssa form
Previously, we would skip ssa construction when a temporary has a single definition. This is only part of the ssa invariant: we must also check that all uses are dominated by the single definition. The new code does this. In fact, qbe does not store all the dominators for a block, so instead of walking the idom linked list we use a rough heuristic and declare conservatively that B0 dominates B1 when one of the two conditions is true: a. B0 is the start block b. B0 is B1 Some measurements on a big file from Michael Forney show that the code is still as fast as before this patch.
Diffstat (limited to 'main.c')
-rw-r--r--main.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/main.c b/main.c
index 033ed9c..99ab330 100644
--- a/main.c
+++ b/main.c
@@ -65,6 +65,7 @@ func(Fn *fn)
fillpreds(fn);
filluse(fn);
memopt(fn);
+ filluse(fn);
ssa(fn);
filluse(fn);
ssacheck(fn);