From 474f9050ce4ebcd76a99d691210615443fb1530c Mon Sep 17 00:00:00 2001 From: David Mak Date: Wed, 6 Sep 2023 18:49:58 +0800 Subject: [PATCH] standalone: Expose flags in command-line --- nac3standalone/src/main.rs | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/nac3standalone/src/main.rs b/nac3standalone/src/main.rs index d08baf3d7..149d8105f 100644 --- a/nac3standalone/src/main.rs +++ b/nac3standalone/src/main.rs @@ -41,6 +41,14 @@ struct CommandLineArgs { /// The number of threads allocated to processing the source file. #[arg(default_value_t = 1)] threads: u32, + + /// The level to optimize the LLVM IR. + #[arg(short = 'O', default_value_t = 2, value_parser = clap::value_parser!(u32).range(0..=3))] + opt_level: u32, + + /// Whether to emit LLVM IR at the end of every module. + #[arg(long, default_value_t = false)] + emit_llvm: bool, } fn handle_typevar_definition( @@ -169,7 +177,14 @@ fn handle_assignment_pattern( fn main() { let cli = CommandLineArgs::parse(); - let CommandLineArgs { file_name, threads } = cli; + let CommandLineArgs { file_name, threads, opt_level, emit_llvm } = cli; + let opt_level = match opt_level { + 0 => OptimizationLevel::None, + 1 => OptimizationLevel::Less, + 2 => OptimizationLevel::Default, + // The default behavior for -O where n>3 defaults to O3 for both Clang and GCC + _ => OptimizationLevel::Aggressive, + }; Target::initialize_all(&InitializationConfig::default()); @@ -256,8 +271,8 @@ fn main() { }; let llvm_options = CodeGenLLVMOptions { - opt_level: OptimizationLevel::Default, - emit_llvm: false, + opt_level, + emit_llvm, }; let task = CodeGenTask { subst: Default::default(), @@ -322,7 +337,7 @@ fn main() { &triple, "", "", - OptimizationLevel::Default, + opt_level, RelocMode::Default, CodeModel::Default, )