properly detect ssa form
commit81da1cdebb213077a1ce2c1aaed051de0751e13c
authorQuentin Carbonneaux <quentin@c9x.me>
Thu, 11 Apr 2019 17:36:13 +0000 (11 19:36 +0200)
committerQuentin Carbonneaux <quentin@c9x.me>
Thu, 11 Apr 2019 18:18:20 +0000 (11 20:18 +0200)
tree0d4022e2db324543bf9e0caf802043a5b11495d7
parentd84f5fcbb75dcf8f6ff1f12e7509d05598a4b561
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.
all.h
main.c
ssa.c