rustc_codegen_llvm/llvm/
enzyme_ffi.rs

1#![allow(non_camel_case_types)]
2#![expect(dead_code)]
3
4use libc::{c_char, c_uint};
5
6use super::ffi::{BasicBlock, Metadata, Module, Type, Value};
7use crate::llvm::Bool;
8
9#[link(name = "llvm-wrapper", kind = "static")]
10extern "C" {
11    // Enzyme
12    pub(crate) fn LLVMRustHasMetadata(I: &Value, KindID: c_uint) -> bool;
13    pub(crate) fn LLVMRustEraseInstUntilInclusive(BB: &BasicBlock, I: &Value);
14    pub(crate) fn LLVMRustGetLastInstruction<'a>(BB: &BasicBlock) -> Option<&'a Value>;
15    pub(crate) fn LLVMRustDIGetInstMetadata(I: &Value) -> Option<&Metadata>;
16    pub(crate) fn LLVMRustEraseInstFromParent(V: &Value);
17    pub(crate) fn LLVMRustGetTerminator<'a>(B: &BasicBlock) -> &'a Value;
18    pub(crate) fn LLVMRustVerifyFunction(V: &Value, action: LLVMRustVerifierFailureAction) -> Bool;
19}
20
21extern "C" {
22    // Enzyme
23    pub(crate) fn LLVMDumpModule(M: &Module);
24    pub(crate) fn LLVMDumpValue(V: &Value);
25    pub(crate) fn LLVMGetFunctionCallConv(F: &Value) -> c_uint;
26    pub(crate) fn LLVMGetReturnType(T: &Type) -> &Type;
27    pub(crate) fn LLVMGetParams(Fnc: &Value, parms: *mut &Value);
28    pub(crate) fn LLVMGetNamedFunction(M: &Module, Name: *const c_char) -> Option<&Value>;
29}
30
31#[repr(C)]
32#[derive(Copy, Clone, PartialEq)]
33pub enum LLVMRustVerifierFailureAction {
34    LLVMAbortProcessAction = 0,
35    LLVMPrintMessageAction = 1,
36    LLVMReturnStatusAction = 2,
37}