summaryrefslogtreecommitdiff
path: root/src/lj_opt_sink.c
diff options
context:
space:
mode:
authorMike Pall <mike>2012-07-04 11:41:58 +0200
committerMike Pall <mike>2012-07-04 11:41:58 +0200
commitc22d698e17e4f73ee8a146248c49b6dce10d3b74 (patch)
tree62353f0054e68436be3e2d1da01cff39796cc3f5 /src/lj_opt_sink.c
parent4da7ffc34bd3e431057d0f3edd6ded342a9d6e34 (diff)
downloadluajit-c22d698e17e4f73ee8a146248c49b6dce10d3b74.tar.gz
luajit-c22d698e17e4f73ee8a146248c49b6dce10d3b74.tar.bz2
luajit-c22d698e17e4f73ee8a146248c49b6dce10d3b74.zip
Add stricter check for sinking PHIs.
Diffstat (limited to 'src/lj_opt_sink.c')
-rw-r--r--src/lj_opt_sink.c5
1 files changed, 3 insertions, 2 deletions
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)
47 return 0; 47 return 0;
48} 48}
49 49
50/* Check whether a value is a sinkable PHI or a non-PHI. */ 50/* Check whether a value is a sinkable PHI or loop-invariant. */
51static int sink_checkphi(jit_State *J, IRIns *ira, IRRef ref) 51static int sink_checkphi(jit_State *J, IRIns *ira, IRRef ref)
52{ 52{
53 if (ref >= REF_FIRST) { 53 if (ref >= REF_FIRST) {
@@ -57,7 +57,8 @@ static int sink_checkphi(jit_State *J, IRIns *ira, IRRef ref)
57 ira->prev++; 57 ira->prev++;
58 return 1; /* Sinkable PHI. */ 58 return 1; /* Sinkable PHI. */
59 } 59 }
60 return !sink_phidep(J, ref); /* Must be a non-PHI then. */ 60 /* Otherwise the value must be loop-invariant. */
61 return ref < J->loopref && !sink_phidep(J, ref);
61 } 62 }
62 return 1; /* Constant (non-PHI). */ 63 return 1; /* Constant (non-PHI). */
63} 64}