-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathhello_world.rs
35 lines (32 loc) · 1.08 KB
/
hello_world.rs
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
26
27
28
29
30
31
32
33
34
35
// See https://github.com/banach-space/llvm-tutor/blob/main/HelloWorld/HelloWorld.cpp
// for a more detailed explanation.
use llvm_plugin::inkwell::values::FunctionValue;
use llvm_plugin::{
FunctionAnalysisManager, LlvmFunctionPass, PassBuilder, PipelineParsing, PreservedAnalyses,
};
#[llvm_plugin::plugin(name = "HelloWorld", version = "0.1")]
fn plugin_registrar(builder: &mut PassBuilder) {
builder.add_function_pipeline_parsing_callback(|name, manager| {
if name == "hello-world" {
manager.add_pass(HelloWorldPass);
PipelineParsing::Parsed
} else {
PipelineParsing::NotParsed
}
});
}
struct HelloWorldPass;
impl LlvmFunctionPass for HelloWorldPass {
fn run_pass(
&self,
function: &mut FunctionValue,
_manager: &FunctionAnalysisManager,
) -> PreservedAnalyses {
eprintln!("(llvm-tutor) Hello from: {:?}", function.get_name());
eprintln!(
"(llvm-tutor) number of arguments: {}",
function.count_params()
);
PreservedAnalyses::All
}
}