14906 Commits

Author SHA1 Message Date
Jacob Young
2ff49751aa Compilation: introduce work stages for better work distribution 2024-07-13 04:47:38 -04:00
Jacob Young
a1053e8e1d InternPool: add and use a mutate mutex for each list
This allows the mutate mutex to only be locked during actual grows,
which are rare. For the lists that didn't previously have a mutex, this
change has little effect since grows are rare and there is zero
contention on a mutex that is only ever locked by one thread.  This
change allows `extra` to be mutated without racing with a grow.
2024-07-13 04:47:38 -04:00
Jacob Young
9f8e4ddf25 Builder: fix llvm ir syntax 2024-07-13 04:04:14 -04:00
Krzysztof Wolicki
30ef0ed054 Args including and after -- get passed to build runner directly 2024-07-13 00:02:46 -07:00
Andrew Kelley
1d20ff11d7
Merge pull request #20580 from ziglang/watch
introduce file system watching features to the zig build system
2024-07-12 16:56:17 -07:00
Andrew Kelley
f77b43dad3 zig build: add a --debug-target CLI flag
it's not advertised in the usage and only available in debug builds of
the compiler. Makes it easier to test changes to the build runner that
might affect targets differently.
2024-07-12 14:19:17 -07:00
Jacob Young
3ad81c40c0 Zcu: allow atomic operations on packed structs
Same validation rules as the backing integer would have.
2024-07-12 00:43:38 -07:00
Andrew Kelley
67e3e4989d Compilation: fix rebase conflict 2024-07-12 00:18:29 -07:00
Andrew Kelley
5a34e6c3e6 frontend: add file system inputs for incremental cache mode
These are also used for whole cache mode in the case that any compile
errors are emitted.
2024-07-12 00:15:11 -07:00
Andrew Kelley
a3c20dffae integrate Compile steps with file watching
Updates the build runner to unconditionally require a zig lib directory
parameter. This parameter is needed in order to correctly understand
file system inputs from zig compiler subprocesses, since they will refer
to "the zig lib directory", and the build runner needs to place file
system watches on directories in there.

The build runner's fanotify file watching implementation now accounts
for when two or more Cache.Path instances compare unequal but ultimately
refer to the same directory in the file system.

Breaking change: std.Build no longer has a zig_lib_dir field. Instead,
there is the Graph zig_lib_directory field, and individual Compile steps
can still have their zig lib directories overridden. I think this is
unlikely to break anyone's build in practice.

The compiler now sends a "file_system_inputs" message to the build
runner which shares the full set of files that were added to the cache
system with the build system, so that the build runner can watch
properly and redo the Compile step. This is implemented for whole cache
mode but not yet for incremental cache mode.
2024-07-12 00:14:08 -07:00
Andrew Kelley
d2bec8f92f delete dead CLI usage code from main.zig 2024-07-12 00:14:07 -07:00
Jacob Young
77810f2882 InternPool: fix optimization assertion failure 2024-07-10 22:56:12 -04:00
Jacob Young
c79d3e4aab Compilation: fix leak 2024-07-10 22:05:52 -04:00
Jacob Young
c2316c5228 InternPool: make global_error_set thread-safe 2024-07-10 21:39:55 -04:00
Jacob Young
98f3a262a7 InternPool: fix extra mutation races 2024-07-10 19:03:07 -04:00
Jacob Young
2c89f3b654 InternPool: make maps thread-safe 2024-07-10 19:02:55 -04:00
Jacob Young
afa66fa392 InternPool: make tracked_insts thread-safe 2024-07-10 14:42:50 -04:00
Jacob Young
f290b54f89 InternPool: make files more thread-safe 2024-07-10 11:20:08 -04:00
Jacob Young
8f292431b0 InternPool: fix undefined decl fully qualified name
This is now possible after moving `File.Index` to `*File` mapping into
intern pool.
2024-07-10 11:20:08 -04:00
Jacob Young
3d2dfbe828 InternPool: add FileIndex to *File mapping 2024-07-10 11:20:08 -04:00
mlugg
f93a10f664 Air: store param names directly instead of referencing Zir 2024-07-10 11:20:08 -04:00
Jacob Young
3aa48bf859 InternPool: fix race on struct flags 2024-07-10 11:10:49 -04:00
Jacob Young
9cf42b1036 InternPool: fix race on FuncInstance.branch_quota 2024-07-10 11:10:49 -04:00
Jacob Young
667b4f9054 Zcu: cache fully qualified name on Decl
This avoids needing to mutate the intern pool from backends.
2024-07-10 11:10:49 -04:00
Andrew Kelley
b3b923e51f
Merge pull request #20561 from jacobly0/debug-segfaults
debug: prevent segfaults on linux
2024-07-09 21:03:36 -04:00
Jacob Young
c5283eb49b InternPool: implement thread-safe allocated lists 2024-07-09 17:29:01 -04:00
mlugg
47846bc17c Zcu: fix passing exported decls with compile errors to the backend 2024-07-09 12:53:19 -04:00
Jacob Young
65ced4a334 Compilation: put supported codegen backends on a separate thread
(There are no supported backends.)
2024-07-08 11:00:38 -04:00
Jacob Young
c36e2bb980 InternPool: fix multi-thread build 2024-07-08 07:02:53 -04:00
Jacob Young
14192019ff InternPool: fix dumping of simple types 2024-07-07 23:45:33 -04:00
Jacob Young
1abc904075 InternPool: start documenting new thread-safe fields 2024-07-07 23:23:30 -04:00
Jacob Young
166402c16b bootstrap: fix build 2024-07-07 22:59:52 -04:00
Jacob Young
bdae01ab04 InternPool: implement and use thread-safe list for extra and limbs 2024-07-07 22:59:52 -04:00
Jacob Young
49b25475ad InternPool: remove usage of data with simple indices
This allows them to be atomically replaced.
2024-07-07 22:59:52 -04:00
Jacob Young
383cffbfae InternPool: temporarily disable multi-threaded behavior
This reduces the cost of the new data structure until the multi-threaded
behavior is actually used.
2024-07-07 22:59:52 -04:00
Jacob Young
92ddb959a7 InternPool: implement and use thread-safe list for items 2024-07-07 22:59:52 -04:00
Jacob Young
8293ff94cf InternPool: implement and use thread-safe list for strings 2024-07-07 22:59:52 -04:00
Jacob Young
3e1b190fe6 InternPool: replace garbage with an arena
This was just a badly implemented arena anyway.
2024-07-07 22:59:52 -04:00
Jacob Young
c8b9364b30 InternPool: use thread-safe hash map for strings 2024-07-07 22:59:52 -04:00
Jacob Young
cda716ecc4 InternPool: implement thread-safe hash map 2024-07-07 22:59:52 -04:00
Jacob Young
ca02266157 Zcu: pass PerThread to intern pool string functions 2024-07-07 22:59:52 -04:00
Jacob Young
525f341f33 Zcu: introduce PerThread and pass to all the functions 2024-07-07 22:59:52 -04:00
Andrew Kelley
74346b0f79 frontend: TrackedInst stores FileIndex instead of path digest
The purpose of using path digest was to reference a file in a
serializable manner. Now that there is a stable index associated with
files, it is a superior way to accomplish that goal, since removes one
layer of indirection, and makes TrackedInst 8 bytes instead of 20.

The saved Zig Compiler State file for "hello world" goes from 1.3M to
1.2M with this change.
2024-07-04 17:56:01 -07:00
Andrew Kelley
30ec43a6c7 Zcu: extract permanent state from File
Primarily, this commit removes 2 fields from File, relying on the data
being stored in the `files` field, with the key as the path digest, and
the value as the struct decl corresponding to the File. This table is
serialized into the compiler state that survives between incremental
updates.

Meanwhile, the File struct remains ephemeral data that can be
reconstructed the first time it is needed by the compiler process, as
well as operated on by independent worker threads.

A key outcome of this commit is that there is now a stable index that
can be used to refer to a File. This will be needed when serializing
error messages to survive incremental compilation updates.
2024-07-04 17:51:35 -07:00
Andrew Kelley
29512f0edd Compilation: don't give len=0 bufs to pwritev
The OS returns EFAULT for undefined pointers, even when len=0.
2024-07-04 17:12:45 -07:00
Andrew Kelley
790b8428a2
Merge pull request #20494 from mlugg/the-great-decl-split
refactors ad infinitum
2024-07-04 20:12:05 -04:00
Jakub Konka
d2cace58bd Compilation: rename tsan_static_lib to tsan_lib 2024-07-04 22:09:57 +02:00
Jakub Konka
e42e12dbbf tsan: fix wording in comments 2024-07-04 22:03:31 +02:00
mlugg
cda6f552d5
cbe: don't mark exported values/Decls as extern 2024-07-04 21:01:43 +01:00
mlugg
a5d5c097f5
Sema: add missing references 2024-07-04 21:01:42 +01:00