Browse Source

Add internal flag

`-internal-fast-isel`
gingerBill 11 months ago
parent
commit
0dddd2b97e
3 changed files with 11 additions and 0 deletions
  1. 1 0
      src/build_settings.cpp
  2. 5 0
      src/llvm_backend.cpp
  3. 5 0
      src/main.cpp

+ 1 - 0
src/build_settings.cpp

@@ -430,6 +430,7 @@ struct BuildContext {
 	bool   json_errors;
 	bool   json_errors;
 	bool   has_ansi_terminal_colours;
 	bool   has_ansi_terminal_colours;
 
 
+	bool   fast_isel;
 	bool   ignore_lazy;
 	bool   ignore_lazy;
 	bool   ignore_llvm_build;
 	bool   ignore_llvm_build;
 	bool   ignore_panic;
 	bool   ignore_panic;

+ 5 - 0
src/llvm_backend.cpp

@@ -3081,6 +3081,11 @@ gb_internal bool lb_generate_code(lbGenerator *gen) {
 		lbModule *m = entry.value;
 		lbModule *m = entry.value;
 		m->target_machine = target_machine;
 		m->target_machine = target_machine;
 		LLVMSetModuleDataLayout(m->mod, LLVMCreateTargetDataLayout(target_machine));
 		LLVMSetModuleDataLayout(m->mod, LLVMCreateTargetDataLayout(target_machine));
+
+		if (build_context.fast_isel) {
+			LLVMSetTargetMachineFastISel(m->target_machine, true);
+		}
+
 		array_add(&target_machines, target_machine);
 		array_add(&target_machines, target_machine);
 	}
 	}
 
 

+ 5 - 0
src/main.cpp

@@ -389,6 +389,7 @@ enum BuildFlagKind {
 	BuildFlag_PrintLinkerFlags,
 	BuildFlag_PrintLinkerFlags,
 
 
 	// internal use only
 	// internal use only
+	BuildFlag_InternalFastISel,
 	BuildFlag_InternalIgnoreLazy,
 	BuildFlag_InternalIgnoreLazy,
 	BuildFlag_InternalIgnoreLLVMBuild,
 	BuildFlag_InternalIgnoreLLVMBuild,
 	BuildFlag_InternalIgnorePanic,
 	BuildFlag_InternalIgnorePanic,
@@ -594,6 +595,7 @@ gb_internal bool parse_build_flags(Array<String> args) {
 
 
 	add_flag(&build_flags, BuildFlag_PrintLinkerFlags,        str_lit("print-linker-flags"),        BuildFlagParam_None,    Command_build);
 	add_flag(&build_flags, BuildFlag_PrintLinkerFlags,        str_lit("print-linker-flags"),        BuildFlagParam_None,    Command_build);
 
 
+	add_flag(&build_flags, BuildFlag_InternalFastISel,        str_lit("internal-fast-isel"),        BuildFlagParam_None,    Command_all);
 	add_flag(&build_flags, BuildFlag_InternalIgnoreLazy,      str_lit("internal-ignore-lazy"),      BuildFlagParam_None,    Command_all);
 	add_flag(&build_flags, BuildFlag_InternalIgnoreLazy,      str_lit("internal-ignore-lazy"),      BuildFlagParam_None,    Command_all);
 	add_flag(&build_flags, BuildFlag_InternalIgnoreLLVMBuild, str_lit("internal-ignore-llvm-build"),BuildFlagParam_None,    Command_all);
 	add_flag(&build_flags, BuildFlag_InternalIgnoreLLVMBuild, str_lit("internal-ignore-llvm-build"),BuildFlagParam_None,    Command_all);
 	add_flag(&build_flags, BuildFlag_InternalIgnorePanic,     str_lit("internal-ignore-panic"),     BuildFlagParam_None,    Command_all);
 	add_flag(&build_flags, BuildFlag_InternalIgnorePanic,     str_lit("internal-ignore-panic"),     BuildFlagParam_None,    Command_all);
@@ -1408,6 +1410,9 @@ gb_internal bool parse_build_flags(Array<String> args) {
 							build_context.print_linker_flags = true;
 							build_context.print_linker_flags = true;
 							break;
 							break;
 
 
+						case BuildFlag_InternalFastISel:
+							build_context.fast_isel = true;
+							break;
 						case BuildFlag_InternalIgnoreLazy:
 						case BuildFlag_InternalIgnoreLazy:
 							build_context.ignore_lazy = true;
 							build_context.ignore_lazy = true;
 							break;
 							break;