From c22d698e17e4f73ee8a146248c49b6dce10d3b74 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Wed, 4 Jul 2012 11:41:58 +0200 Subject: Add stricter check for sinking PHIs. --- src/lj_opt_sink.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/lj_opt_sink.c b/src/lj_opt_sink.c index 070970ca..937cccc7 100644 --- a/src/lj_opt_sink.c +++ b/src/lj_opt_sink.c @@ -47,7 +47,7 @@ static int sink_phidep(jit_State *J, IRRef ref) return 0; } -/* Check whether a value is a sinkable PHI or a non-PHI. */ +/* Check whether a value is a sinkable PHI or loop-invariant. */ static int sink_checkphi(jit_State *J, IRIns *ira, IRRef ref) { if (ref >= REF_FIRST) { @@ -57,7 +57,8 @@ static int sink_checkphi(jit_State *J, IRIns *ira, IRRef ref) ira->prev++; return 1; /* Sinkable PHI. */ } - return !sink_phidep(J, ref); /* Must be a non-PHI then. */ + /* Otherwise the value must be loop-invariant. */ + return ref < J->loopref && !sink_phidep(J, ref); } return 1; /* Constant (non-PHI). */ } -- cgit v1.2.3-55-g6feb