bool radv_compile_to_binary(struct ac_llvm_compiler *info, LLVMModuleRef module, struct ac_shader_binary *binary) { radv_llvm_per_thread_info *thread_info = nullptr; for (auto &I : radv_llvm_per_thread_list) { if (I.llvm_info.tm == info->tm) { thread_info = &I; break; } } if (!thread_info) { struct ac_compiler_passes *passes = ac_create_llvm_passes(info->tm); bool ret = ac_compile_module_to_binary(passes, module, binary); ac_destroy_llvm_passes(passes); return ret; } return thread_info->compile_to_memory_buffer(module, binary); }
~radv_llvm_per_thread_info() { ac_destroy_llvm_passes(passes); ac_destroy_llvm_compiler(&llvm_info); }
static void si_destroy_compiler(struct ac_llvm_compiler *compiler) { ac_destroy_llvm_passes(compiler->passes); ac_destroy_llvm_passes(compiler->low_opt_passes); ac_destroy_llvm_compiler(compiler); }