summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2016-04-07 14:48:21 -0400
committerQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2016-04-07 14:48:21 -0400
commit9294295bb54c27da644c4e6f413537ae46883ca1 (patch)
treeb262f7453caeb3a21080e7eb8da408409b3ec16d
parent03083f653dabf85522f6e9580cdc0e450b6432c6 (diff)
downloadroux-9294295bb54c27da644c4e6f413537ae46883ca1.tar.gz
inline latmerge() (cross fingers)
-rw-r--r--fold.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/fold.c b/fold.c
index b7bc201..740ad6b 100644
--- 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);