diff options
author | Mike Pall <mike> | 2020-05-27 19:20:44 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2020-05-27 19:20:44 +0200 |
commit | 1a4ff1311740aa6c85f7a9101b6aa9bfaafa3f8e (patch) | |
tree | c0bb622eb6a70b71c58d83d4cceed4e4b3279300 /src/lj_record.c | |
parent | b2307c8ad817e350d65cc909a579ca2f77439682 (diff) | |
download | luajit-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.c | 4 |
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; |