zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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:
Msrc/codegen/llvm.zig | 2++
Msrc/codegen/llvm/bindings.zig | 1+
Msrc/zig_llvm.cpp | 7++++++-
Msrc/zig_llvm.h | 1+
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;