nac3artiq: demote global value to private

... except typeinfo & now symbols.
typeinfo will be read by the runtime linker; now is for now-pinning.
This commit is contained in:
occheung 2022-05-27 10:41:34 +08:00
parent b04631e935
commit 2584776b6e
1 changed files with 14 additions and 0 deletions

View File

@ -6,6 +6,7 @@ use std::sync::Arc;
use inkwell::{
memory_buffer::MemoryBuffer,
module::Linkage,
passes::{PassManager, PassManagerBuilder},
targets::*,
OptimizationLevel,
@ -822,6 +823,19 @@ impl Nac3 {
function_iter = func.get_next_function();
}
// Demote all global variables that will not be referenced in the kernel to private
let preserved_symbols: Vec<&'static [u8]> = vec![
b"typeinfo",
b"now",
];
let mut global_option = main.get_first_global();
while let Some(global) = global_option {
if !preserved_symbols.contains(&(global.get_name().to_bytes())) {
global.set_linkage(Linkage::Private);
}
global_option = global.get_next_global();
}
let builder = PassManagerBuilder::create();
builder.set_optimization_level(OptimizationLevel::Aggressive);
let passes = PassManager::create(());