qbe

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

commit 9294295bb54c27da644c4e6f413537ae46883ca1
parent 03083f653dabf85522f6e9580cdc0e450b6432c6
Author: Quentin Carbonneaux <quentin.carbonneaux@yale.edu>
Date:   Thu,  7 Apr 2016 14:48:21 -0400

inline latmerge() (cross fingers)

Diffstat:
Mfold.c | 24++++++++----------------
1 file changed, 8 insertions(+), 16 deletions(-)

diff --git a/fold.c b/fold.c @@ -46,20 +46,6 @@ latval(Ref r) } } -static int -latmerge(int l, int r) -{ - if (l == Bot || r == Bot) - return Bot; - if (l == Top) - return r; - if (r == Top) - return l; - if (l == r) - return l; - return Bot; -} - static void update(int t, int v, Fn *fn) { @@ -91,8 +77,14 @@ visitphi(Phi *p, int n, Fn *fn) dead = edge[m][1].dead; else die("invalid phi argument"); - if (!dead) - v = latmerge(v, latval(p->arg[a])); + if (!dead) { + m = latval(p->arg[a]); + assert(m != Top); + if (v != Top && (v == Bot || m == Bot || v != m)) + v = Bot; + else + v = m; + } } assert(v != Top); update(p->to.val, v, fn);