1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use llvm_sys::core::*;

use crate::opaque::Opaque;
use crate::type_tag::*;
use crate::*;

impl<T: TypeTag> Value<T> {
    pub fn get_first_use(&self) -> Option<&Use> {
        unsafe { Use::from_ptr(LLVMGetFirstUse(self.as_raw())) }
    }
}

impl Use {
    pub fn get_next_use(&self) -> Option<&Use> {
        unsafe { Use::from_ptr(LLVMGetNextUse(self.as_raw())) }
    }

    pub fn get_user(&self) -> &Value<any> {
        unsafe { Value::from_raw(LLVMGetUser(self.as_raw())) }
    }

    pub fn get_used_value(&self) -> &Value<any> {
        unsafe { Value::from_raw(LLVMGetUsedValue(self.as_raw())) }
    }
}