decuda 0.1.1

CUDA to HIP, SYCL, OpenCL, and Rust GPU migration tool — automatic source-code translator for porting CUDA C++ kernels to AMD ROCm HIP, Intel oneAPI SYCL, Khronos OpenCL, and Rust GPU (cust / rust-gpu)
Documentation
use std::fs;

use decuda::parser;

fn main() {
    let path = std::env::args_os()
        .nth(1)
        .map(std::path::PathBuf::from)
        .unwrap_or_else(|| {
            std::path::PathBuf::from(concat!(
                env!("CARGO_MANIFEST_DIR"),
                "/examples/cu/saxpy.cu"
            ))
        });
    let src = fs::read_to_string(&path).unwrap();
    let u = parser::translate_source(src.clone(), path);
    println!("--- IR nodes ({} total) ---", u.nodes.len());
    for n in &u.nodes {
        println!(
            "{:>5}-{:<5} {:>14} surface: {:?}",
            n.start(),
            n.end(),
            n.kind_label(),
            surface(n, &src)
        );
    }
}

fn surface(n: &decuda::ir::IrNode, src: &str) -> String {
    let s = n.start();
    let e = n.end().min(src.len());
    if s > src.len() {
        return "<OOB>".into();
    }
    let raw = &src[s..e];
    raw.chars().take(40).collect::<String>() + if raw.len() > 40 { "" } else { "" }
}