aboutsummaryrefslogtreecommitdiff
path: root/src/zig_llvm.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <andrew@ziglang.org>2021-12-27 01:14:50 -0700
committerAndrew Kelley <andrew@ziglang.org>2021-12-27 01:14:50 -0700
commitc8fb36b36cd8368e84752770edf720e6e91ed997 (patch)
treedb0821f54a28f552240d27becaf4b1538b613d2e /src/zig_llvm.cpp
parentf41b9cdb6d7f954495ffca168108ddd38bf27353 (diff)
downloadzig-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/zig_llvm.cpp')
0 files changed, 0 insertions, 0 deletions