luau/tests/conformance
Arseny Kapoulkine 24cacc94ed
Some checks are pending
benchmark / callgrind (map[branch:main name:luau-lang/benchmark-data], ubuntu-22.04) (push) Waiting to run
build / macos (push) Waiting to run
build / macos-arm (push) Waiting to run
build / ubuntu (push) Waiting to run
build / windows (Win32) (push) Waiting to run
build / windows (x64) (push) Waiting to run
build / coverage (push) Waiting to run
build / web (push) Waiting to run
release / macos (push) Waiting to run
release / ubuntu (push) Waiting to run
release / windows (push) Waiting to run
release / web (push) Waiting to run
CodeGen: Implement support for math.lerp lowering (#1609)
To implement math.lerp without branches, we add SELECT_NUM which
selects one of the two inputs based on the comparison condition.

For simplicity, we only support C == D for now; this can be extended to
a more generic version with a IrCondition operand E, but that requires
more work on the SSE side (to flip the comparison for some conditions
like Greater, and expose more generic vcmpsd).

Note: On AArch64 this will effectively result in a change in floating
point
behavior between native code and non-native code: clang synthesizes
fmadd (because floating point contraction is allowed by default, and the
arch always has the instruction), whereas this change will use
fmul+fadd.

I am not sure if this is good or bad, and if this is a problem in C or
not.
Specifically, clang's behavior results in different results between X64
and AArch64 when *not* using codegen, and with this change the behavior
when using codegen is... the same? :)

Fixing this will require either using LERP_NUM instead and hand-coding
lowering, or exposing some sort of "quasi" MADD_NUM (which would
lower to fma on AArch64 and mul+add on X64).

A small benefit to the current approach is `lerp(1, 5, t)`
constant-folds the
subtraction. With LERP_NUM this optimization will need to be implemented
manually as a partial constant-folding for LERP_NUM.

A similar problem exists today for vector.cross & vector.dot. So maybe
this
is not something we need to fix, unsure.
2025-01-16 10:48:27 -08:00
..
apicalls.lua Sync to upstream/release/571 (#895) 2023-04-07 14:01:29 -07:00
assert.lua Sync to upstream/release/501 (#20) 2021-11-01 14:52:34 -07:00
attrib.lua Sync to upstream/release/501 (#20) 2021-11-01 14:52:34 -07:00
basic.lua CodeGen: Optimize arithmetics for basic identities (#1545) 2024-11-27 04:44:39 -08:00
bitwise.lua Sync to upstream/release/631 (#1299) 2024-06-20 16:37:55 -07:00
buffers.lua Sync to upstream/release/656 (#1612) 2025-01-10 11:34:39 -08:00
calls.lua Sync to upstream/release/656 (#1612) 2025-01-10 11:34:39 -08:00
clear.lua Sync to upstream/release/501 (#20) 2021-11-01 14:52:34 -07:00
closure.lua Sync to upstream/release/600 (#1076) 2023-10-20 18:10:30 -07:00
constructs.lua Sync to upstream/release/598 (#1063) 2023-10-06 12:02:32 -07:00
coroutine.lua Sync to upstream/release/514 (#372) 2022-02-17 17:18:01 -08:00
coverage.lua Sync to upstream/release/514 (#372) 2022-02-17 17:18:01 -08:00
datetime.lua Sync to upstream/release/598 (#1063) 2023-10-06 12:02:32 -07:00
debug.lua Sync to upstream/release/650 (#1502) 2024-11-01 12:06:07 -07:00
debugger.lua Sync to upstream/release/618 (#1205) 2024-03-22 10:47:10 -07:00
errors.lua Sync to upstream/release/550 (#723) 2022-10-21 10:54:01 -07:00
events.lua Sync to upstream/release/593 (#1024) 2023-09-01 10:58:27 -07:00
exceptions.lua Sync to upstream/release/501 (#20) 2021-11-01 14:52:34 -07:00
gc.lua Sync to upstream/release/542 (#649) 2022-08-25 14:53:50 -07:00
ifelseexpr.lua Sync to upstream/release/501 (#20) 2021-11-01 14:52:34 -07:00
interrupt.lua Sync to upstream/release/610 (#1154) 2024-01-26 19:20:56 -08:00
iter.lua Sync to upstream/release/550 (#723) 2022-10-21 10:54:01 -07:00
literals.lua Sync to upstream/release/501 (#20) 2021-11-01 14:52:34 -07:00
locals.lua Spelling (#119) 2021-11-04 09:50:46 -05:00
math.lua CodeGen: Implement support for math.lerp lowering (#1609) 2025-01-16 10:48:27 -08:00
move.lua Sync to upstream/release/628 (#1278) 2024-05-31 12:18:18 -07:00
native.lua Sync to upstream/release/656 (#1612) 2025-01-10 11:34:39 -08:00
native_types.lua Sync to upstream/release/601 (#1084) 2023-10-27 14:18:41 -07:00
native_userdata.lua Sync to upstream/release/629 (#1290) 2024-06-07 10:51:12 -07:00
ndebug_upvalues.lua Fix lua_*upvalue() when upvalue names aren't in debug info (#787) 2023-01-18 06:00:13 -08:00
pcall.lua Sync to upstream/release/649 (#1489) 2024-10-25 16:15:01 -04:00
pm.lua Spelling (#119) 2021-11-04 09:50:46 -05:00
safeenv.lua Sync to upstream/release/549 (#707) 2022-10-14 12:48:41 -07:00
sort.lua Sync to upstream/release/571 (#895) 2023-04-07 14:01:29 -07:00
strconv.lua Sync to upstream/release/608 (#1145) 2024-01-12 14:25:27 -08:00
stringinterp.lua String interpolation (#614) 2022-08-24 12:01:00 -07:00
strings.lua Sync to upstream/release/588 (#992) 2023-07-28 08:13:53 -07:00
tables.lua tests: Adjust conformance tests to account for array invariant (#1289) 2024-06-07 10:05:50 -07:00
tmerror.lua Sync to upstream/release/591 (#1012) 2023-08-18 11:15:41 -07:00
tpack.lua Sync to upstream/release/550 (#723) 2022-10-21 10:54:01 -07:00
types.lua Sync to upstream/release/544 (#669) 2022-09-08 15:14:25 -07:00
userdata.lua Sync to upstream/release/593 (#1024) 2023-09-01 10:58:27 -07:00
utf8.lua Sync to upstream/release/603 (#1097) 2023-11-10 13:10:07 -08:00
vararg.lua Sync to upstream/release/514 (#357) 2022-02-11 11:02:09 -08:00
vector.lua Sync to upstream/release/640 (#1374) 2024-08-23 09:35:30 -07:00
vector_library.lua Sync to upstream/release/653 (#1541) 2024-11-22 13:00:51 -08:00