Sergey, On 21.08.2024 11:58, Sergey Kaplun wrote: > This patch moves the aforementioned test to the > test, with refactoring to restore the JIT engine and GC settings after > the test. > > Part of tarantool/tarantool#9398 > --- thanks for the patch! LGTM > test/LuaJIT-tests/misc/wbarrier_obar.lua | 22 ------------- > test/LuaJIT-tests/trace/wbarrier.lua | 41 ++++++++++++++++++++++++ > 2 files changed, 41 insertions(+), 22 deletions(-) > delete mode 100644 test/LuaJIT-tests/misc/wbarrier_obar.lua > > diff --git a/test/LuaJIT-tests/misc/wbarrier_obar.lua b/test/LuaJIT-tests/misc/wbarrier_obar.lua > deleted file mode 100644 > index 258db215..00000000 > --- a/test/LuaJIT-tests/misc/wbarrier_obar.lua > +++ /dev/null > @@ -1,22 +0,0 @@ > --- DSE of USTORE must eliminate OBAR, too. > - > -if jit and jit.opt then pcall(jit.opt.start, "-sink") end > - > -local f > -do > - local x > - f = function() > - local y = 0 > - for i=1,10000 do > - x = {1} > - if y > 0 then end > - x = 1 > - end > - end > -end > - > -collectgarbage() > -collectgarbage("setstepmul", 1) > -collectgarbage("restart") > -f() > - > diff --git a/test/LuaJIT-tests/trace/wbarrier.lua b/test/LuaJIT-tests/trace/wbarrier.lua > index 625c0ff2..9c9c50af 100644 > --- a/test/LuaJIT-tests/trace/wbarrier.lua > +++ b/test/LuaJIT-tests/trace/wbarrier.lua > @@ -1,3 +1,12 @@ > +local function jit_opt_is_on(needed) > + for _, opt in ipairs({jit.status()}) do > + if opt == needed then > + return true > + end > + end > + return false > +end > + > do --- TBAR for HSTORE. > local t = {[0]={}} > for i = 1, 1e5 do t[i] = {t[i - 1]} end > @@ -14,3 +23,35 @@ do --- OBAR for USTORE. > end > f() > end > + > +do --- DSE of USTORE must eliminate OBAR too. > + local need_restore_sink = false > + if jit_opt_is_on("sink") then > + need_restore_sink = true > + jit.opt.start("-sink") > + end > + > + local f > + do > + local x > + f = function() > + local y = 0 > + for _ = 1, 10000 do > + x = {1} > + if y > 0 then end > + x = 1 > + end > + end > + end > + > + collectgarbage() > + local oldstepmul = collectgarbage("setstepmul", 1) > + collectgarbage("restart") > + > + f() > + > + collectgarbage("setstepmul", oldstepmul) > + if need_restore_sink then > + jit.opt.start("+sink") > + end > +end