Skip to main content

vyre_runtime/megakernel/
ir_util.rs

1//! Shared IR fragments used by megakernel builders and schedulers.
2
3use vyre_foundation::ir::{Expr, Node};
4
5/// Emits a relaxed atomic load.
6///
7/// target-text atomics are implicitly relaxed; explicit acquire/release ordering is
8/// modeled by surrounding synchronization nodes, not by the atomic expression.
9pub fn atomic_load_relaxed(buffer: &str, index: Expr) -> Expr {
10    Expr::atomic_add(buffer, index, Expr::u32(0))
11}
12
13/// Emits a relaxed atomic store.
14///
15/// The returned node binds the previous value so callers can splice the store
16/// into expression-only IR regions without losing the exchange result.
17pub fn atomic_store_relaxed(name: &str, buffer: &str, index: Expr, value: Expr) -> Node {
18    Node::let_bind(name, Expr::atomic_exchange(buffer, index, value))
19}