summaryrefslogtreecommitdiff
path: root/src/lj_opt_fold.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_opt_fold.c')
-rw-r--r--src/lj_opt_fold.c31
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)
1163LJFOLD(ALOAD any) 1164LJFOLD(ALOAD any)
1164LJFOLDX(lj_opt_fwd_aload) 1165LJFOLDX(lj_opt_fwd_aload)
1165 1166
1167/* From HREF fwd (see below). Must eliminate, not supported by fwd/backend. */
1168LJFOLD(HLOAD KPTR)
1169LJFOLDF(kfold_hload_kptr)
1170{
1171 UNUSED(J);
1172 lua_assert(ir_kptr(fleft) == niltvg(J2G(J)));
1173 return TREF_NIL;
1174}
1175
1166LJFOLD(HLOAD any) 1176LJFOLD(HLOAD any)
1167LJFOLDX(lj_opt_fwd_hload) 1177LJFOLDX(lj_opt_fwd_hload)
1168 1178
@@ -1202,6 +1212,27 @@ LJFOLDF(cse_uref)
1202 return EMITFOLD; 1212 return EMITFOLD;
1203} 1213}
1204 1214
1215LJFOLD(HREF TNEW any)
1216LJFOLDF(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
1223LJFOLD(HREF TDUP KPRI)
1224LJFOLD(HREF TDUP KGC)
1225LJFOLD(HREF TDUP KNUM)
1226LJFOLDF(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