From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <tarantool-patches-bounces@dev.tarantool.org>
Received: from [87.239.111.99] (localhost [127.0.0.1])
	by dev.tarantool.org (Postfix) with ESMTP id 4A31FF1394C;
	Thu, 22 Aug 2024 17:49:56 +0300 (MSK)
DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 4A31FF1394C
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev;
	t=1724338196; bh=mqfjhSYzR8eekxTdJls+3AAwF0JUUHJXTBTharEmn+0=;
	h=Date:To:Cc:References:In-Reply-To:Subject:List-Id:
	 List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe:
	 From:Reply-To:From;
	b=l37Tp8gitf5GGD//jvl0l2ABNcOeKvnkKlDfms9suAvXu1T+lBb/TXbLI7Nf6nWVY
	 bYEgE4xYZfOSGQOfPDOlv4pGQfRmta+ENtJXsfXUR1Bq0Z6VT1vM94vSjISec+h4f8
	 gbvDZiDZlAODPy7K9kQbHS3WGHKI1up6QANbupWA=
Received: from smtp36.i.mail.ru (smtp36.i.mail.ru [95.163.41.77])
 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
 key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256)
 (No client certificate requested)
 by dev.tarantool.org (Postfix) with ESMTPS id 6EB4CF1394C
 for <tarantool-patches@dev.tarantool.org>;
 Thu, 22 Aug 2024 17:49:55 +0300 (MSK)
DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 6EB4CF1394C
Received: by smtp36.i.mail.ru with esmtpa (envelope-from
 <sergeyb@tarantool.org>)
 id 1sh98M-0000000B2vP-2vQm; Thu, 22 Aug 2024 17:49:55 +0300
Content-Type: multipart/alternative;
 boundary="------------6vOwpvsAz67p6WUDxiX2entY"
Message-ID: <7422ba09-cbfd-48a7-8d1f-fc13e3e5e8ac@tarantool.org>
Date: Thu, 22 Aug 2024 17:49:54 +0300
MIME-Version: 1.0
User-Agent: Mozilla Thunderbird
Content-Language: en-US
To: Sergey Kaplun <skaplun@tarantool.org>,
 Maxim Kokryashkin <m.kokryashkin@tarantool.org>
Cc: tarantool-patches@dev.tarantool.org
References: <cover.1724228998.git.skaplun@tarantool.org>
 <3cebf8e89836cbcbd000fc85a7da3a83ea519874.1724228998.git.skaplun@tarantool.org>
In-Reply-To: <3cebf8e89836cbcbd000fc85a7da3a83ea519874.1724228998.git.skaplun@tarantool.org>
X-Mailru-Src: smtp
X-4EC0790: 10
X-7564579A: 646B95376F6C166E
X-77F55803: 4F1203BC0FB41BD9A67092BE052B1D9E3190851043EE9FB38ADAADDDC22C6177182A05F538085040FB336B18FA52FBF533594132A326AF8B6F93153358D45438D0B9F2342C1BD1898957A5FC6A3222B0
X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE789066434B85BF7C7EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637205505A8D8EF484BEA1F7E6F0F101C6723150C8DA25C47586E58E00D9D99D84E1BDDB23E98D2D38B043BF0FB74779F36981D9D2BF6764A2170981833185955A5C660AA6F8267C465A471835C12D1D9774AD6D5ED66289B5259CC434672EE6371117882F4460429724CE54428C33FAD30A8DF7F3B2552694AC26CFBAC0749D213D2E47CDBA5A9658378DA827A17800CE70F3DDF2BBF19B93A9FA2833FD35BB23DF004C90652538430302FCEF25BFAB3454AD6D5ED66289B5278DA827A17800CE7B41913284266F17ED32BA5DBAC0009BE395957E7521B51C2330BD67F2E7D9AF1090A508E0FED6299176DF2183F8FC7C0FAB95F1B9A0B3056CD04E86FAF290E2DB606B96278B59C421DD303D21008E29813377AFFFEAFD269A417C69337E82CC2E827F84554CEF50127C277FBC8AE2E8BA83251EDC214901ED5E8D9A59859A8B6F82A78844E5C6993089D37D7C0E48F6C5571747095F342E88FB05168BE4CE3AF
X-C1DE0DAB: 0D63561A33F958A5631CD7616BA4236F5002B1117B3ED696109B84659B921EBC33EE06AFCD964888823CB91A9FED034534781492E4B8EEAD5A44E68B9071C39EBDAD6C7F3747799A
X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF3FED46C3ACD6F73ED3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CF419F492801E92CDD649D3A3CF0B69C2D1D315D265CE31CCFBAC05F0FCCE407AF7E72D8710CBEBF0E2FB0CAD32ADFBF849970E353896C7AD3B3FA5E4453E612A0ECF0C36C1E422DFD5F4332CA8FE04980913E6812662D5F2AB9AF64DB4688768036DF5FE9C0001AF333F2C28C22F508233FCF178C6DD14203
X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojbUwDRTee1XrXlX0UtohMrw==
X-Mailru-Sender: 520A125C2F17F0B1E52FEF5D219D61408EF13675375964E7FD33B940251CC5BB7F7E6E8C8D04ACA60152A3D17938EB451EB5A0BCEC6A560B3DDE9B364B0DF289BE2DA36745F2EEB5CEBA01FB949A1F1EEAB4BC95F72C04283CDA0F3B3F5B9367
X-Mras: Ok
Subject: Re: [Tarantool-patches] [PATCH v2 luajit 41/45] test: enable
 <misc/unordered_jit.lua> LuaJIT test
X-BeenThere: tarantool-patches@dev.tarantool.org
X-Mailman-Version: 2.1.34
Precedence: list
List-Id: Tarantool development patches <tarantool-patches.dev.tarantool.org>
List-Unsubscribe: <https://lists.tarantool.org/mailman/options/tarantool-patches>, 
 <mailto:tarantool-patches-request@dev.tarantool.org?subject=unsubscribe>
List-Archive: <https://lists.tarantool.org/pipermail/tarantool-patches/>
List-Post: <mailto:tarantool-patches@dev.tarantool.org>
List-Help: <mailto:tarantool-patches-request@dev.tarantool.org?subject=help>
List-Subscribe: <https://lists.tarantool.org/mailman/listinfo/tarantool-patches>, 
 <mailto:tarantool-patches-request@dev.tarantool.org?subject=subscribe>
From: Sergey Bronnikov via Tarantool-patches
 <tarantool-patches@dev.tarantool.org>
Reply-To: Sergey Bronnikov <sergeyb@tarantool.org>
Errors-To: tarantool-patches-bounces@dev.tarantool.org
Sender: "Tarantool-patches" <tarantool-patches-bounces@dev.tarantool.org>

This is a multi-part message in MIME format.
--------------6vOwpvsAz67p6WUDxiX2entY
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Sergey,

On 21.08.2024 11:58, Sergey Kaplun wrote:
> This patch moves the aforementioned test from the <misc> to the <trace/>
> directory, includes it in <index>, and names the subtests.
>
> Part of tarantool/tarantool#9398
> ---
thanks for the patch! LGTM
>   test/LuaJIT-tests/misc/unordered_jit.lua  |  96 ---------
>   test/LuaJIT-tests/trace/index             |   1 +
>   test/LuaJIT-tests/trace/unordered_jit.lua | 240 ++++++++++++++++++++++
>   3 files changed, 241 insertions(+), 96 deletions(-)
>   delete mode 100644 test/LuaJIT-tests/misc/unordered_jit.lua
>   create mode 100644 test/LuaJIT-tests/trace/unordered_jit.lua
>
> diff --git a/test/LuaJIT-tests/misc/unordered_jit.lua b/test/LuaJIT-tests/misc/unordered_jit.lua
> deleted file mode 100644
> index 5ff1a1ba..00000000
> --- a/test/LuaJIT-tests/misc/unordered_jit.lua
> +++ /dev/null
> @@ -1,96 +0,0 @@
> -
> -local nan = 0/0
> -local t = {}
> -for i=1,100 do t[i] = i+0.5 end
> -for i=101,200 do t[i] = nan end
> -
> -do
> -  local z = 0
> -  for i=1,200 do if t[i] > 1000 then z=i end end
> -  assert(z == 0)
> -end
> -
> -do
> -  local z = 0
> -  for i=1,200 do if not (t[i] < 1000) then z=i end end
> -  assert(z == 200)
> -end
> -
> -do
> -  local z = 0
> -  for i=1,200 do if t[i] <= 1000 then z=i end end
> -  assert(z == 100)
> -end
> -
> -do
> -  local z = 0
> -  for i=1,200 do if not (t[i] >= 1000) then z=i end end
> -  assert(z == 200)
> -end
> -
> -do
> -  local z = 0
> -  for i=1,200 do if t[i] > 0 then z=i end end
> -  assert(z == 100)
> -end
> -
> -do
> -  local z = 0
> -  for i=1,200 do if not (t[i] < 0) then z=i end end
> -  assert(z == 200)
> -end
> -
> -do
> -  local z = 0
> -  for i=1,200 do if t[i] <= 0 then z=i end end
> -  assert(z == 0)
> -end
> -
> -do
> -  local z = 0
> -  for i=1,200 do if not (t[i] >= 0) then z=i end end
> -  assert(z == 200)
> -end
> -
> -do local z; for i=1,100 do z = 0/0 end; assert(z ~= z) end
> -
> -do local z; for i=1,100 do z = nan == nan end; assert(z == false) end
> -do local z; for i=1,100 do z = nan == 1 end; assert(z == false) end
> -do local z; for i=1,100 do z = 1 == nan end; assert(z == false) end
> -
> -do local z; for i=1,100 do z = nan ~= nan end; assert(z == true) end
> -do local z; for i=1,100 do z = nan ~= 1 end; assert(z == true) end
> -do local z; for i=1,100 do z = 1 ~= nan end; assert(z == true) end
> -
> -do local z; for i=1,100 do z = nan < nan end; assert(z == false) end
> -do local z; for i=1,100 do z = nan < 1 end; assert(z == false) end
> -do local z; for i=1,100 do z = 1 < nan end; assert(z == false) end
> -
> -do local z; for i=1,100 do z = not (nan < nan) end; assert(z == true) end
> -do local z; for i=1,100 do z = not (nan < 1) end; assert(z == true) end
> -do local z; for i=1,100 do z = not (1 < nan) end; assert(z == true) end
> -
> -do local z; for i=1,100 do z = nan > nan end; assert(z == false) end
> -do local z; for i=1,100 do z = nan > 1 end; assert(z == false) end
> -do local z; for i=1,100 do z = 1 > nan end; assert(z == false) end
> -
> -do local z; for i=1,100 do z = not (nan > nan) end; assert(z == true) end
> -do local z; for i=1,100 do z = not (nan > 1) end; assert(z == true) end
> -do local z; for i=1,100 do z = not (1 > nan) end; assert(z == true) end
> -
> -do local z; for i=1,100 do z = nan <= nan end; assert(z == false) end
> -do local z; for i=1,100 do z = nan <= 1 end; assert(z == false) end
> -do local z; for i=1,100 do z = 1 <= nan end; assert(z == false) end
> -
> -do local z; for i=1,100 do z = not (nan <= nan) end; assert(z == true) end
> -do local z; for i=1,100 do z = not (nan <= 1) end; assert(z == true) end
> -do local z; for i=1,100 do z = not (1 <= nan) end; assert(z == true) end
> -
> -do local z; for i=1,100 do z = nan >= nan end; assert(z == false) end
> -do local z; for i=1,100 do z = nan >= 1 end; assert(z == false) end
> -do local z; for i=1,100 do z = 1 >= nan end; assert(z == false) end
> -
> -do local z; for i=1,100 do z = not (nan >= nan) end; assert(z == true) end
> -do local z; for i=1,100 do z = not (nan >= 1) end; assert(z == true) end
> -do local z; for i=1,100 do z = not (1 >= nan) end; assert(z == true) end
> -
> diff --git a/test/LuaJIT-tests/trace/index b/test/LuaJIT-tests/trace/index
> index 1b8fb8f4..c7fbbe57 100644
> --- a/test/LuaJIT-tests/trace/index
> +++ b/test/LuaJIT-tests/trace/index
> @@ -12,3 +12,4 @@ stack_purge.lua
>   stitch.lua
>   tcall_base.lua
>   tcall_loop.lua
> +unordered_jit.lua
> diff --git a/test/LuaJIT-tests/trace/unordered_jit.lua b/test/LuaJIT-tests/trace/unordered_jit.lua
> new file mode 100644
> index 00000000..0aa7bde3
> --- /dev/null
> +++ b/test/LuaJIT-tests/trace/unordered_jit.lua
> @@ -0,0 +1,240 @@
> +-- All cases below use constants on the trace.
> +local nan = 0/0
> +local t = {}
> +for i = 1, 100 do t[i] = i + 0.5 end
> +for i = 101, 200 do t[i] = nan end
> +
> +do --- Branch is never taken, NaN > 1000.
> +  local z = 0
> +  for i = 1, 200 do if t[i] > 1000 then z = i end end
> +  assert(z == 0)
> +end
> +
> +do --- Branch begins to be taken on the trace, not (NaN < 1000).
> +  local z = 0
> +  for i = 1, 200 do if not (t[i] < 1000) then z = i end end
> +  assert(z == 200)
> +end
> +
> +do --- Branch ends to be taken on the trace, NaN <= 1000.
> +  local z = 0
> +  for i = 1, 200 do if t[i] <= 1000 then z = i end end
> +  assert(z == 100)
> +end
> +
> +do --- Branch is always taken, not (NaN >= 1000).
> +  local z = 0
> +  for i = 1, 200 do if not (t[i] >= 1000) then z = i end end
> +  assert(z == 200)
> +end
> +
> +do --- Branch ends to be taken on the trace, NaN > 0.
> +  local z = 0
> +  for i = 1, 200 do if t[i] > 0 then z = i end end
> +  assert(z == 100)
> +end
> +
> +do --- Branch is always taken, not (NaN < 0).
> +  local z = 0
> +  for i = 1, 200 do if not (t[i] < 0) then z = i end end
> +  assert(z == 200)
> +end
> +
> +do --- Branch is never taken, NaN <= 0.
> +  local z = 0
> +  for i = 1, 200 do if t[i] <= 0 then z = i end end
> +  assert(z == 0)
> +end
> +
> +do --- Branch begins to be taken on the trace, not (NaN >= 0).
> +  local z = 0
> +  for i = 1, 200 do if not (t[i] >= 0) then z = i end end
> +  assert(z == 200)
> +end
> +
> +do --- NaN assign on trace.
> +  local z
> +  for _ = 1, 100 do z = 0/0 end
> +  assert(z ~= z)
> +end
> +
> +do --- Nan == NaN.
> +  local z
> +  for _ = 1, 100 do z = nan == nan end
> +  assert(z == false)
> +end
> +
> +do --- NaN == 1.
> +  local z
> +  for _ = 1, 100 do z = nan == 1 end
> +  assert(z == false)
> +end
> +
> +do --- 1 == NaN.
> +  local z
> +  local z
> +  for _ = 1, 100 do z = 1 == nan end
> +  assert(z == false)
> +end
> +
> +do --- NaN ~= NaN.
> +  local z
> +  for _ = 1, 100 do z = nan ~= nan end
> +  assert(z == true)
> +end
> +
> +do --- NaN ~= 1.
> +  local z
> +  for _ = 1, 100 do z = nan ~= 1 end
> +  assert(z == true)
> +end
> +
> +do --- 1 ~= NaN.
> +  local z
> +  for _ = 1, 100 do z = 1 ~= nan end
> +  assert(z == true)
> +end
> +
> +do --- NaN < NaN.
> +  local z
> +  for _ = 1, 100 do z = nan < nan end
> +  assert(z == false)
> +end
> +
> +do --- NaN < 1.
> +  local z
> +  for _ = 1, 100 do z = nan < 1 end
> +  assert(z == false)
> +end
> +
> +do --- 1 < NaN.
> +  local z
> +  for _ = 1, 100 do z = 1 < nan end
> +  assert(z == false)
> +end
> +
> +do --- not (NaN < NaN).
> +  local z
> +  for _ = 1, 100 do z = not (nan < nan) end
> +  assert(z == true)
> +end
> +
> +do --- not (NaN < 1).
> +  local z
> +  for _ = 1, 100 do z = not (nan < 1) end
> +  assert(z == true)
> +end
> +
> +do --- not (1 < NaN).
> +  local z
> +  for _ = 1, 100 do z = not (1 < nan) end
> +  assert(z == true)
> +end
> +
> +do --- NaN > NaN.
> +  local z
> +  for _ = 1, 100 do z = nan > nan end
> +  assert(z == false)
> +end
> +
> +do --- NaN > 1.
> +  local z
> +  for _ = 1, 100 do z = nan > 1 end
> +  assert(z == false)
> +end
> +
> +do --- 1 > NaN.
> +  local z
> +  for _ = 1, 100 do z = 1 > nan end
> +  assert(z == false)
> +end
> +
> +do --- not (NaN > NaN).
> +  local z
> +  for _ = 1, 100 do z = not (nan > nan) end
> +  assert(z == true)
> +end
> +
> +do --- not (NaN > 1).
> +  local z
> +  for _ = 1, 100 do z = not (nan > 1) end
> +  assert(z == true)
> +end
> +
> +do --- not (1 > NaN).
> +  local z
> +  for _ = 1, 100 do z = not (1 > nan) end
> +  assert(z == true)
> +end
> +
> +do --- NaN <= NaN.
> +  local z
> +  for _ = 1, 100 do z = nan <= nan end
> +  assert(z == false)
> +end
> +
> +do --- NaN <= 1.
> +  local z
> +  for _ = 1, 100 do z = nan <= 1 end
> +  assert(z == false)
> +end
> +
> +do --- 1 <= NaN.
> +  local z
> +  for _ = 1, 100 do z = 1 <= nan end
> +  assert(z == false)
> +end
> +
> +do --- not (NaN <= NaN).
> +  local z
> +  for _ = 1, 100 do z = not (nan <= nan) end
> +  assert(z == true)
> +end
> +
> +do --- not (NaN <= 1).
> +  local z
> +  for _ = 1, 100 do z = not (nan <= 1) end
> +  assert(z == true)
> +end
> +
> +do --- not (1 <= NaN).
> +  local z
> +  for _ = 1, 100 do z = not (1 <= nan) end
> +  assert(z == true)
> +end
> +
> +do --- NaN >= NaN.
> +  local z
> +  for _ = 1, 100 do z = nan >= nan end
> +  assert(z == false)
> +end
> +
> +do --- NaN >= 1.
> +  local z
> +  for _ = 1, 100 do z = nan >= 1 end
> +  assert(z == false)
> +end
> +
> +do --- 1 >= NaN.
> +  local z
> +  for _ = 1, 100 do z = 1 >= nan end
> +  assert(z == false)
> +end
> +
> +do --- not (NaN >= NaN).
> +  local z
> +  for _ = 1, 100 do z = not (nan >= nan) end
> +  assert(z == true)
> +end
> +
> +do --- not (NaN >= 1).
> +  local z
> +  for _ = 1, 100 do z = not (nan >= 1) end
> +  assert(z == true)
> +end
> +
> +do --- not (1 >= NaN).
> +  local z
> +  for _ = 1, 100 do z = not (1 >= nan) end
> +  assert(z == true)
> +end
--------------6vOwpvsAz67p6WUDxiX2entY
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 7bit

<!DOCTYPE html>
<html data-lt-installed="true">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body style="padding-bottom: 1px;">
    <p>Sergey,<br>
    </p>
    <div class="moz-cite-prefix">On 21.08.2024 11:58, Sergey Kaplun
      wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:3cebf8e89836cbcbd000fc85a7da3a83ea519874.1724228998.git.skaplun@tarantool.org">
      <pre class="moz-quote-pre" wrap="">This patch moves the aforementioned test from the &lt;misc&gt; to the &lt;trace/&gt;
directory, includes it in &lt;index&gt;, and names the subtests.

Part of tarantool/tarantool#9398
---</pre>
    </blockquote>
    thanks for the patch! LGTM<br>
    <blockquote type="cite"
cite="mid:3cebf8e89836cbcbd000fc85a7da3a83ea519874.1724228998.git.skaplun@tarantool.org">
      <pre class="moz-quote-pre" wrap="">
 test/LuaJIT-tests/misc/unordered_jit.lua  |  96 ---------
 test/LuaJIT-tests/trace/index             |   1 +
 test/LuaJIT-tests/trace/unordered_jit.lua | 240 ++++++++++++++++++++++
 3 files changed, 241 insertions(+), 96 deletions(-)
 delete mode 100644 test/LuaJIT-tests/misc/unordered_jit.lua
 create mode 100644 test/LuaJIT-tests/trace/unordered_jit.lua

diff --git a/test/LuaJIT-tests/misc/unordered_jit.lua b/test/LuaJIT-tests/misc/unordered_jit.lua
deleted file mode 100644
index 5ff1a1ba..00000000
--- a/test/LuaJIT-tests/misc/unordered_jit.lua
+++ /dev/null
@@ -1,96 +0,0 @@
-
-local nan = 0/0
-local t = {}
-for i=1,100 do t[i] = i+0.5 end
-for i=101,200 do t[i] = nan end
-
-do
-  local z = 0
-  for i=1,200 do if t[i] &gt; 1000 then z=i end end
-  assert(z == 0)
-end
-
-do
-  local z = 0
-  for i=1,200 do if not (t[i] &lt; 1000) then z=i end end
-  assert(z == 200)
-end
-
-do
-  local z = 0
-  for i=1,200 do if t[i] &lt;= 1000 then z=i end end
-  assert(z == 100)
-end
-
-do
-  local z = 0
-  for i=1,200 do if not (t[i] &gt;= 1000) then z=i end end
-  assert(z == 200)
-end
-
-do
-  local z = 0
-  for i=1,200 do if t[i] &gt; 0 then z=i end end
-  assert(z == 100)
-end
-
-do
-  local z = 0
-  for i=1,200 do if not (t[i] &lt; 0) then z=i end end
-  assert(z == 200)
-end
-
-do
-  local z = 0
-  for i=1,200 do if t[i] &lt;= 0 then z=i end end
-  assert(z == 0)
-end
-
-do
-  local z = 0
-  for i=1,200 do if not (t[i] &gt;= 0) then z=i end end
-  assert(z == 200)
-end
-
-do local z; for i=1,100 do z = 0/0 end; assert(z ~= z) end
-
-do local z; for i=1,100 do z = nan == nan end; assert(z == false) end
-do local z; for i=1,100 do z = nan == 1 end; assert(z == false) end
-do local z; for i=1,100 do z = 1 == nan end; assert(z == false) end
-
-do local z; for i=1,100 do z = nan ~= nan end; assert(z == true) end
-do local z; for i=1,100 do z = nan ~= 1 end; assert(z == true) end
-do local z; for i=1,100 do z = 1 ~= nan end; assert(z == true) end
-
-do local z; for i=1,100 do z = nan &lt; nan end; assert(z == false) end
-do local z; for i=1,100 do z = nan &lt; 1 end; assert(z == false) end
-do local z; for i=1,100 do z = 1 &lt; nan end; assert(z == false) end
-
-do local z; for i=1,100 do z = not (nan &lt; nan) end; assert(z == true) end
-do local z; for i=1,100 do z = not (nan &lt; 1) end; assert(z == true) end
-do local z; for i=1,100 do z = not (1 &lt; nan) end; assert(z == true) end
-
-do local z; for i=1,100 do z = nan &gt; nan end; assert(z == false) end
-do local z; for i=1,100 do z = nan &gt; 1 end; assert(z == false) end
-do local z; for i=1,100 do z = 1 &gt; nan end; assert(z == false) end
-
-do local z; for i=1,100 do z = not (nan &gt; nan) end; assert(z == true) end
-do local z; for i=1,100 do z = not (nan &gt; 1) end; assert(z == true) end
-do local z; for i=1,100 do z = not (1 &gt; nan) end; assert(z == true) end
-
-do local z; for i=1,100 do z = nan &lt;= nan end; assert(z == false) end
-do local z; for i=1,100 do z = nan &lt;= 1 end; assert(z == false) end
-do local z; for i=1,100 do z = 1 &lt;= nan end; assert(z == false) end
-
-do local z; for i=1,100 do z = not (nan &lt;= nan) end; assert(z == true) end
-do local z; for i=1,100 do z = not (nan &lt;= 1) end; assert(z == true) end
-do local z; for i=1,100 do z = not (1 &lt;= nan) end; assert(z == true) end
-
-do local z; for i=1,100 do z = nan &gt;= nan end; assert(z == false) end
-do local z; for i=1,100 do z = nan &gt;= 1 end; assert(z == false) end
-do local z; for i=1,100 do z = 1 &gt;= nan end; assert(z == false) end
-
-do local z; for i=1,100 do z = not (nan &gt;= nan) end; assert(z == true) end
-do local z; for i=1,100 do z = not (nan &gt;= 1) end; assert(z == true) end
-do local z; for i=1,100 do z = not (1 &gt;= nan) end; assert(z == true) end
-
diff --git a/test/LuaJIT-tests/trace/index b/test/LuaJIT-tests/trace/index
index 1b8fb8f4..c7fbbe57 100644
--- a/test/LuaJIT-tests/trace/index
+++ b/test/LuaJIT-tests/trace/index
@@ -12,3 +12,4 @@ stack_purge.lua
 stitch.lua
 tcall_base.lua
 tcall_loop.lua
+unordered_jit.lua
diff --git a/test/LuaJIT-tests/trace/unordered_jit.lua b/test/LuaJIT-tests/trace/unordered_jit.lua
new file mode 100644
index 00000000..0aa7bde3
--- /dev/null
+++ b/test/LuaJIT-tests/trace/unordered_jit.lua
@@ -0,0 +1,240 @@
+-- All cases below use constants on the trace.
+local nan = 0/0
+local t = {}
+for i = 1, 100 do t[i] = i + 0.5 end
+for i = 101, 200 do t[i] = nan end
+
+do --- Branch is never taken, NaN &gt; 1000.
+  local z = 0
+  for i = 1, 200 do if t[i] &gt; 1000 then z = i end end
+  assert(z == 0)
+end
+
+do --- Branch begins to be taken on the trace, not (NaN &lt; 1000).
+  local z = 0
+  for i = 1, 200 do if not (t[i] &lt; 1000) then z = i end end
+  assert(z == 200)
+end
+
+do --- Branch ends to be taken on the trace, NaN &lt;= 1000.
+  local z = 0
+  for i = 1, 200 do if t[i] &lt;= 1000 then z = i end end
+  assert(z == 100)
+end
+
+do --- Branch is always taken, not (NaN &gt;= 1000).
+  local z = 0
+  for i = 1, 200 do if not (t[i] &gt;= 1000) then z = i end end
+  assert(z == 200)
+end
+
+do --- Branch ends to be taken on the trace, NaN &gt; 0.
+  local z = 0
+  for i = 1, 200 do if t[i] &gt; 0 then z = i end end
+  assert(z == 100)
+end
+
+do --- Branch is always taken, not (NaN &lt; 0).
+  local z = 0
+  for i = 1, 200 do if not (t[i] &lt; 0) then z = i end end
+  assert(z == 200)
+end
+
+do --- Branch is never taken, NaN &lt;= 0.
+  local z = 0
+  for i = 1, 200 do if t[i] &lt;= 0 then z = i end end
+  assert(z == 0)
+end
+
+do --- Branch begins to be taken on the trace, not (NaN &gt;= 0).
+  local z = 0
+  for i = 1, 200 do if not (t[i] &gt;= 0) then z = i end end
+  assert(z == 200)
+end
+
+do --- NaN assign on trace.
+  local z
+  for _ = 1, 100 do z = 0/0 end
+  assert(z ~= z)
+end
+
+do --- Nan == NaN.
+  local z
+  for _ = 1, 100 do z = nan == nan end
+  assert(z == false)
+end
+
+do --- NaN == 1.
+  local z
+  for _ = 1, 100 do z = nan == 1 end
+  assert(z == false)
+end
+
+do --- 1 == NaN.
+  local z
+  local z
+  for _ = 1, 100 do z = 1 == nan end
+  assert(z == false)
+end
+
+do --- NaN ~= NaN.
+  local z
+  for _ = 1, 100 do z = nan ~= nan end
+  assert(z == true)
+end
+
+do --- NaN ~= 1.
+  local z
+  for _ = 1, 100 do z = nan ~= 1 end
+  assert(z == true)
+end
+
+do --- 1 ~= NaN.
+  local z
+  for _ = 1, 100 do z = 1 ~= nan end
+  assert(z == true)
+end
+
+do --- NaN &lt; NaN.
+  local z
+  for _ = 1, 100 do z = nan &lt; nan end
+  assert(z == false)
+end
+
+do --- NaN &lt; 1.
+  local z
+  for _ = 1, 100 do z = nan &lt; 1 end
+  assert(z == false)
+end
+
+do --- 1 &lt; NaN.
+  local z
+  for _ = 1, 100 do z = 1 &lt; nan end
+  assert(z == false)
+end
+
+do --- not (NaN &lt; NaN).
+  local z
+  for _ = 1, 100 do z = not (nan &lt; nan) end
+  assert(z == true)
+end
+
+do --- not (NaN &lt; 1).
+  local z
+  for _ = 1, 100 do z = not (nan &lt; 1) end
+  assert(z == true)
+end
+
+do --- not (1 &lt; NaN).
+  local z
+  for _ = 1, 100 do z = not (1 &lt; nan) end
+  assert(z == true)
+end
+
+do --- NaN &gt; NaN.
+  local z
+  for _ = 1, 100 do z = nan &gt; nan end
+  assert(z == false)
+end
+
+do --- NaN &gt; 1.
+  local z
+  for _ = 1, 100 do z = nan &gt; 1 end
+  assert(z == false)
+end
+
+do --- 1 &gt; NaN.
+  local z
+  for _ = 1, 100 do z = 1 &gt; nan end
+  assert(z == false)
+end
+
+do --- not (NaN &gt; NaN).
+  local z
+  for _ = 1, 100 do z = not (nan &gt; nan) end
+  assert(z == true)
+end
+
+do --- not (NaN &gt; 1).
+  local z
+  for _ = 1, 100 do z = not (nan &gt; 1) end
+  assert(z == true)
+end
+
+do --- not (1 &gt; NaN).
+  local z
+  for _ = 1, 100 do z = not (1 &gt; nan) end
+  assert(z == true)
+end
+
+do --- NaN &lt;= NaN.
+  local z
+  for _ = 1, 100 do z = nan &lt;= nan end
+  assert(z == false)
+end
+
+do --- NaN &lt;= 1.
+  local z
+  for _ = 1, 100 do z = nan &lt;= 1 end
+  assert(z == false)
+end
+
+do --- 1 &lt;= NaN.
+  local z
+  for _ = 1, 100 do z = 1 &lt;= nan end
+  assert(z == false)
+end
+
+do --- not (NaN &lt;= NaN).
+  local z
+  for _ = 1, 100 do z = not (nan &lt;= nan) end
+  assert(z == true)
+end
+
+do --- not (NaN &lt;= 1).
+  local z
+  for _ = 1, 100 do z = not (nan &lt;= 1) end
+  assert(z == true)
+end
+
+do --- not (1 &lt;= NaN).
+  local z
+  for _ = 1, 100 do z = not (1 &lt;= nan) end
+  assert(z == true)
+end
+
+do --- NaN &gt;= NaN.
+  local z
+  for _ = 1, 100 do z = nan &gt;= nan end
+  assert(z == false)
+end
+
+do --- NaN &gt;= 1.
+  local z
+  for _ = 1, 100 do z = nan &gt;= 1 end
+  assert(z == false)
+end
+
+do --- 1 &gt;= NaN.
+  local z
+  for _ = 1, 100 do z = 1 &gt;= nan end
+  assert(z == false)
+end
+
+do --- not (NaN &gt;= NaN).
+  local z
+  for _ = 1, 100 do z = not (nan &gt;= nan) end
+  assert(z == true)
+end
+
+do --- not (NaN &gt;= 1).
+  local z
+  for _ = 1, 100 do z = not (nan &gt;= 1) end
+  assert(z == true)
+end
+
+do --- not (1 &gt;= NaN).
+  local z
+  for _ = 1, 100 do z = not (1 &gt;= nan) end
+  assert(z == true)
+end
</pre>
    </blockquote>
  </body>
  <lt-container></lt-container>
</html>

--------------6vOwpvsAz67p6WUDxiX2entY--