diff options
| author | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2016-04-07 14:48:21 -0400 |
|---|---|---|
| committer | Quentin Carbonneaux <quentin.carbonneaux@yale.edu> | 2016-04-07 14:48:21 -0400 |
| commit | 9294295bb54c27da644c4e6f413537ae46883ca1 (patch) | |
| tree | b262f7453caeb3a21080e7eb8da408409b3ec16d | |
| parent | 03083f653dabf85522f6e9580cdc0e450b6432c6 (diff) | |
| download | roux-9294295bb54c27da644c4e6f413537ae46883ca1.tar.gz | |
inline latmerge() (cross fingers)
| -rw-r--r-- | fold.c | 24 |
1 files changed, 8 insertions, 16 deletions
@@ -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); |
