* [Tarantool-patches] [PATCH luajit 1/3] sysprof: fix interval parsing in dual-number mode
2023-01-18 20:19 [Tarantool-patches] [PATCH luajit 0/3] Dualnumber mode fixes Sergey Kaplun via Tarantool-patches
@ 2023-01-18 20:16 ` Sergey Kaplun via Tarantool-patches
2023-01-24 14:16 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 15:55 ` sergos via Tarantool-patches
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds Sergey Kaplun via Tarantool-patches
` (2 subsequent siblings)
3 siblings, 2 replies; 19+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2023-01-18 20:16 UTC (permalink / raw)
To: Sergey Ostanevich, Maxim Kokryashkin; +Cc: tarantool-patches
When the profiling interval is parsed, `tvisnum()` is used to check that
the given value is a number. But in case of dual-number mode this check
returns false as far as the given value is an integer, so `tvisnumber()`
should be used to cover both cases.
---
src/lib_misc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/lib_misc.c b/src/lib_misc.c
index 06fb9f9f..c18d297e 100644
--- a/src/lib_misc.c
+++ b/src/lib_misc.c
@@ -209,7 +209,7 @@ static int parse_sysprof_opts(lua_State *L, struct luam_Sysprof_Options *opt, in
{
cTValue *interval = lj_tab_getstr(options, lj_str_newlit(L, "interval"));
opt->interval = SYSPROF_DEFAULT_INTERVAL;
- if (interval && tvisnum(interval)) {
+ if (interval && tvisnumber(interval)) {
int32_t signed_interval = numberVint(interval);
if (signed_interval < 1)
return PROFILE_ERRUSE;
--
2.34.1
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds
2023-01-18 20:19 [Tarantool-patches] [PATCH luajit 0/3] Dualnumber mode fixes Sergey Kaplun via Tarantool-patches
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 1/3] sysprof: fix interval parsing in dual-number mode Sergey Kaplun via Tarantool-patches
@ 2023-01-18 20:16 ` Sergey Kaplun via Tarantool-patches
2023-01-24 14:20 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 21:12 ` sergos via Tarantool-patches
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment Sergey Kaplun via Tarantool-patches
2023-02-20 9:56 ` [Tarantool-patches] [PATCH luajit 0/3] Dualnumber mode fixes Igor Munkin via Tarantool-patches
3 siblings, 2 replies; 19+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2023-01-18 20:16 UTC (permalink / raw)
To: Sergey Ostanevich, Maxim Kokryashkin; +Cc: tarantool-patches
This workflow is well-suited for test specific builds like dual-number
mode on x86_x64, build with disabled JIT or FFI, etc.
For now, just the dual-number mode is added, due to the need to test
future commits. If there is need to add a new build type `FLAVOR` column
of CI matrix should be exposed. Also, just Linux x86_64 is tested,
because we want to decrease resource usage in CI.
---
.github/workflows/exotic-builds-testing.yml | 71 +++++++++++++++++++++
1 file changed, 71 insertions(+)
create mode 100644 .github/workflows/exotic-builds-testing.yml
diff --git a/.github/workflows/exotic-builds-testing.yml b/.github/workflows/exotic-builds-testing.yml
new file mode 100644
index 00000000..cd0c14d7
--- /dev/null
+++ b/.github/workflows/exotic-builds-testing.yml
@@ -0,0 +1,71 @@
+name: "Exotic builds testing"
+
+on:
+ push:
+ branches-ignore:
+ - '**-notest'
+ - 'upstream-**'
+ tags-ignore:
+ - '**'
+
+concurrency:
+ # An update of a developer branch cancels the previously
+ # scheduled workflow run for this branch. However, the default
+ # branch, and long-term branch (tarantool-1.10, tarantool-2.8,
+ # etc.) workflow runs are never canceled.
+ #
+ # We use a trick here: define the concurrency group as 'workflow
+ # run ID' + # 'workflow run attempt' because it is a unique
+ # combination for any run. So it effectively discards grouping.
+ #
+ # XXX: we cannot use `github.sha` as a unique identifier because
+ # pushing a tag may cancel a run that works on a branch push
+ # event.
+ group: ${{ (
+ github.ref == 'refs/heads/tarantool' ||
+ startsWith(github.ref, 'refs/heads/tarantool-')) &&
+ format('{0}-{1}', github.run_id, github.run_attempt) ||
+ format('{0}-{1}', github.workflow, github.ref) }}
+ cancel-in-progress: true
+
+jobs:
+ test-x86_64-exotic:
+ strategy:
+ fail-fast: false
+ matrix:
+ BUILDTYPE: [Debug, Release]
+ GC64: [ON, OFF]
+ FLAVOR: [dualnum]
+ include:
+ - BUILDTYPE: Debug
+ CMAKEFLAGS: -DCMAKE_BUILD_TYPE=Debug -DLUA_USE_ASSERT=ON -DLUA_USE_APICHECK=ON
+ - BUILDTYPE: Release
+ CMAKEFLAGS: -DCMAKE_BUILD_TYPE=RelWithDebInfo
+ - FLAVOR: dualnum
+ FLAVORFLAGS: -DLUAJIT_NUMMODE=2
+ runs-on: [self-hosted, regular, Linux, x86_64]
+ name: >
+ LuaJIT ${{ matrix.FLAVOR }}
+ (Linux/x86_64)
+ ${{ matrix.BUILDTYPE }}
+ GC64:${{ matrix.GC64 }}
+ steps:
+ - uses: actions/checkout@v2.3.4
+ with:
+ fetch-depth: 0
+ submodules: recursive
+ - name: setup Linux
+ uses: ./.github/actions/setup-linux
+ - name: configure
+ run: >
+ cmake -S . -B ${{ env.BUILDDIR }}
+ -G Ninja
+ ${{ matrix.CMAKEFLAGS }}
+ ${{ matrix.FLAVORFLAGS }}
+ -DLUAJIT_ENABLE_GC64=${{ matrix.GC64 }}
+ - name: build
+ run: cmake --build . --parallel
+ working-directory: ${{ env.BUILDDIR }}
+ - name: test
+ run: cmake --build . --parallel --target test
+ working-directory: ${{ env.BUILDDIR }}
--
2.34.1
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment.
2023-01-18 20:19 [Tarantool-patches] [PATCH luajit 0/3] Dualnumber mode fixes Sergey Kaplun via Tarantool-patches
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 1/3] sysprof: fix interval parsing in dual-number mode Sergey Kaplun via Tarantool-patches
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds Sergey Kaplun via Tarantool-patches
@ 2023-01-18 20:16 ` Sergey Kaplun via Tarantool-patches
2023-01-19 10:17 ` Sergey Kaplun via Tarantool-patches
2023-01-24 15:13 ` Maxim Kokryashkin via Tarantool-patches
2023-02-20 9:56 ` [Tarantool-patches] [PATCH luajit 0/3] Dualnumber mode fixes Igor Munkin via Tarantool-patches
3 siblings, 2 replies; 19+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2023-01-18 20:16 UTC (permalink / raw)
To: Sergey Ostanevich, Maxim Kokryashkin; +Cc: tarantool-patches
From: Mike Pall <mike>
(cherry picked from commit 522d2073da4be2af79db4728cbb375db0fbdfc48)
`asm_intarith()` function may try to drop `test r, r` instruction before
the Jcc instruction. However, in case when Jcc instruction is "Jump
short if ..." instruction (i.e. has no 0F opcode prefix like "Jump near
if ..."), the `test` instruction is dropped when shouldn't be, due to
memory miss. As the result, the loop can't be realigned later in
`asm_loop_fixup` due to target to jump isn't aligned and the assertion
fails.
This patch adds the additional check for 0F opcode in `asm_intarith()`.
Sergey Kaplun:
* added the description and the test for the problem
Part of tarantool/tarantool#8069
---
src/lj_asm_x86.h | 5 +++--
.../lj-556-fix-loop-realignment.test.lua | 18 ++++++++++++++++++
2 files changed, 21 insertions(+), 2 deletions(-)
create mode 100644 test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
index 8efda8e5..e6c42c6d 100644
--- a/src/lj_asm_x86.h
+++ b/src/lj_asm_x86.h
@@ -2068,8 +2068,9 @@ static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa)
int32_t k = 0;
if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */
MCode *p = as->mcp + ((LJ_64 && *as->mcp < XI_TESTb) ? 3 : 2);
- if ((p[1] & 15) < 14) {
- if ((p[1] & 15) >= 12) p[1] -= 4; /* L <->S, NL <-> NS */
+ MCode *q = p[0] == 0x0f ? p+1 : p;
+ if ((*q & 15) < 14) {
+ if ((*q & 15) >= 12) *q -= 4; /* L <->S, NL <-> NS */
as->flagmcp = NULL;
as->mcp = p;
} /* else: cannot transform LE/NLE to cc without use of OF. */
diff --git a/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
new file mode 100644
index 00000000..9a8e6098
--- /dev/null
+++ b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
@@ -0,0 +1,18 @@
+local tap = require('tap')
+
+local test = tap.test('lj-505-fold-icorrect-behavior')
+test:plan(1)
+
+-- Test file to demonstrate JIT misbehaviour for loop realignment
+-- in LUAJIT_NUMMODE=2. See also
+-- https://github.com/LuaJIT/LuaJIT/issues/556.
+
+jit.opt.start('hotloop=1')
+
+local s = 4
+while s > 0 do
+ s = s - 1
+end
+
+test:ok(true, 'loop is compiled and ran successfully')
+os.exit(test:check() and 0 or 1)
--
2.34.1
^ permalink raw reply [flat|nested] 19+ messages in thread
* [Tarantool-patches] [PATCH luajit 0/3] Dualnumber mode fixes
@ 2023-01-18 20:19 Sergey Kaplun via Tarantool-patches
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 1/3] sysprof: fix interval parsing in dual-number mode Sergey Kaplun via Tarantool-patches
` (3 more replies)
0 siblings, 4 replies; 19+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2023-01-18 20:19 UTC (permalink / raw)
To: Sergey Ostanevich, Maxim Kokryashkin; +Cc: tarantool-patches
Something strange happened with the previous cover-letter, so resend
it.
The first 2 patches:
* sysprof: fix interval parsing in dual-number mode
* ci: introduce workflow for exotic builds
are needed to introduce workflow for dualnumber mode build, to test the
3rd commit:
* x86/x64: Fix loop realignment.
The first and second commits are separated as far as only the first one
is needed to backport to tarantool-1.10 branch.
PR: https://github.com/tarantool/tarantool/pull/8180
Issues:
* https://github.com/LuaJIT/LuaJIT/issues/556
* https://github.com/tarantool/tarantool/issues/8069
Branch: https://github.com/tarantool/luajit/tree/skaplun/lj-556-fix-loop-realignment-full-ci
Mike Pall (1):
x86/x64: Fix loop realignment.
Sergey Kaplun (2):
sysprof: fix interval parsing in dual-number mode
ci: introduce workflow for exotic builds
.github/workflows/exotic-builds-testing.yml | 71 +++++++++++++++++++
src/lib_misc.c | 2 +-
src/lj_asm_x86.h | 5 +-
.../lj-556-fix-loop-realignment.test.lua | 18 +++++
4 files changed, 93 insertions(+), 3 deletions(-)
create mode 100644 .github/workflows/exotic-builds-testing.yml
create mode 100644 test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
--
2.34.1
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment.
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment Sergey Kaplun via Tarantool-patches
@ 2023-01-19 10:17 ` Sergey Kaplun via Tarantool-patches
2023-01-24 15:13 ` Maxim Kokryashkin via Tarantool-patches
1 sibling, 0 replies; 19+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2023-01-19 10:17 UTC (permalink / raw)
To: Sergey Ostanevich, Maxim Kokryashkin; +Cc: tarantool-patches
<snipped>
> +++ b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
> @@ -0,0 +1,18 @@
> +local tap = require('tap')
> +
> +local test = tap.test('lj-505-fold-icorrect-behavior')
Fixed this typo, branch is force-pushed.
--
Best regards,
Sergey Kaplun
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 1/3] sysprof: fix interval parsing in dual-number mode
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 1/3] sysprof: fix interval parsing in dual-number mode Sergey Kaplun via Tarantool-patches
@ 2023-01-24 14:16 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 15:55 ` sergos via Tarantool-patches
1 sibling, 0 replies; 19+ messages in thread
From: Maxim Kokryashkin via Tarantool-patches @ 2023-01-24 14:16 UTC (permalink / raw)
To: Sergey Kaplun; +Cc: tarantool-patches
[-- Attachment #1: Type: text/plain, Size: 1062 bytes --]
Hi, Sergey!
Thanks for the patch!
LGTM
--
Best regards,
Maxim Kokryashkin
>
>>When the profiling interval is parsed, `tvisnum()` is used to check that
>>the given value is a number. But in case of dual-number mode this check
>>returns false as far as the given value is an integer, so `tvisnumber()`
>>should be used to cover both cases.
>>---
>> src/lib_misc.c | 2 +-
>> 1 file changed, 1 insertion(+), 1 deletion(-)
>>
>>diff --git a/src/lib_misc.c b/src/lib_misc.c
>>index 06fb9f9f..c18d297e 100644
>>--- a/src/lib_misc.c
>>+++ b/src/lib_misc.c
>>@@ -209,7 +209,7 @@ static int parse_sysprof_opts(lua_State *L, struct luam_Sysprof_Options *opt, in
>> {
>> cTValue *interval = lj_tab_getstr(options, lj_str_newlit(L, "interval"));
>> opt->interval = SYSPROF_DEFAULT_INTERVAL;
>>- if (interval && tvisnum(interval)) {
>>+ if (interval && tvisnumber(interval)) {
>> int32_t signed_interval = numberVint(interval);
>> if (signed_interval < 1)
>> return PROFILE_ERRUSE;
>>--
>>2.34.1
>
[-- Attachment #2: Type: text/html, Size: 1792 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds Sergey Kaplun via Tarantool-patches
@ 2023-01-24 14:20 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 21:12 ` sergos via Tarantool-patches
1 sibling, 0 replies; 19+ messages in thread
From: Maxim Kokryashkin via Tarantool-patches @ 2023-01-24 14:20 UTC (permalink / raw)
To: Sergey Kaplun; +Cc: tarantool-patches
[-- Attachment #1: Type: text/plain, Size: 3093 bytes --]
Hi, Sergey!
Thanks for the patch!
LGTM
--
Best regards,
Maxim Kokryashkin
>
>>This workflow is well-suited for test specific builds like dual-number
>>mode on x86_x64, build with disabled JIT or FFI, etc.
>>
>>For now, just the dual-number mode is added, due to the need to test
>>future commits. If there is need to add a new build type `FLAVOR` column
>>of CI matrix should be exposed. Also, just Linux x86_64 is tested,
>>because we want to decrease resource usage in CI.
>>---
>> .github/workflows/exotic-builds-testing.yml | 71 +++++++++++++++++++++
>> 1 file changed, 71 insertions(+)
>> create mode 100644 .github/workflows/exotic-builds-testing.yml
>>
>>diff --git a/.github/workflows/exotic-builds-testing.yml b/.github/workflows/exotic-builds-testing.yml
>>new file mode 100644
>>index 00000000..cd0c14d7
>>--- /dev/null
>>+++ b/.github/workflows/exotic-builds-testing.yml
>>@@ -0,0 +1,71 @@
>>+name: "Exotic builds testing"
>>+
>>+on:
>>+ push:
>>+ branches-ignore:
>>+ - '**-notest'
>>+ - 'upstream-**'
>>+ tags-ignore:
>>+ - '**'
>>+
>>+concurrency:
>>+ # An update of a developer branch cancels the previously
>>+ # scheduled workflow run for this branch. However, the default
>>+ # branch, and long-term branch (tarantool-1.10, tarantool-2.8,
>>+ # etc.) workflow runs are never canceled.
>>+ #
>>+ # We use a trick here: define the concurrency group as 'workflow
>>+ # run ID' + # 'workflow run attempt' because it is a unique
>>+ # combination for any run. So it effectively discards grouping.
>>+ #
>>+ # XXX: we cannot use `github.sha` as a unique identifier because
>>+ # pushing a tag may cancel a run that works on a branch push
>>+ # event.
>>+ group: ${{ (
>>+ github.ref == 'refs/heads/tarantool' ||
>>+ startsWith(github.ref, 'refs/heads/tarantool-')) &&
>>+ format('{0}-{1}', github.run_id, github.run_attempt) ||
>>+ format('{0}-{1}', github.workflow, github.ref) }}
>>+ cancel-in-progress: true
>>+
>>+jobs:
>>+ test-x86_64-exotic:
>>+ strategy:
>>+ fail-fast: false
>>+ matrix:
>>+ BUILDTYPE: [Debug, Release]
>>+ GC64: [ON, OFF]
>>+ FLAVOR: [dualnum]
>>+ include:
>>+ - BUILDTYPE: Debug
>>+ CMAKEFLAGS: -DCMAKE_BUILD_TYPE=Debug -DLUA_USE_ASSERT=ON -DLUA_USE_APICHECK=ON
>>+ - BUILDTYPE: Release
>>+ CMAKEFLAGS: -DCMAKE_BUILD_TYPE=RelWithDebInfo
>>+ - FLAVOR: dualnum
>>+ FLAVORFLAGS: -DLUAJIT_NUMMODE=2
>>+ runs-on: [self-hosted, regular, Linux, x86_64]
>>+ name: >
>>+ LuaJIT ${{ matrix.FLAVOR }}
>>+ (Linux/x86_64)
>>+ ${{ matrix.BUILDTYPE }}
>>+ GC64:${{ matrix.GC64 }}
>>+ steps:
>>+ - uses: actions/checkout@v2.3.4
>>+ with:
>>+ fetch-depth: 0
>>+ submodules: recursive
>>+ - name: setup Linux
>>+ uses: ./.github/actions/setup-linux
>>+ - name: configure
>>+ run: >
>>+ cmake -S . -B ${{ env.BUILDDIR }}
>>+ -G Ninja
>>+ ${{ matrix.CMAKEFLAGS }}
>>+ ${{ matrix.FLAVORFLAGS }}
>>+ -DLUAJIT_ENABLE_GC64=${{ matrix.GC64 }}
>>+ - name: build
>>+ run: cmake --build . --parallel
>>+ working-directory: ${{ env.BUILDDIR }}
>>+ - name: test
>>+ run: cmake --build . --parallel --target test
>>+ working-directory: ${{ env.BUILDDIR }}
>>--
>>2.34.1
>
[-- Attachment #2: Type: text/html, Size: 3743 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment.
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment Sergey Kaplun via Tarantool-patches
2023-01-19 10:17 ` Sergey Kaplun via Tarantool-patches
@ 2023-01-24 15:13 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 7:06 ` Sergey Kaplun via Tarantool-patches
1 sibling, 1 reply; 19+ messages in thread
From: Maxim Kokryashkin via Tarantool-patches @ 2023-01-24 15:13 UTC (permalink / raw)
To: Sergey Kaplun; +Cc: tarantool-patches
[-- Attachment #1: Type: text/plain, Size: 3134 bytes --]
Hi, Sergey!
Thanks for the patch!
Please consider my comments below.
>
>>From: Mike Pall <mike>
>>
>>(cherry picked from commit 522d2073da4be2af79db4728cbb375db0fbdfc48)
>>
>>`asm_intarith()` function may try to drop `test r, r` instruction before
>Please note that "r" is an allocated register for the instruction.
>>the Jcc instruction. However, in case when Jcc instruction is "Jump
>Typo: s/in case when/in cases where/
>>short if ..." instruction (i.e. has no 0F opcode prefix like "Jump near
>>if ..."), the `test` instruction is dropped when shouldn't be, due to
>Typo: s/when/when it/
>>memory miss. As the result, the loop can't be realigned later in
>Typo: s/memory/a memory/
>Also, that part about the memory miss is unclear, it would be better if you
>could clarify it a bit.
>>`asm_loop_fixup` due to target to jump isn't aligned and the assertion
>Typo: s/isn’t aligned/being misaligned/
>>fails.
>>
>>This patch adds the additional check for 0F opcode in `asm_intarith()`.
>Typo: s/for 0F/for the 0F/
>>
>>Sergey Kaplun:
>>* added the description and the test for the problem
>>
>>Part of tarantool/tarantool#8069
>>---
>> src/lj_asm_x86.h | 5 +++--
>> .../lj-556-fix-loop-realignment.test.lua | 18 ++++++++++++++++++
>> 2 files changed, 21 insertions(+), 2 deletions(-)
>> create mode 100644 test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
>>
>>diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
>>index 8efda8e5..e6c42c6d 100644
>>--- a/src/lj_asm_x86.h
>>+++ b/src/lj_asm_x86.h
>>@@ -2068,8 +2068,9 @@ static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa)
>> int32_t k = 0;
>> if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */
>> MCode *p = as->mcp + ((LJ_64 && *as->mcp < XI_TESTb) ? 3 : 2);
>>- if ((p[1] & 15) < 14) {
>>- if ((p[1] & 15) >= 12) p[1] -= 4; /* L <->S, NL <-> NS */
>>+ MCode *q = p[0] == 0x0f ? p+1 : p;
>>+ if ((*q & 15) < 14) {
>>+ if ((*q & 15) >= 12) *q -= 4; /* L <->S, NL <-> NS */
>> as->flagmcp = NULL;
>> as->mcp = p;
>> } /* else: cannot transform LE/NLE to cc without use of OF. */
>>diff --git a/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
>>new file mode 100644
>>index 00000000..9a8e6098
>>--- /dev/null
>>+++ b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
>>@@ -0,0 +1,18 @@
>>+local tap = require('tap')
>>+
>>+local test = tap.test('lj-505-fold-icorrect-behavior')
>>+test:plan(1)
>>+
>>+-- Test file to demonstrate JIT misbehaviour for loop realignment
>>+-- in LUAJIT_NUMMODE=2. See also
>>+-- https://github.com/LuaJIT/LuaJIT/issues/556 .
>>+
>>+jit.opt.start('hotloop=1')
>>+
>>+local s = 4
>>+while s > 0 do
>>+ s = s - 1
>>+end
>>+
>>+test:ok(true, 'loop is compiled and ran successfully')
>>+os.exit(test:check() and 0 or 1)
>>--
>The test works just fine with HEAD on
>f7d61d96 ci: introduce workflow for exotic builds.
>
>Tested configurations:
>LJ_64: True, LJ_GC64: True, LJ_DUALNUM: True
>LJ_64: True, LJ_GC64: False, LJ_DUALNUM: True
>--
>Best regards,
>Maxim Kokryashkin
>
[-- Attachment #2: Type: text/html, Size: 5500 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment.
2023-01-24 15:13 ` Maxim Kokryashkin via Tarantool-patches
@ 2023-01-26 7:06 ` Sergey Kaplun via Tarantool-patches
2023-01-26 14:45 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 21:22 ` sergos via Tarantool-patches
0 siblings, 2 replies; 19+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2023-01-26 7:06 UTC (permalink / raw)
To: Maxim Kokryashkin; +Cc: tarantool-patches
Hi, Maxim!
Thanks for the review!
On 24.01.23, Maxim Kokryashkin wrote:
>
> Hi, Sergey!
> Thanks for the patch!
> Please consider my comments below.
>
> >
> >>From: Mike Pall <mike>
> >>
> >>(cherry picked from commit 522d2073da4be2af79db4728cbb375db0fbdfc48)
> >>
> >>`asm_intarith()` function may try to drop `test r, r` instruction before
> >Please note that "r" is an allocated register for the instruction.
> >>the Jcc instruction. However, in case when Jcc instruction is "Jump
> >Typo: s/in case when/in cases where/
Fixed.
> >>short if ..." instruction (i.e. has no 0F opcode prefix like "Jump near
> >>if ..."), the `test` instruction is dropped when shouldn't be, due to
> >Typo: s/when/when it/
> >>memory miss. As the result, the loop can't be realigned later in
> >Typo: s/memory/a memory/
> >Also, that part about the memory miss is unclear, it would be better if you
> >could clarify it a bit.
> >>`asm_loop_fixup` due to target to jump isn't aligned and the assertion
> >Typo: s/isn’t aligned/being misaligned/
Fixed.
> >>fails.
> >>
> >>This patch adds the additional check for 0F opcode in `asm_intarith()`.
> >Typo: s/for 0F/for the 0F/
Fixed, thanks!
> >>
> >>Sergey Kaplun:
> >>* added the description and the test for the problem
> >>
> >>Part of tarantool/tarantool#8069
The new commit message is the following:
| x86/x64: Fix loop realignment.
|
| (cherry picked from commit 522d2073da4be2af79db4728cbb375db0fbdfc48)
|
| `asm_intarith()` function may try to drop `test r, r` (where `r` is an
| allocated register) instruction before the Jcc instruction. However, in
| cases when Jcc instruction is "Jump short if ..." instruction (i.e. has
| no 0F opcode prefix like "Jump near if ..."), the `test` instruction is
| dropped when it shouldn't be, due to usage for the comparison the next
| byte after instruction itself. As the result, the loop can't be
| realigned later in `asm_loop_fixup` due to target to jump being
| misaligned and the assertion fails.
|
| This patch adds the additional check for the 0F opcode in
| `asm_intarith()`.
|
| Sergey Kaplun:
| * added the description and the test for the problem
|
| Part of tarantool/tarantool#8069
Branch is force pushed.
> >>---
> >> src/lj_asm_x86.h | 5 +++--
> >> .../lj-556-fix-loop-realignment.test.lua | 18 ++++++++++++++++++
> >> 2 files changed, 21 insertions(+), 2 deletions(-)
> >> create mode 100644 test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
> >>
> >>diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
> >>index 8efda8e5..e6c42c6d 100644
> >>--- a/src/lj_asm_x86.h
> >>+++ b/src/lj_asm_x86.h
> >>@@ -2068,8 +2068,9 @@ static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa)
> >> int32_t k = 0;
> >> if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */
> >> MCode *p = as->mcp + ((LJ_64 && *as->mcp < XI_TESTb) ? 3 : 2);
> >>- if ((p[1] & 15) < 14) {
> >>- if ((p[1] & 15) >= 12) p[1] -= 4; /* L <->S, NL <-> NS */
> >>+ MCode *q = p[0] == 0x0f ? p+1 : p;
> >>+ if ((*q & 15) < 14) {
> >>+ if ((*q & 15) >= 12) *q -= 4; /* L <->S, NL <-> NS */
> >> as->flagmcp = NULL;
> >> as->mcp = p;
> >> } /* else: cannot transform LE/NLE to cc without use of OF. */
> >>diff --git a/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
> >>new file mode 100644
> >>index 00000000..9a8e6098
> >>--- /dev/null
> >>+++ b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
> >>@@ -0,0 +1,18 @@
> >>+local tap = require('tap')
> >>+
> >>+local test = tap.test('lj-505-fold-icorrect-behavior')
> >>+test:plan(1)
> >>+
> >>+-- Test file to demonstrate JIT misbehaviour for loop realignment
> >>+-- in LUAJIT_NUMMODE=2. See also
> >>+-- https://github.com/LuaJIT/LuaJIT/issues/556 .
> >>+
> >>+jit.opt.start('hotloop=1')
> >>+
> >>+local s = 4
> >>+while s > 0 do
> >>+ s = s - 1
> >>+end
> >>+
> >>+test:ok(true, 'loop is compiled and ran successfully')
> >>+os.exit(test:check() and 0 or 1)
> >>--
> >The test works just fine with HEAD on
> >f7d61d96 ci: introduce workflow for exotic builds.
> >
> >Tested configurations:
> >LJ_64: True, LJ_GC64: True, LJ_DUALNUM: True
> >LJ_64: True, LJ_GC64: False, LJ_DUALNUM: True
It's strange...
I use the following build command:
| $ cmake . -DCMAKE_BUILD_TYPE=Debug -DLUA_USE_APICHECK=ON -DLUA_USE_ASSERT=ON -DLUAJIT_ENABLE_GC64=OFF -DLUAJIT_NUMMODE=2 && make -j
and get the following assertion:
| asm_loop_fixup: Assertion `((intptr_t)target & 15) == 0' failed.
What command do you use to build LuaJIT?
> >--
> >Best regards,
> >Maxim Kokryashkin
> >
--
Best regards,
Sergey Kaplun
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment.
2023-01-26 7:06 ` Sergey Kaplun via Tarantool-patches
@ 2023-01-26 14:45 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 21:22 ` sergos via Tarantool-patches
1 sibling, 0 replies; 19+ messages in thread
From: Maxim Kokryashkin via Tarantool-patches @ 2023-01-26 14:45 UTC (permalink / raw)
To: Sergey Kaplun; +Cc: tarantool-patches
[-- Attachment #1: Type: text/plain, Size: 5106 bytes --]
Hi, Sergey!
Thanks for the fixes!
LGTM
>
>>Hi, Maxim!
>>
>>Thanks for the review!
>>
>>On 24.01.23, Maxim Kokryashkin wrote:
>>>
>>> Hi, Sergey!
>>> Thanks for the patch!
>>> Please consider my comments below.
>>>
>>> >
>>> >>From: Mike Pall <mike>
>>> >>
>>> >>(cherry picked from commit 522d2073da4be2af79db4728cbb375db0fbdfc48)
>>> >>
>>> >>`asm_intarith()` function may try to drop `test r, r` instruction before
>>> >Please note that "r" is an allocated register for the instruction.
>>> >>the Jcc instruction. However, in case when Jcc instruction is "Jump
>>> >Typo: s/in case when/in cases where/
>>
>>Fixed.
>>
>>> >>short if ..." instruction (i.e. has no 0F opcode prefix like "Jump near
>>> >>if ..."), the `test` instruction is dropped when shouldn't be, due to
>>> >Typo: s/when/when it/
>>> >>memory miss. As the result, the loop can't be realigned later in
>>> >Typo: s/memory/a memory/
>>> >Also, that part about the memory miss is unclear, it would be better if you
>>> >could clarify it a bit.
>>> >>`asm_loop_fixup` due to target to jump isn't aligned and the assertion
>>> >Typo: s/isn’t aligned/being misaligned/
>>
>>Fixed.
>>
>>> >>fails.
>>> >>
>>> >>This patch adds the additional check for 0F opcode in `asm_intarith()`.
>>> >Typo: s/for 0F/for the 0F/
>>
>>Fixed, thanks!
>>
>>> >>
>>> >>Sergey Kaplun:
>>> >>* added the description and the test for the problem
>>> >>
>>> >>Part of tarantool/tarantool#8069
>>
>>The new commit message is the following:
>>
>>| x86/x64: Fix loop realignment.
>>|
>>| (cherry picked from commit 522d2073da4be2af79db4728cbb375db0fbdfc48)
>>|
>>| `asm_intarith()` function may try to drop `test r, r` (where `r` is an
>>| allocated register) instruction before the Jcc instruction. However, in
>>| cases when Jcc instruction is "Jump short if ..." instruction (i.e. has
>>| no 0F opcode prefix like "Jump near if ..."), the `test` instruction is
>>| dropped when it shouldn't be, due to usage for the comparison the next
>>| byte after instruction itself. As the result, the loop can't be
>>| realigned later in `asm_loop_fixup` due to target to jump being
>>| misaligned and the assertion fails.
>>|
>>| This patch adds the additional check for the 0F opcode in
>>| `asm_intarith()`.
>>|
>>| Sergey Kaplun:
>>| * added the description and the test for the problem
>>|
>>| Part of tarantool/tarantool#8069
>>
>>Branch is force pushed.
>>
>>> >>---
>>> >> src/lj_asm_x86.h | 5 +++--
>>> >> .../lj-556-fix-loop-realignment.test.lua | 18 ++++++++++++++++++
>>> >> 2 files changed, 21 insertions(+), 2 deletions(-)
>>> >> create mode 100644 test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
>>> >>
>>> >>diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
>>> >>index 8efda8e5..e6c42c6d 100644
>>> >>--- a/src/lj_asm_x86.h
>>> >>+++ b/src/lj_asm_x86.h
>>> >>@@ -2068,8 +2068,9 @@ static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa)
>>> >> int32_t k = 0;
>>> >> if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */
>>> >> MCode *p = as->mcp + ((LJ_64 && *as->mcp < XI_TESTb) ? 3 : 2);
>>> >>- if ((p[1] & 15) < 14) {
>>> >>- if ((p[1] & 15) >= 12) p[1] -= 4; /* L <->S, NL <-> NS */
>>> >>+ MCode *q = p[0] == 0x0f ? p+1 : p;
>>> >>+ if ((*q & 15) < 14) {
>>> >>+ if ((*q & 15) >= 12) *q -= 4; /* L <->S, NL <-> NS */
>>> >> as->flagmcp = NULL;
>>> >> as->mcp = p;
>>> >> } /* else: cannot transform LE/NLE to cc without use of OF. */
>>> >>diff --git a/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
>>> >>new file mode 100644
>>> >>index 00000000..9a8e6098
>>> >>--- /dev/null
>>> >>+++ b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
>>> >>@@ -0,0 +1,18 @@
>>> >>+local tap = require('tap')
>>> >>+
>>> >>+local test = tap.test('lj-505-fold-icorrect-behavior')
>>> >>+test:plan(1)
>>> >>+
>>> >>+-- Test file to demonstrate JIT misbehaviour for loop realignment
>>> >>+-- in LUAJIT_NUMMODE=2. See also
>>> >>+-- https://github.com/LuaJIT/LuaJIT/issues/556 .
>>> >>+
>>> >>+jit.opt.start('hotloop=1')
>>> >>+
>>> >>+local s = 4
>>> >>+while s > 0 do
>>> >>+ s = s - 1
>>> >>+end
>>> >>+
>>> >>+test:ok(true, 'loop is compiled and ran successfully')
>>> >>+os.exit(test:check() and 0 or 1)
>>> >>--
>>> >The test works just fine with HEAD on
>>> >f7d61d96 ci: introduce workflow for exotic builds.
>>> >
>>> >Tested configurations:
>>> >LJ_64: True, LJ_GC64: True, LJ_DUALNUM: True
>>> >LJ_64: True, LJ_GC64: False, LJ_DUALNUM: True
>>
>>It's strange...
>>I use the following build command:
>>| $ cmake . -DCMAKE_BUILD_TYPE=Debug -DLUA_USE_APICHECK=ON -DLUA_USE_ASSERT=ON -DLUAJIT_ENABLE_GC64=OFF -DLUAJIT_NUMMODE=2 && make -j
>>and get the following assertion:
>>| asm_loop_fixup: Assertion `((intptr_t)target & 15) == 0' failed.
>>What command do you use to build LuaJIT?
>PEBKAC, I forgot to add the LUA_USE_ASSERT flag.
>>> >--
>>> >Best regards,
>>> >Maxim Kokryashkin
>>> >
>>
>>--
>>Best regards,
>>Sergey Kaplun
>--
>Best regards,
>Maxim Kokryashkin
>
[-- Attachment #2: Type: text/html, Size: 6921 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 1/3] sysprof: fix interval parsing in dual-number mode
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 1/3] sysprof: fix interval parsing in dual-number mode Sergey Kaplun via Tarantool-patches
2023-01-24 14:16 ` Maxim Kokryashkin via Tarantool-patches
@ 2023-01-26 15:55 ` sergos via Tarantool-patches
2023-01-30 9:39 ` Sergey Kaplun via Tarantool-patches
1 sibling, 1 reply; 19+ messages in thread
From: sergos via Tarantool-patches @ 2023-01-26 15:55 UTC (permalink / raw)
To: Sergey Kaplun; +Cc: tarantool-patches
Hi!
Just a nit in message, LGTM.
Sergos
> On 18 Jan 2023, at 23:16, Sergey Kaplun <skaplun@tarantool.org> wrote:
>
> When the profiling interval is parsed, `tvisnum()` is used to check that
a
> the given value is a number. But in case of dual-number mode this check
> returns false as far as the given value is an integer, so `tvisnumber()`
> should be used to cover both cases.
> ---
> src/lib_misc.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/lib_misc.c b/src/lib_misc.c
> index 06fb9f9f..c18d297e 100644
> --- a/src/lib_misc.c
> +++ b/src/lib_misc.c
> @@ -209,7 +209,7 @@ static int parse_sysprof_opts(lua_State *L, struct luam_Sysprof_Options *opt, in
> {
> cTValue *interval = lj_tab_getstr(options, lj_str_newlit(L, "interval"));
> opt->interval = SYSPROF_DEFAULT_INTERVAL;
> - if (interval && tvisnum(interval)) {
> + if (interval && tvisnumber(interval)) {
> int32_t signed_interval = numberVint(interval);
> if (signed_interval < 1)
> return PROFILE_ERRUSE;
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds Sergey Kaplun via Tarantool-patches
2023-01-24 14:20 ` Maxim Kokryashkin via Tarantool-patches
@ 2023-01-26 21:12 ` sergos via Tarantool-patches
2023-01-30 9:51 ` Sergey Kaplun via Tarantool-patches
1 sibling, 1 reply; 19+ messages in thread
From: sergos via Tarantool-patches @ 2023-01-26 21:12 UTC (permalink / raw)
To: Sergey Kaplun; +Cc: tarantool-patches
Hi!
Thanks for the patch!
Some question on build options.
Sergos
> On 18 Jan 2023, at 23:16, Sergey Kaplun <skaplun@tarantool.org> wrote:
>
> This workflow is well-suited for test specific builds like dual-number
> mode on x86_x64, build with disabled JIT or FFI, etc.
>
> For now, just the dual-number mode is added, due to the need to test
> future commits. If there is need to add a new build type `FLAVOR` column
^ ^---------
a then(?) the
> of CI matrix should be exposed. Also, just Linux x86_64 is tested,
extended? xxxxx ^ only
> because we want to decrease resource usage in CI.
> ---
> .github/workflows/exotic-builds-testing.yml | 71 +++++++++++++++++++++
> 1 file changed, 71 insertions(+)
> create mode 100644 .github/workflows/exotic-builds-testing.yml
>
> diff --git a/.github/workflows/exotic-builds-testing.yml b/.github/workflows/exotic-builds-testing.yml
> new file mode 100644
> index 00000000..cd0c14d7
> --- /dev/null
> +++ b/.github/workflows/exotic-builds-testing.yml
> @@ -0,0 +1,71 @@
> +name: "Exotic builds testing"
> +
> +on:
> + push:
> + branches-ignore:
> + - '**-notest'
> + - 'upstream-**'
> + tags-ignore:
> + - '**'
> +
> +concurrency:
> + # An update of a developer branch cancels the previously
> + # scheduled workflow run for this branch. However, the default
> + # branch, and long-term branch (tarantool-1.10, tarantool-2.8,
> + # etc.) workflow runs are never canceled.
> + #
> + # We use a trick here: define the concurrency group as 'workflow
> + # run ID' + # 'workflow run attempt' because it is a unique
> + # combination for any run. So it effectively discards grouping.
> + #
> + # XXX: we cannot use `github.sha` as a unique identifier because
> + # pushing a tag may cancel a run that works on a branch push
> + # event.
> + group: ${{ (
> + github.ref == 'refs/heads/tarantool' ||
> + startsWith(github.ref, 'refs/heads/tarantool-')) &&
> + format('{0}-{1}', github.run_id, github.run_attempt) ||
> + format('{0}-{1}', github.workflow, github.ref) }}
> + cancel-in-progress: true
> +
> +jobs:
> + test-x86_64-exotic:
> + strategy:
> + fail-fast: false
> + matrix:
> + BUILDTYPE: [Debug, Release]
> + GC64: [ON, OFF]
> + FLAVOR: [dualnum]
> + include:
> + - BUILDTYPE: Debug
> + CMAKEFLAGS: -DCMAKE_BUILD_TYPE=Debug -DLUA_USE_ASSERT=ON -DLUA_USE_APICHECK=ON
> + - BUILDTYPE: Release
> + CMAKEFLAGS: -DCMAKE_BUILD_TYPE=RelWithDebInfo
Shall we add the -DLUAJIT_ENABLE_CHECKHOOK and -DLUAJIT_SMART_STRINGS=1 since they are in Tarantool by default?
> + - FLAVOR: dualnum
> + FLAVORFLAGS: -DLUAJIT_NUMMODE=2
> + runs-on: [self-hosted, regular, Linux, x86_64]
> + name: >
> + LuaJIT ${{ matrix.FLAVOR }}
> + (Linux/x86_64)
> + ${{ matrix.BUILDTYPE }}
> + GC64:${{ matrix.GC64 }}
> + steps:
> + - uses: actions/checkout@v2.3.4
> + with:
> + fetch-depth: 0
> + submodules: recursive
> + - name: setup Linux
> + uses: ./.github/actions/setup-linux
> + - name: configure
> + run: >
> + cmake -S . -B ${{ env.BUILDDIR }}
> + -G Ninja
> + ${{ matrix.CMAKEFLAGS }}
> + ${{ matrix.FLAVORFLAGS }}
> + -DLUAJIT_ENABLE_GC64=${{ matrix.GC64 }}
> + - name: build
> + run: cmake --build . --parallel
> + working-directory: ${{ env.BUILDDIR }}
> + - name: test
> + run: cmake --build . --parallel --target test
> + working-directory: ${{ env.BUILDDIR }}
> --
> 2.34.1
>
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment.
2023-01-26 7:06 ` Sergey Kaplun via Tarantool-patches
2023-01-26 14:45 ` Maxim Kokryashkin via Tarantool-patches
@ 2023-01-26 21:22 ` sergos via Tarantool-patches
1 sibling, 0 replies; 19+ messages in thread
From: sergos via Tarantool-patches @ 2023-01-26 21:22 UTC (permalink / raw)
To: Sergey Kaplun; +Cc: tarantool-patches
[-- Attachment #1: Type: text/plain, Size: 3627 bytes --]
Hi!
Thanks for the patch, it is LGTM.
Sergos
>
> The new commit message is the following:
>
> | x86/x64: Fix loop realignment.
> |
> | (cherry picked from commit 522d2073da4be2af79db4728cbb375db0fbdfc48)
> |
> | `asm_intarith()` function may try to drop `test r, r` (where `r` is an
> | allocated register) instruction before the Jcc instruction. However, in
> | cases when Jcc instruction is "Jump short if ..." instruction (i.e. has
> | no 0F opcode prefix like "Jump near if ..."), the `test` instruction is
> | dropped when it shouldn't be, due to usage for the comparison the next
> | byte after instruction itself. As the result, the loop can't be
> | realigned later in `asm_loop_fixup` due to target to jump being
> | misaligned and the assertion fails.
> |
> | This patch adds the additional check for the 0F opcode in
> | `asm_intarith()`.
> |
> | Sergey Kaplun:
> | * added the description and the test for the problem
> |
> | Part of tarantool/tarantool#8069
>
> Branch is force pushed.
>
>>>> ---
>>>> src/lj_asm_x86.h | 5 +++--
>>>> .../lj-556-fix-loop-realignment.test.lua | 18 ++++++++++++++++++
>>>> 2 files changed, 21 insertions(+), 2 deletions(-)
>>>> create mode 100644 test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
>>>>
>>>> diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h
>>>> index 8efda8e5..e6c42c6d 100644
>>>> --- a/src/lj_asm_x86.h
>>>> +++ b/src/lj_asm_x86.h
>>>> @@ -2068,8 +2068,9 @@ static void asm_intarith(ASMState *as, IRIns *ir, x86Arith xa)
>>>> int32_t k = 0;
>>>> if (as->flagmcp == as->mcp) { /* Drop test r,r instruction. */
>>>> MCode *p = as->mcp + ((LJ_64 && *as->mcp < XI_TESTb) ? 3 : 2);
>>>> - if ((p[1] & 15) < 14) {
>>>> - if ((p[1] & 15) >= 12) p[1] -= 4; /* L <->S, NL <-> NS */
>>>> + MCode *q = p[0] == 0x0f ? p+1 : p;
>>>> + if ((*q & 15) < 14) {
>>>> + if ((*q & 15) >= 12) *q -= 4; /* L <->S, NL <-> NS */
>>>> as->flagmcp = NULL;
>>>> as->mcp = p;
>>>> } /* else: cannot transform LE/NLE to cc without use of OF. */
>>>> diff --git a/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
>>>> new file mode 100644
>>>> index 00000000..9a8e6098
>>>> --- /dev/null
>>>> +++ b/test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
>>>> @@ -0,0 +1,18 @@
>>>> +local tap = require('tap')
>>>> +
>>>> +local test = tap.test('lj-505-fold-icorrect-behavior')
>>>> +test:plan(1)
>>>> +
>>>> +-- Test file to demonstrate JIT misbehaviour for loop realignment
>>>> +-- in LUAJIT_NUMMODE=2. See also
>>>> +-- https://github.com/LuaJIT/LuaJIT/issues/556 .
>>>> +
>>>> +jit.opt.start('hotloop=1')
>>>> +
>>>> +local s = 4
>>>> +while s > 0 do
>>>> + s = s - 1
>>>> +end
>>>> +
>>>> +test:ok(true, 'loop is compiled and ran successfully')
>>>> +os.exit(test:check() and 0 or 1)
>>>> --
>>> The test works just fine with HEAD on
>>> f7d61d96 ci: introduce workflow for exotic builds.
>>>
>>> Tested configurations:
>>> LJ_64: True, LJ_GC64: True, LJ_DUALNUM: True
>>> LJ_64: True, LJ_GC64: False, LJ_DUALNUM: True
>
> It's strange...
> I use the following build command:
> | $ cmake . -DCMAKE_BUILD_TYPE=Debug -DLUA_USE_APICHECK=ON -DLUA_USE_ASSERT=ON -DLUAJIT_ENABLE_GC64=OFF -DLUAJIT_NUMMODE=2 && make -j
> and get the following assertion:
> | asm_loop_fixup: Assertion `((intptr_t)target & 15) == 0' failed.
> What command do you use to build LuaJIT?
>
>>> --
>>> Best regards,
>>> Maxim Kokryashkin
>>>
>
> --
> Best regards,
> Sergey Kaplun
[-- Attachment #2: Type: text/html, Size: 28673 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 1/3] sysprof: fix interval parsing in dual-number mode
2023-01-26 15:55 ` sergos via Tarantool-patches
@ 2023-01-30 9:39 ` Sergey Kaplun via Tarantool-patches
0 siblings, 0 replies; 19+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2023-01-30 9:39 UTC (permalink / raw)
To: sergos; +Cc: tarantool-patches
Hi, Sergos!
Thanks for the review!
On 26.01.23, sergos wrote:
> Hi!
>
> Just a nit in message, LGTM.
>
> Sergos
>
> > On 18 Jan 2023, at 23:16, Sergey Kaplun <skaplun@tarantool.org> wrote:
> >
> > When the profiling interval is parsed, `tvisnum()` is used to check that
> a
Fixed, thanks!
>
> > the given value is a number. But in case of dual-number mode this check
> > returns false as far as the given value is an integer, so `tvisnumber()`
> > should be used to cover both cases.
> > ---
<snipped>
>
--
Best regards,
Sergey Kaplun
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds
2023-01-26 21:12 ` sergos via Tarantool-patches
@ 2023-01-30 9:51 ` Sergey Kaplun via Tarantool-patches
2023-02-01 8:27 ` Igor Munkin via Tarantool-patches
0 siblings, 1 reply; 19+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2023-01-30 9:51 UTC (permalink / raw)
To: sergos; +Cc: tarantool-patches
Hi, Sergos!
Thanks for the review!
On 27.01.23, sergos wrote:
> Hi!
>
> Thanks for the patch!
>
> Some question on build options.
>
> Sergos
>
> > On 18 Jan 2023, at 23:16, Sergey Kaplun <skaplun@tarantool.org> wrote:
> >
> > This workflow is well-suited for test specific builds like dual-number
> > mode on x86_x64, build with disabled JIT or FFI, etc.
> >
> > For now, just the dual-number mode is added, due to the need to test
> > future commits. If there is need to add a new build type `FLAVOR` column
> ^ ^---------
> a then(?) the
>
> > of CI matrix should be exposed. Also, just Linux x86_64 is tested,
> extended? xxxxx ^ only
>
Thanks, fixed!
The new commit message is the following:
| ci: introduce workflow for exotic builds
|
| This workflow is well-suited for test specific builds like dual-number
| mode on x86_x64, build with disabled JIT or FFI, etc.
|
| For now, just the dual-number mode is added, due to the need to test
| future commits. If there is a need to add a new build type, then the
| `FLAVOR` column of CI matrix should be extended. Also, only Linux x86_64
| is tested, because we want to decrease resource usage in CI.
> > because we want to decrease resource usage in CI.
> > ---
> > .github/workflows/exotic-builds-testing.yml | 71 +++++++++++++++++++++
> > 1 file changed, 71 insertions(+)
> > create mode 100644 .github/workflows/exotic-builds-testing.yml
> >
> > diff --git a/.github/workflows/exotic-builds-testing.yml b/.github/workflows/exotic-builds-testing.yml
> > new file mode 100644
> > index 00000000..cd0c14d7
> > --- /dev/null
> > +++ b/.github/workflows/exotic-builds-testing.yml
> > @@ -0,0 +1,71 @@
> > +name: "Exotic builds testing"
> > +
> > +on:
> > + push:
> > + branches-ignore:
> > + - '**-notest'
> > + - 'upstream-**'
> > + tags-ignore:
> > + - '**'
> > +
> > +concurrency:
> > + # An update of a developer branch cancels the previously
> > + # scheduled workflow run for this branch. However, the default
> > + # branch, and long-term branch (tarantool-1.10, tarantool-2.8,
> > + # etc.) workflow runs are never canceled.
> > + #
> > + # We use a trick here: define the concurrency group as 'workflow
> > + # run ID' + # 'workflow run attempt' because it is a unique
> > + # combination for any run. So it effectively discards grouping.
> > + #
> > + # XXX: we cannot use `github.sha` as a unique identifier because
> > + # pushing a tag may cancel a run that works on a branch push
> > + # event.
> > + group: ${{ (
> > + github.ref == 'refs/heads/tarantool' ||
> > + startsWith(github.ref, 'refs/heads/tarantool-')) &&
> > + format('{0}-{1}', github.run_id, github.run_attempt) ||
> > + format('{0}-{1}', github.workflow, github.ref) }}
> > + cancel-in-progress: true
> > +
> > +jobs:
> > + test-x86_64-exotic:
> > + strategy:
> > + fail-fast: false
> > + matrix:
> > + BUILDTYPE: [Debug, Release]
> > + GC64: [ON, OFF]
> > + FLAVOR: [dualnum]
> > + include:
> > + - BUILDTYPE: Debug
> > + CMAKEFLAGS: -DCMAKE_BUILD_TYPE=Debug -DLUA_USE_ASSERT=ON -DLUA_USE_APICHECK=ON
> > + - BUILDTYPE: Release
> > + CMAKEFLAGS: -DCMAKE_BUILD_TYPE=RelWithDebInfo
>
> Shall we add the -DLUAJIT_ENABLE_CHECKHOOK and -DLUAJIT_SMART_STRINGS=1 since they are in Tarantool by default?
-DLUAJIT_SMART_STRINGS=1 is set by default, so it's OK not to set it
mannually.
OTOH, -DLUAJIT_ENABLE_CHECKHOOK is not set by default.
I prefer not to set it for this particular workflow, because I plan to
use it for very specific builds (even impossible for Tarantool) for
example with -DLUAJIT_DISABLE_JIT=ON, -DLUAJIT_DISABLE_FFI=ON flags.
Also, this flag is not set for default LuaJIT testing, so I tried to
make those workflows look similar.
But if we want to add this flag for default build or testing we should
add it for this workflow too.
CC-ed Igor to hear his opinion.
>
> > + - FLAVOR: dualnum
> > + FLAVORFLAGS: -DLUAJIT_NUMMODE=2
> > + runs-on: [self-hosted, regular, Linux, x86_64]
> > + name: >
> > + LuaJIT ${{ matrix.FLAVOR }}
> > + (Linux/x86_64)
> > + ${{ matrix.BUILDTYPE }}
> > + GC64:${{ matrix.GC64 }}
> > + steps:
> > + - uses: actions/checkout@v2.3.4
> > + with:
> > + fetch-depth: 0
> > + submodules: recursive
> > + - name: setup Linux
> > + uses: ./.github/actions/setup-linux
> > + - name: configure
> > + run: >
> > + cmake -S . -B ${{ env.BUILDDIR }}
> > + -G Ninja
> > + ${{ matrix.CMAKEFLAGS }}
> > + ${{ matrix.FLAVORFLAGS }}
> > + -DLUAJIT_ENABLE_GC64=${{ matrix.GC64 }}
> > + - name: build
> > + run: cmake --build . --parallel
> > + working-directory: ${{ env.BUILDDIR }}
> > + - name: test
> > + run: cmake --build . --parallel --target test
> > + working-directory: ${{ env.BUILDDIR }}
> > --
> > 2.34.1
> >
>
--
Best regards,
Sergey Kaplun
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds
2023-01-30 9:51 ` Sergey Kaplun via Tarantool-patches
@ 2023-02-01 8:27 ` Igor Munkin via Tarantool-patches
2023-02-01 8:52 ` Sergey Kaplun via Tarantool-patches
0 siblings, 1 reply; 19+ messages in thread
From: Igor Munkin via Tarantool-patches @ 2023-02-01 8:27 UTC (permalink / raw)
To: Sergey Kaplun; +Cc: tarantool-patches
Hi everyone,
On 30.01.23, Sergey Kaplun wrote:
<snipped>
> >
> > Shall we add the -DLUAJIT_ENABLE_CHECKHOOK and -DLUAJIT_SMART_STRINGS=1 since they are in Tarantool by default?
>
> -DLUAJIT_SMART_STRINGS=1 is set by default, so it's OK not to set it
> mannually.
>
> OTOH, -DLUAJIT_ENABLE_CHECKHOOK is not set by default.
> I prefer not to set it for this particular workflow, because I plan to
> use it for very specific builds (even impossible for Tarantool) for
> example with -DLUAJIT_DISABLE_JIT=ON, -DLUAJIT_DISABLE_FFI=ON flags.
> Also, this flag is not set for default LuaJIT testing, so I tried to
> make those workflows look similar.
> But if we want to add this flag for default build or testing we should
> add it for this workflow too.
> CC-ed Igor to hear his opinion.
I'm totally for adding such workflows, but I suggest to do it in a
separate patch. Sergey, this is on you.
>
> >
<snipped>
>
> --
> Best regards,
> Sergey Kaplun
--
Best regards,
IM
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds
2023-02-01 8:27 ` Igor Munkin via Tarantool-patches
@ 2023-02-01 8:52 ` Sergey Kaplun via Tarantool-patches
2023-02-02 8:54 ` sergos via Tarantool-patches
0 siblings, 1 reply; 19+ messages in thread
From: Sergey Kaplun via Tarantool-patches @ 2023-02-01 8:52 UTC (permalink / raw)
To: Igor Munkin; +Cc: tarantool-patches
Hi, Igor!
Thanks for reply:)!
On 01.02.23, Igor Munkin wrote:
> Hi everyone,
>
> On 30.01.23, Sergey Kaplun wrote:
>
> <snipped>
>
> > >
> > > Shall we add the -DLUAJIT_ENABLE_CHECKHOOK and -DLUAJIT_SMART_STRINGS=1 since they are in Tarantool by default?
> >
> > -DLUAJIT_SMART_STRINGS=1 is set by default, so it's OK not to set it
> > mannually.
> >
> > OTOH, -DLUAJIT_ENABLE_CHECKHOOK is not set by default.
> > I prefer not to set it for this particular workflow, because I plan to
> > use it for very specific builds (even impossible for Tarantool) for
> > example with -DLUAJIT_DISABLE_JIT=ON, -DLUAJIT_DISABLE_FFI=ON flags.
> > Also, this flag is not set for default LuaJIT testing, so I tried to
> > make those workflows look similar.
> > But if we want to add this flag for default build or testing we should
> > add it for this workflow too.
> > CC-ed Igor to hear his opinion.
>
> I'm totally for adding such workflows, but I suggest to do it in a
> separate patch. Sergey, this is on you.
OK, so I'll add exotic -DLUAJIT_ENBALE_CHECKHOOK job after this patch
will be merged to avoid rebases.
>
> >
> > >
>
> <snipped>
>
> >
> > --
> > Best regards,
> > Sergey Kaplun
>
> --
> Best regards,
> IM
--
Best regards,
Sergey Kaplun
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds
2023-02-01 8:52 ` Sergey Kaplun via Tarantool-patches
@ 2023-02-02 8:54 ` sergos via Tarantool-patches
0 siblings, 0 replies; 19+ messages in thread
From: sergos via Tarantool-patches @ 2023-02-02 8:54 UTC (permalink / raw)
To: Sergey Kaplun; +Cc: tarantool-patches
[-- Attachment #1: Type: text/plain, Size: 1556 bytes --]
Hi!
Thanks for the update!
That’s exactly was on my mind - an additional job, not changing this one.
LGTM.
Sergos
> On 1 Feb 2023, at 11:52, Sergey Kaplun <skaplun@tarantool.org> wrote:
>
> Hi, Igor!
>
> Thanks for reply:)!
>
> On 01.02.23, Igor Munkin wrote:
>> Hi everyone,
>>
>> On 30.01.23, Sergey Kaplun wrote:
>>
>> <snipped>
>>
>>>>
>>>> Shall we add the -DLUAJIT_ENABLE_CHECKHOOK and -DLUAJIT_SMART_STRINGS=1 since they are in Tarantool by default?
>>>
>>> -DLUAJIT_SMART_STRINGS=1 is set by default, so it's OK not to set it
>>> mannually.
>>>
>>> OTOH, -DLUAJIT_ENABLE_CHECKHOOK is not set by default.
>>> I prefer not to set it for this particular workflow, because I plan to
>>> use it for very specific builds (even impossible for Tarantool) for
>>> example with -DLUAJIT_DISABLE_JIT=ON, -DLUAJIT_DISABLE_FFI=ON flags.
>>> Also, this flag is not set for default LuaJIT testing, so I tried to
>>> make those workflows look similar.
>>> But if we want to add this flag for default build or testing we should
>>> add it for this workflow too.
>>> CC-ed Igor to hear his opinion.
>>
>> I'm totally for adding such workflows, but I suggest to do it in a
>> separate patch. Sergey, this is on you.
>
> OK, so I'll add exotic -DLUAJIT_ENBALE_CHECKHOOK job after this patch
> will be merged to avoid rebases.
>
>>
>>>
>>>>
>>
>> <snipped>
>>
>>>
>>> --
>>> Best regards,
>>> Sergey Kaplun
>>
>> --
>> Best regards,
>> IM
>
> --
> Best regards,
> Sergey Kaplun
[-- Attachment #2: Type: text/html, Size: 9905 bytes --]
^ permalink raw reply [flat|nested] 19+ messages in thread
* Re: [Tarantool-patches] [PATCH luajit 0/3] Dualnumber mode fixes
2023-01-18 20:19 [Tarantool-patches] [PATCH luajit 0/3] Dualnumber mode fixes Sergey Kaplun via Tarantool-patches
` (2 preceding siblings ...)
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment Sergey Kaplun via Tarantool-patches
@ 2023-02-20 9:56 ` Igor Munkin via Tarantool-patches
3 siblings, 0 replies; 19+ messages in thread
From: Igor Munkin via Tarantool-patches @ 2023-02-20 9:56 UTC (permalink / raw)
To: Sergey Kaplun; +Cc: tarantool-patches
Sergey,
I've checked the patches into all long-term branches in tarantool/luajit
and bumped a new version in master, 2.10 and 1.10.
On 18.01.23, Sergey Kaplun via Tarantool-patches wrote:
> Something strange happened with the previous cover-letter, so resend
> it.
>
> The first 2 patches:
> * sysprof: fix interval parsing in dual-number mode
> * ci: introduce workflow for exotic builds
> are needed to introduce workflow for dualnumber mode build, to test the
> 3rd commit:
> * x86/x64: Fix loop realignment.
>
> The first and second commits are separated as far as only the first one
> is needed to backport to tarantool-1.10 branch.
>
> PR: https://github.com/tarantool/tarantool/pull/8180
> Issues:
> * https://github.com/LuaJIT/LuaJIT/issues/556
> * https://github.com/tarantool/tarantool/issues/8069
> Branch: https://github.com/tarantool/luajit/tree/skaplun/lj-556-fix-loop-realignment-full-ci
>
> Mike Pall (1):
> x86/x64: Fix loop realignment.
>
> Sergey Kaplun (2):
> sysprof: fix interval parsing in dual-number mode
> ci: introduce workflow for exotic builds
>
> .github/workflows/exotic-builds-testing.yml | 71 +++++++++++++++++++
> src/lib_misc.c | 2 +-
> src/lj_asm_x86.h | 5 +-
> .../lj-556-fix-loop-realignment.test.lua | 18 +++++
> 4 files changed, 93 insertions(+), 3 deletions(-)
> create mode 100644 .github/workflows/exotic-builds-testing.yml
> create mode 100644 test/tarantool-tests/lj-556-fix-loop-realignment.test.lua
>
> --
> 2.34.1
>
--
Best regards,
IM
^ permalink raw reply [flat|nested] 19+ messages in thread
end of thread, other threads:[~2023-02-20 9:58 UTC | newest]
Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-01-18 20:19 [Tarantool-patches] [PATCH luajit 0/3] Dualnumber mode fixes Sergey Kaplun via Tarantool-patches
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 1/3] sysprof: fix interval parsing in dual-number mode Sergey Kaplun via Tarantool-patches
2023-01-24 14:16 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 15:55 ` sergos via Tarantool-patches
2023-01-30 9:39 ` Sergey Kaplun via Tarantool-patches
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 2/3] ci: introduce workflow for exotic builds Sergey Kaplun via Tarantool-patches
2023-01-24 14:20 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 21:12 ` sergos via Tarantool-patches
2023-01-30 9:51 ` Sergey Kaplun via Tarantool-patches
2023-02-01 8:27 ` Igor Munkin via Tarantool-patches
2023-02-01 8:52 ` Sergey Kaplun via Tarantool-patches
2023-02-02 8:54 ` sergos via Tarantool-patches
2023-01-18 20:16 ` [Tarantool-patches] [PATCH luajit 3/3] x86/x64: Fix loop realignment Sergey Kaplun via Tarantool-patches
2023-01-19 10:17 ` Sergey Kaplun via Tarantool-patches
2023-01-24 15:13 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 7:06 ` Sergey Kaplun via Tarantool-patches
2023-01-26 14:45 ` Maxim Kokryashkin via Tarantool-patches
2023-01-26 21:22 ` sergos via Tarantool-patches
2023-02-20 9:56 ` [Tarantool-patches] [PATCH luajit 0/3] Dualnumber mode fixes Igor Munkin via Tarantool-patches
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox