diff options
| author | Andrew Kelley <andrew@ziglang.org> | 2021-12-27 01:14:50 -0700 |
|---|---|---|
| committer | Andrew Kelley <andrew@ziglang.org> | 2021-12-27 01:14:50 -0700 |
| commit | c8fb36b36cd8368e84752770edf720e6e91ed997 (patch) | |
| tree | db0821f54a28f552240d27becaf4b1538b613d2e /src/codegen/spirv.zig | |
| parent | f41b9cdb6d7f954495ffca168108ddd38bf27353 (diff) | |
| download | zig-c8fb36b36cd8368e84752770edf720e6e91ed997.tar.gz zig-c8fb36b36cd8368e84752770edf720e6e91ed997.zip | |
stage2: LLVM backend: implement `@tagName` for enums
Introduced a new AIR instruction: `tag_name`. Reasons to do this
instead of lowering it in Sema to a switch, function call, array
lookup, or if-else tower:
* Sema is a bottleneck; do less work in Sema whenever possible.
* If any optimization passes run, and the operand to becomes
comptime-known, then it could change to have a comptime result
value instead of lowering to a function or array or something which
would then have to be garbage-collected.
* Backends may want to choose to use a function and a switch branch,
or they may want to use a different strategy.
Codegen for `@tagName` is implemented for the LLVM backend but not any
others yet.
Introduced some new `Type` tags:
* `const_slice_u8_sentinel_0`
* `manyptr_const_u8_sentinel_0`
The motivation for this was to make typeof() on the tag_name AIR
instruction non-allocating.
A bunch more enum tests are passing now.
Diffstat (limited to 'src/codegen/spirv.zig')
0 files changed, 0 insertions, 0 deletions
