diff options
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r-- | src/lj_opt_fold.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/lj_opt_fold.c b/src/lj_opt_fold.c index 5eeffae3..c91f3382 100644 --- a/src/lj_opt_fold.c +++ b/src/lj_opt_fold.c | |||
@@ -13,6 +13,7 @@ | |||
13 | #if LJ_HASJIT | 13 | #if LJ_HASJIT |
14 | 14 | ||
15 | #include "lj_str.h" | 15 | #include "lj_str.h" |
16 | #include "lj_tab.h" | ||
16 | #include "lj_ir.h" | 17 | #include "lj_ir.h" |
17 | #include "lj_jit.h" | 18 | #include "lj_jit.h" |
18 | #include "lj_iropt.h" | 19 | #include "lj_iropt.h" |
@@ -1163,6 +1164,15 @@ LJFOLDF(merge_eqne_snew_kgc) | |||
1163 | LJFOLD(ALOAD any) | 1164 | LJFOLD(ALOAD any) |
1164 | LJFOLDX(lj_opt_fwd_aload) | 1165 | LJFOLDX(lj_opt_fwd_aload) |
1165 | 1166 | ||
1167 | /* From HREF fwd (see below). Must eliminate, not supported by fwd/backend. */ | ||
1168 | LJFOLD(HLOAD KPTR) | ||
1169 | LJFOLDF(kfold_hload_kptr) | ||
1170 | { | ||
1171 | UNUSED(J); | ||
1172 | lua_assert(ir_kptr(fleft) == niltvg(J2G(J))); | ||
1173 | return TREF_NIL; | ||
1174 | } | ||
1175 | |||
1166 | LJFOLD(HLOAD any) | 1176 | LJFOLD(HLOAD any) |
1167 | LJFOLDX(lj_opt_fwd_hload) | 1177 | LJFOLDX(lj_opt_fwd_hload) |
1168 | 1178 | ||
@@ -1202,6 +1212,27 @@ LJFOLDF(cse_uref) | |||
1202 | return EMITFOLD; | 1212 | return EMITFOLD; |
1203 | } | 1213 | } |
1204 | 1214 | ||
1215 | LJFOLD(HREF TNEW any) | ||
1216 | LJFOLDF(fwd_href_tnew) | ||
1217 | { | ||
1218 | if (lj_opt_fwd_href_nokey(J)) | ||
1219 | return lj_ir_kptr(J, niltvg(J2G(J))); | ||
1220 | return NEXTFOLD; | ||
1221 | } | ||
1222 | |||
1223 | LJFOLD(HREF TDUP KPRI) | ||
1224 | LJFOLD(HREF TDUP KGC) | ||
1225 | LJFOLD(HREF TDUP KNUM) | ||
1226 | LJFOLDF(fwd_href_tdup) | ||
1227 | { | ||
1228 | TValue keyv; | ||
1229 | lj_ir_kvalue(J->L, &keyv, fright); | ||
1230 | if (lj_tab_get(J->L, ir_ktab(IR(fleft->op1)), &keyv) == niltvg(J2G(J)) && | ||
1231 | lj_opt_fwd_href_nokey(J)) | ||
1232 | return lj_ir_kptr(J, niltvg(J2G(J))); | ||
1233 | return NEXTFOLD; | ||
1234 | } | ||
1235 | |||
1205 | /* We can safely FOLD/CSE array/hash refs and field loads, since there | 1236 | /* We can safely FOLD/CSE array/hash refs and field loads, since there |
1206 | ** are no corresponding stores. But NEWREF may invalidate all of them. | 1237 | ** are no corresponding stores. But NEWREF may invalidate all of them. |
1207 | ** Lacking better disambiguation for table references, these optimizations | 1238 | ** Lacking better disambiguation for table references, these optimizations |