module clover::compile_program_llvm(const compat::string &source, enum pipe_shader_ir ir, const compat::string &target, const compat::string &opts) { std::vector<llvm::Function *> kernels; size_t processor_str_len = std::string(target.begin()).find_first_of("-"); std::string processor(target.begin(), 0, processor_str_len); std::string triple(target.begin(), processor_str_len + 1, target.size() - processor_str_len - 1); // The input file name must have the .cl extension in order for the // CompilerInvocation class to recognize it as an OpenCL source file. llvm::Module *mod = compile(source, "input.cl", triple, processor, opts); find_kernels(mod, kernels); link(mod, triple, processor, kernels); // Build the clover::module switch (ir) { case PIPE_SHADER_IR_TGSI: //XXX: Handle TGSI assert(0); return module(); default: return build_module_llvm(mod, kernels); } }
module clover::compile_program_tgsi(const compat::string &source) { const char *body = source.find("COMP\n"); module m; read_header({ source.begin(), body }, m); read_body(body, m); return m; }