use serde::Deserialize;
use serde::Serialize;
use crate::target_machine::TargetMachine;
use self::settings::Settings;
pub mod settings;
#[derive(Debug, Serialize, Deserialize)]
pub struct Optimizer {
settings: Settings,
}
impl Optimizer {
pub fn new(settings: Settings) -> Self {
Self { settings }
}
pub fn run(
&self,
target_machine: &TargetMachine,
module: &inkwell::module::Module,
) -> Result<(), inkwell::support::LLVMString> {
target_machine.run_optimization_passes(
module,
format!("default<O{}>", self.settings.middle_end_as_string()).as_str(),
)
}
pub fn settings(&self) -> &Settings {
&self.settings
}
}