DCE unused functions everywhere

This commit is contained in:
Folkert 2020-11-23 02:15:40 +01:00
parent 58246ad572
commit b6433f872a
3 changed files with 22 additions and 2 deletions

View file

@ -170,12 +170,12 @@ pub fn gen_from_mono_module(
.expect("Writing .o file failed");
}
struct FunctionIterator<'ctx> {
pub struct FunctionIterator<'ctx> {
next: Option<FunctionValue<'ctx>>,
}
impl<'ctx> FunctionIterator<'ctx> {
fn from_module(module: &inkwell::module::Module<'ctx>) -> Self {
pub fn from_module(module: &inkwell::module::Module<'ctx>) -> Self {
Self {
next: module.get_first_function(),
}

View file

@ -1,5 +1,6 @@
use libloading::Library;
use roc_build::link::module_to_dylib;
use roc_build::program::FunctionIterator;
use roc_collections::all::{MutMap, MutSet};
fn promote_expr_to_module(src: &str) -> String {
@ -154,6 +155,15 @@ pub fn helper<'a>(
let (dibuilder, compile_unit) = roc_gen::llvm::build::Env::new_debug_info(module);
// mark our zig-defined builtins as internal
use inkwell::module::Linkage;
for function in FunctionIterator::from_module(module) {
let name = function.get_name().to_str().unwrap();
if name.starts_with("roc_builtins") {
function.set_linkage(Linkage::Internal);
}
}
// Compile and add all the Procs before adding main
let env = roc_gen::llvm::build::Env {
arena: &arena,