vyre 0.4.0

GPU compute intermediate representation with a standard operation library
Documentation
use super::collect_expr_atomics;
use crate::ir::model::node::Node;
use std::collections::HashSet;

#[inline]
pub fn collect_node_atomics(node: &Node, buffers: &mut HashSet<String>) {
    match node {
        Node::Let { value, .. } | Node::Assign { value, .. } => {
            collect_expr_atomics(value, buffers);
        }
        Node::Store { index, value, .. } => {
            collect_expr_atomics(index, buffers);
            collect_expr_atomics(value, buffers);
        }
        Node::If {
            cond,
            then,
            otherwise,
        } => {
            collect_expr_atomics(cond, buffers);
            for node in then.iter().chain(otherwise.iter()) {
                collect_node_atomics(node, buffers);
            }
        }
        Node::Loop { from, to, body, .. } => {
            collect_expr_atomics(from, buffers);
            collect_expr_atomics(to, buffers);
            for node in body {
                collect_node_atomics(node, buffers);
            }
        }
        Node::Block(nodes) => {
            for node in nodes {
                collect_node_atomics(node, buffers);
            }
        }
        Node::Return | Node::Barrier => {}
    }
}