commit e585103306f5b69a62c71e8462dc78a8ef2da9f9 (tree)
parent 7d9edff11d4c0dd6793bfd4bb2d7e3c2d32c88cd
Author: Alex Rønne Petersen <alex@alexrp.com>
Date: Wed, 28 Aug 2024 03:03:12 +0200
llvm: Disable FastISel on MIPS as a workaround for #21215.
Until llvm/llvm-project#106231 trickles down.
Diffstat:
4 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/codegen/llvm.zig b/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,
diff --git a/src/codegen/llvm/bindings.zig b/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,
diff --git a/src/zig_llvm.cpp b/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);
diff --git a/src/zig_llvm.h b/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;