aboutsummaryrefslogtreecommitdiff
path: root/src/lj_record.c
diff options
context:
space:
mode:
authorMike Pall <mike>2020-05-27 19:20:44 +0200
committerMike Pall <mike>2020-05-27 19:20:44 +0200
commit1a4ff1311740aa6c85f7a9101b6aa9bfaafa3f8e (patch)
treec0bb622eb6a70b71c58d83d4cceed4e4b3279300 /src/lj_record.c
parentb2307c8ad817e350d65cc909a579ca2f77439682 (diff)
downloadluajit-1a4ff1311740aa6c85f7a9101b6aa9bfaafa3f8e.tar.gz
luajit-1a4ff1311740aa6c85f7a9101b6aa9bfaafa3f8e.tar.bz2
luajit-1a4ff1311740aa6c85f7a9101b6aa9bfaafa3f8e.zip
Optimize table length computation with hinting.
10x faster on loop with t[#t+1] = x idiom. Also used by table.insert.
Diffstat (limited to 'src/lj_record.c')
-rw-r--r--src/lj_record.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/lj_record.c b/src/lj_record.c
index 8eec0071..4fc22742 100644
--- a/src/lj_record.c
+++ b/src/lj_record.c
@@ -1058,7 +1058,7 @@ static TRef rec_mm_len(jit_State *J, TRef tr, TValue *tv)
1058 lj_record_call(J, func, 2); 1058 lj_record_call(J, func, 2);
1059 } else { 1059 } else {
1060 if (LJ_52 && tref_istab(tr)) 1060 if (LJ_52 && tref_istab(tr))
1061 return lj_ir_call(J, IRCALL_lj_tab_len, tr); 1061 return emitir(IRTI(IR_ALEN), tr, TREF_NIL);
1062 lj_trace_err(J, LJ_TRERR_NOMM); 1062 lj_trace_err(J, LJ_TRERR_NOMM);
1063 } 1063 }
1064 return 0; /* No result yet. */ 1064 return 0; /* No result yet. */
@@ -2191,7 +2191,7 @@ void lj_record_ins(jit_State *J)
2191 if (tref_isstr(rc)) 2191 if (tref_isstr(rc))
2192 rc = emitir(IRTI(IR_FLOAD), rc, IRFL_STR_LEN); 2192 rc = emitir(IRTI(IR_FLOAD), rc, IRFL_STR_LEN);
2193 else if (!LJ_52 && tref_istab(rc)) 2193 else if (!LJ_52 && tref_istab(rc))
2194 rc = lj_ir_call(J, IRCALL_lj_tab_len, rc); 2194 rc = emitir(IRTI(IR_ALEN), rc, TREF_NIL);
2195 else 2195 else
2196 rc = rec_mm_len(J, rc, rcv); 2196 rc = rec_mm_len(J, rc, rcv);
2197 break; 2197 break;