diff options
author | Mike Pall <mike> | 2012-07-04 11:41:58 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2012-07-04 11:41:58 +0200 |
commit | c22d698e17e4f73ee8a146248c49b6dce10d3b74 (patch) | |
tree | 62353f0054e68436be3e2d1da01cff39796cc3f5 /src/lj_opt_sink.c | |
parent | 4da7ffc34bd3e431057d0f3edd6ded342a9d6e34 (diff) | |
download | luajit-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.c | 5 |
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. */ |
51 | static int sink_checkphi(jit_State *J, IRIns *ira, IRRef ref) | 51 | static 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 | } |