From ef9b5e5d6747359caa882517c11b8460e4dbbe36 Mon Sep 17 00:00:00 2001 From: Laurence Tratt Date: Tue, 18 Aug 2026 15:48:21 +0100 Subject: [PATCH 1/2] Ensure that constant lookups are promoted. `KC(i)` uses `yk_promote` which allows `RKC(i)` to identify optimisation potential that is otherwise missed. --- src/lvm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lvm.c b/src/lvm.c index f9dcee9..b221aeb 100644 --- a/src/lvm.c +++ b/src/lvm.c @@ -1190,7 +1190,7 @@ GCObject *load_gcobj(const TValue *o) { #endif #define RC(i) (base+GETARG_C(i)) #define vRC(i) s2v(RC(i)) -#define RKC(i) ((TESTARG_k(i)) ? k + GETARG_C(i) : s2v(base + GETARG_C(i))) +#define RKC(i) ((TESTARG_k(i)) ? KC(i) : s2v(base + GETARG_C(i))) From e606578bf276937c1e52bb3fd950ebd044c69a7d Mon Sep 17 00:00:00 2001 From: Laurence Tratt Date: Fri, 28 Aug 2026 11:13:48 +0100 Subject: [PATCH 2/2] Avoid repeated tag lookups. yk's alias analysis doesn't notice this opportunity: by manually expanding things, and making the const-ness explicit, it is noticed. --- src/ltable.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/ltable.c b/src/ltable.c index 40ed1f6..c187306 100644 --- a/src/ltable.c +++ b/src/ltable.c @@ -957,10 +957,22 @@ static int hashkeyisempty (Table *t, lua_Unsigned key) { static lu_byte finishnodeget (const TValue *val, TValue *res) { +#ifdef USE_YK + lu_byte rawtag = rawtt(val); + lu_byte tag = withvariant(rawtag); + if (!tagisempty(tag)) { + res->value_ = val->value_; + settt_(res, rawtag); + checkliveness(((lua_State*)NULL), res); + lua_assert(!isnonstrictnil(res)); + } + return tag; +#else if (!ttisnil(val)) { setobj(((lua_State*)NULL), res, val); } return ttypetag(val); +#endif }