qbe

Internal scc patchset buffer for QBE
Log | Files | Refs | README | LICENSE

commit a85fe6e2d955b0b34e0d17ca244a978489db4a00
parent 60804c92a81cc4cba494b3b48d11151559269d9b
Author: Quentin Carbonneaux <quentin@c9x.me>
Date:   Fri,  1 Mar 2019 15:08:58 +0100

skip expensive ssa-building loop when possible

If a temporary is assigned exactly
once (most are), there is no need
to do any work to put it in ssa
form.

On an input file of ~35k loc, this
makes the processing time go from
2.9 secs to 1.2 secs.

Diffstat:
Mssa.c | 7+++----
1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/ssa.c b/ssa.c @@ -125,6 +125,8 @@ phiins(Fn *fn) fn->tmp[t].visit = 0; if (fn->tmp[t].phi != 0) continue; + if (fn->tmp[t].ndef == 1) + continue; bszero(u); k = -1; bp = be; @@ -140,10 +142,7 @@ phiins(Fn *fn) } if (req(i->to, TMP(t))) { if (!bshas(b->out, t)) { - if (fn->tmp[t].ndef == 1) - r = TMP(t); - else - r = refindex(t, fn); + r = refindex(t, fn); i->to = r; } else { if (!bshas(u, b->id)) {