Commit Graph

36606 Commits

Author SHA1 Message Date
Jacob Young 8dbd29cc45 Merge pull request #24011 from jacobly0/legalize-unary
Legalize: implement scalarization and safety check expansion
2025-06-01 22:02:34 -04:00
Hilger Baumstark 0386730777 compiler-rt: add __addvsi3, __subvsi3, __mulvsi3, and __subvdi3 2025-06-01 20:17:25 +02:00
Jacob Young 6a63c8653a build: bump behavior max_rss 2025-06-01 11:58:58 -04:00
Koki Ueha 71ff3830df libc: replace MinGW's trigonometric functions with compiler_rt's
- sinf
- cosf
- sincos
- sincosf
- tanf
2025-06-01 11:25:51 +00:00
mlugg fd72b38f68 std: remove old panic handlers after zig1.wasm update 2025-06-01 12:10:57 +01:00
Jacob Young cc047fdd95 stage1: update zig1.wasm
Compiler needs cbe reserved identifier change. This also allows us to
delete the old `@intCast` panic handler declarations from the standard
library.
2025-06-01 12:10:57 +01:00
mlugg 493e37fa50 cases: include dirname in case names
For instance, the file 'cases/compile_errors/undeclared_identifier.zig'
now corresponds to test name 'compile_errors.undeclared_identifier'.
This is useful because you can now filter based on the case dirname
using `-Dtest-filter`.
2025-06-01 12:10:57 +01:00
mlugg c1a5caa454 compiler: combine @intCast safety checks
`castTruncatedData` was a poorly worded error (all shrinking casts
"truncate bits", it's just that we assume those bits to be zext/sext of
the other bits!), and `negativeToUnsigned` was a pointless distinction
which forced the compiler to emit worse code (since two separate safety
checks were required for casting e.g. 'i32' to 'u16') and wasn't even
implemented correctly. This commit combines those safety panics into one
function, `integerOutOfBounds`. The name maybe isn't perfect, but that's
not hugely important; what matters is the new default message, which is
clearer than the old ones: "integer does not fit in destination type".
2025-06-01 12:10:57 +01:00
Jacob Young 6daa37ded9 x86_64: fix packed struct equality
Closes #22990
2025-06-01 08:24:01 +01:00
Jacob Young 9edfccb9a7 Legalize: implement scalarization of overflow intrinsics 2025-06-01 08:24:01 +01:00
Jacob Young ec579aa0f3 Legalize: implement scalarization of @shuffle 2025-06-01 08:24:01 +01:00
mlugg add2976a9b compiler: implement better shuffle AIR
Runtime `@shuffle` has two cases which backends generally want to handle
differently for efficiency:

* One runtime vector operand; some result elements may be comptime-known
* Two runtime vector operands; some result elements may be undefined

The latter case happens if both vectors given to `@shuffle` are
runtime-known and they are both used (i.e. the mask refers to them).
Otherwise, if the result is not entirely comptime-known, we are in the
former case. `Sema` now diffentiates these two cases in the AIR so that
backends can easily handle them however they want to. Note that this
*doesn't* really involve Sema doing any more work than it would
otherwise need to, so there's not really a negative here!

Most existing backends have their lowerings for `@shuffle` migrated in
this commit. The LLVM backend uses new lowerings suggested by Jacob as
ones which it will handle effectively. The x86_64 backend has not yet
been migrated; for now there's a panic in there. Jacob will implement
that before this is merged anywhere.
2025-06-01 08:24:01 +01:00
Jacob Young b48d6ff619 Legalize: implement scalarization of @select 2025-06-01 08:24:01 +01:00
Jacob Young 32a57bfeaa Legalize: update for new Block API 2025-06-01 08:24:01 +01:00
Jacob Young d9b6d1ed33 cbe: legalize safety instructions in non-zig1 builds
This is valid if the bootstrap dev env doesn't need to support runtime
safety.  Another solution can always be implemented if needs change.
2025-06-01 08:24:00 +01:00
mlugg 4c4dacf81a Legalize: replace safety_checked_instructions
This adds 4 `Legalize.Feature`s:
* `expand_intcast_safe`
* `expand_add_safe`
* `expand_sub_safe`
* `expand_mul_safe`

These do pretty much what they say on the tin. This logic was previously
in Sema, used when `Zcu.Feature.safety_checked_instructions` was not
supported by the backend. That `Zcu.Feature` has been removed in favour
of this legalization.
2025-06-01 08:24:00 +01:00
Jacob Young 77e6513030 cbe: implement stdbool.h reserved identifiers
Also remove the legalize pass from zig1.
2025-05-31 18:54:28 -04:00
Jacob Young 6198f7afb7 Sema: remove all_vector_instructions logic
Backends can instead ask legalization on a per-instruction basis.
2025-05-31 18:54:28 -04:00
mlugg b4a0a082dc codegen: fix accidental stack UAF 2025-05-31 18:54:28 -04:00
Jacob Young b483defc5a Legalize: implement scalarization of binary operations 2025-05-31 18:54:28 -04:00
Jacob Young c1e9ef9eaa Legalize: implement scalarization of unary operations 2025-05-31 18:54:28 -04:00
Linus Groh c907866d55 libc: update macOS headers to SDK 15.5 2025-05-31 22:40:38 +02:00
Koki Ueha 21d9e03758 libc: replace musl's trigonometric functions with compiler_rt's
- sin
- sinf
- cos
- cosf
- sincos
- sincosf
- tan
- tanf
2025-05-30 15:32:52 +00:00
Alex Rønne Petersen 1a08c83eb3 ci: Revert aarch64-linux timeout to GitHub's default 6 hours.
We don't seem to be getting non-deterministic hangs since 4f3b59f, and e28b402
cut the run times significantly on top of that. Runs now seem to take around 1-2
hours, so the default timeout should be plenty.
2025-05-30 11:59:33 +02:00
Felix Rabe 561ab59cec langref: Update calling convention (#24022)
* langref: Update calling convention

* Apply suggestions from code review

Co-authored-by: Alex Rønne Petersen <alex@alexrp.com>

* langref: Just use .winapi directly

---------

Co-authored-by: Alex Rønne Petersen <alex@alexrp.com>
2025-05-30 01:11:00 +00:00
Alex Rønne Petersen 4641e9556d mingw: Link to ucrtbased.dll instead of API set DLLs in Debug mode.
By using the debug UCRT, we get access to functions like _CrtDbgReport.

Closes #23983.
2025-05-30 02:11:36 +02:00
Alex Rønne Petersen 0cbff2ff7f mingw: Remove libscrnsav(e,w) support.
This defines a WinMain() function that can be potentially problematic when it
isn't wanted. If we add back support for this library in the future, it should
be built separately from mingw32.lib and on demand.
2025-05-30 01:03:47 +02:00
Alex Rønne Petersen 63a9048baf libc: Merge header directories for glibc and NetBSD libc where applicable.
Manual patches:

* lib/libc/include/csky-linux-gnu/gnu/{lib-names,stubs}.h
* lib/libc/include/powerpc-linux-gnu/bits/long-double.h

Takes lib/libc/include from 115.5 MB to 113.4 MB.

Closes #21258.
2025-05-30 00:15:39 +02:00
Alex Rønne Petersen 7c7627b18a compiler: Use new merged header paths for glibc and NetBSD libc. 2025-05-30 00:15:37 +02:00
Alex Rønne Petersen dc760492a4 process_headers: Merge header directories for some targets.
These are almost entirely identical, with these exceptions:

* lib/libc/include/csky-linux-{gnueabi,gnueabihf}
    * gnu/{lib-names,stubs}.h will need manual patching for float ABI.
* lib/libc/include/{powerpc-linux-{gnueabi,gnueabihf},{powerpc64,powerpc64le}-linux-gnu}
    * bits/long-double.h will need manual patching for long double ABI.
2025-05-29 23:38:28 +02:00
Alex Rønne Petersen cbf9d3c570 libc: Remove riscv32-netbsd-none and riscv64-netbsd-none headers.
These were not intended to be included as NetBSD's RISC-V port has not had an
official release yet.
2025-05-29 16:48:28 +02:00
Alex Rønne Petersen aeebb131c8 test: Add NetBSD targets to module test matrix. 2025-05-29 16:48:28 +02:00
Veikka Tuominen 9d8acf973e aro_translate_c: Fix an assertion in buildArgsHash().
Closes #24015.
2025-05-29 16:48:28 +02:00
Alex Rønne Petersen 92b3c4b451 std.c: Expand the definition of NetBSD's pthread_rwlock_t for more targets. 2025-05-29 16:48:28 +02:00
Alex Rønne Petersen 71fd5ac38a std.c: Fix return type for NetBSD's __sigfillset14(). 2025-05-29 16:48:28 +02:00
Alex Rønne Petersen c5a68e4168 test: Remove x86-freebsd-none and powerpc-freebsd-eabihf from llvm_targets.
These will be dropped in FreeBSD 15.0, so there's no point in us spending
resources these now.
2025-05-29 16:48:28 +02:00
Alex Rønne Petersen c9ee69712a test: Add FreeBSD targets to module test matrix.
std tests are temporarily disabled for arm-freebsd-eabihf due to #23949.

I omitted x86-freebsd-none and powerpc-freebsd-none because these will be
dropped in FreeBSD 15.0 anyway, so there's no point in us spending resources on
those now.
2025-05-29 16:48:28 +02:00
Alex Rønne Petersen fb3a9fc18e std.posix.test: Fix reserved_signo() for NetBSD. 2025-05-29 16:48:28 +02:00
Alex Rønne Petersen 309ac27d35 std.c: Fix sigrtmin()/sigrtmax() for FreeBSD and NetBSD.
They just define the constants in the system headers.
2025-05-29 16:48:28 +02:00
Alex Rønne Petersen 3d2b0a53fe test: Improve Windows module test coverage.
There's not really any point in targeting *-windows-(gnu,msvc) when not linking
libc, so add entries for *-windows-(gnu,msvc) that actually link libc, and
change the old non-libc entries to *-windows-none.

Also add missing aarch64-windows-(none,msvc) and thumb-windows-(none,msvc)
entries. thumb-windows-gnu is disabled for now due to #24016.
2025-05-29 16:47:54 +02:00
Alex Rønne Petersen 358ee859ba compiler-rt: Fix some exports for *-windows-none. 2025-05-29 15:35:35 +02:00
Alex Rønne Petersen 7cae6b8fa7 test: Skip *-windows-msvc + libc module tests on non-Windows.
We can't provide MSVC libc when cross-compiling (yet?).
2025-05-29 15:35:30 +02:00
Alex Rønne Petersen c8ea81bf96 test: Sort module test and C ABI test target tables.
I removed the commented-out entries for backends that are bitrotted. Can add
these back later when we reboot those backends.
2025-05-29 15:01:45 +02:00
Jacob Young c04be630d9 Legalize: introduce a new pass before liveness
Each target can opt into different sets of legalize features.
By performing these transformations before liveness, instructions
that become unreferenced will have up-to-date liveness information.
2025-05-29 03:57:48 -04:00
Jacob Young f25212a479 Merge pull request #23924 from jacobly0/x86_64-rewrite
x86_64: implement reduce
2025-05-28 21:37:02 -04:00
Jacob Young 9f9e7e398f x86_64: implement strict float @reduce(.Max) 2025-05-28 15:10:22 -04:00
Jacob Young f5a1aaf2fc x86_64: implement strict float @reduce(.Min) 2025-05-28 15:10:22 -04:00
Jacob Young d29ea656b0 x86_64: implement optimized float @reduce(.Max) 2025-05-28 15:10:22 -04:00
Jacob Young 114a4eaf5c x86_64: implement optimized float @reduce(.Min) 2025-05-28 15:10:22 -04:00
Jacob Young 8bacf3e757 x86_64: implement integer @reduce(.Max) 2025-05-28 15:10:22 -04:00