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);
	}
Exemplo n.º 3
0
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);
}