# stage2: LLVM backend: implement \`@tagName\` for enums · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/c8fb36b36cd8368e84752770edf720e6e91ed997)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: c8fb36b36cd8368e84752770edf720e6e91ed997

Requested commit: c8fb36b36cd8368e84752770edf720e6e91ed997

Commit: c8fb36b36cd8368e84752770edf720e6e91ed997

Tree: db0821f54a28f552240d27becaf4b1538b613d2e

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
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.

```

## Parents

- [f41b9cdb6d7f954495ffca168108ddd38bf27353](https://git.cafe/gitcafe/zig/commit/f41b9cdb6d7f954495ffca168108ddd38bf27353?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/c8fb36b36cd8368e84752770edf720e6e91ed997?format=markdown)
