# stage2: implement cmpxchg and improve comptime eval · gitcafe/zig

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

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

Visibility: public

Requested revision: 0395b35cee8d4082cc40b0dcd0298f797f42309d

Requested commit: 0395b35cee8d4082cc40b0dcd0298f797f42309d

Commit: 0395b35cee8d4082cc40b0dcd0298f797f42309d

Tree: c4592f4e4cdb555836bb422d485b2c134e3f7547

Author: Andrew Kelley

Committer: Andrew Kelley

## Message

```
stage2: implement cmpxchg and improve comptime eval

 * Implement Sema for `@cmpxchgWeak` and `@cmpxchgStrong`. Both runtime
   and comptime codepaths are implement.
 * Implement Codegen for LLVM backend and C backend.
 * Add LazySrcLoc.node_offset_builtin_call_argX 3...5
 * Sema: rework comptime control flow.
   - `error.ComptimeReturn` is used to signal that a comptime function
     call has returned a result (stored in the Inlining struct).
     `analyzeCall` notices this and handles the result.
   - The ZIR instructions `break_inline`, `block_inline`,
     `condbr_inline` are now redundant and can be deleted. `break`,
     `block`, and `condbr` function equivalently inside a comptime scope.
   - The ZIR instructions `loop` and `repeat` also are modified to
     directly perform comptime control flow inside a comptime scope,
     skipping an unnecessary mechanism for analysis of runtime code.
     This makes Zig perform closer to an interpreter when evaluating
     comptime code.
 * Sema: zirRetErrValue looks at Sema.ret_fn_ty rather than sema.func
   for adding to the inferred error set. This fixes a bug for
    inlined/comptime function calls.
 * Implement ZIR printing for cmpxchg.
 * stage1: make cmpxchg respect --single-threaded
   - Our LLVM C++ API wrapper failed to expose this boolean flag before.
 * Fix AIR printing for struct fields showing incorrect liveness data.

```

## Parents

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

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