Commit e585103306

Alex Rønne Petersen <alex@alexrp.com>
2024-08-28 03:03:12
llvm: Disable FastISel on MIPS as a workaround for #21215.
Until llvm/llvm-project#106231 trickles down.
1 parent 7d9edff
Changed files (4)
src/codegen/llvm/bindings.zig
@@ -91,6 +91,7 @@ pub const TargetMachine = opaque {
         tsan: bool,
         sancov: bool,
         lto: bool,
+        allow_fast_isel: bool,
         asm_filename: ?[*:0]const u8,
         bin_filename: ?[*:0]const u8,
         llvm_ir_filename: ?[*:0]const u8,
src/codegen/llvm.zig
@@ -1280,6 +1280,8 @@ pub const Object = struct {
             .tsan = options.sanitize_thread,
             .sancov = options.fuzz,
             .lto = options.lto,
+            // https://github.com/ziglang/zig/issues/21215
+            .allow_fast_isel = !comp.root_mod.resolved_target.result.cpu.arch.isMIPS(),
             .asm_filename = null,
             .bin_filename = options.bin_path,
             .llvm_ir_filename = options.post_ir_path,
src/zig_llvm.cpp
@@ -258,7 +258,6 @@ ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machi
                               options.bin_filename? options.bin_filename : options.asm_filename);
 
     TargetMachine &target_machine = *reinterpret_cast<TargetMachine*>(targ_machine_ref);
-    target_machine.setO0WantsFastISel(true);
 
     Module &llvm_module = *unwrap(module_ref);
 
@@ -369,6 +368,12 @@ ZIG_EXTERN_C bool ZigLLVMTargetMachineEmitToFile(LLVMTargetMachineRef targ_machi
         }
     }
 
+    if (options.allow_fast_isel) {
+        target_machine.setO0WantsFastISel(true);
+    } else {
+        target_machine.setFastISel(false);
+    }
+
     // Optimization phase
     module_pm.run(llvm_module, module_am);
 
src/zig_llvm.h
@@ -59,6 +59,7 @@ struct ZigLLVMEmitOptions {
     bool tsan;
     bool sancov;
     bool lto;
+    bool allow_fast_isel;
     const char *asm_filename;
     const char *bin_filename;
     const char *llvm_ir_filename;