diff --git a/src/irgen.jl b/src/irgen.jl index b5311da3..8958b787 100644 --- a/src/irgen.jl +++ b/src/irgen.jl @@ -164,9 +164,9 @@ function compile_method_instance(job::CompilerJob, method_instance::Core.MethodI llvm_specfunc = LLVM.Function(llvm_specfunc_ref) # configure the module - triple!(llvm_mod, llvm_triple(job.target)) + triple!(llvm_mod, llvm_triple(NativeCompilerTarget())) if llvm_datalayout(job.target) !== nothing - datalayout!(llvm_mod, llvm_datalayout(job.target)) + datalayout!(llvm_mod, llvm_datalayout(NativeCompilerTarget())) end return llvm_specfunc, llvm_mod diff --git a/src/optim.jl b/src/optim.jl index df95e7ac..31a7b55f 100644 --- a/src/optim.jl +++ b/src/optim.jl @@ -1,11 +1,12 @@ # LLVM IR optimization function optimize!(job::CompilerJob, mod::LLVM.Module) - tm = llvm_machine(job.target) + # FIXME: Workaround for GCN + tm = Ref{TargetMachine}(llvm_machine(NativeCompilerTarget())) function initialize!(pm) add_library_info!(pm, triple(mod)) - add_transform_info!(pm, tm) + add_transform_info!(pm, tm[]) end global current_job @@ -40,6 +41,12 @@ function optimize!(job::CompilerJob, mod::LLVM.Module) run!(pm, mod) end + tm[] = llvm_machine(job.target) + triple!(mod, llvm_triple(job.target)) + if llvm_datalayout(job.target) !== nothing + datalayout!(mod, llvm_datalayout(job.target)) + end + # target-specific optimizations ModulePassManager() do pm initialize!(pm)