clover/llvm: Use device in llvm compilation instead of copying fields
Copying the individual fields from the device when compiling/linking will lead to an unnecessarily large number of fields getting passed around. v3: Rebase on current master v2: Use device in function args before making additional changes in following patches Signed-off-by: Aaron Watry <awatry@gmail.com> Reviewed-by: Jan Vesely <jan.vesely@rutgers.edu> Reviewed-by: Pierre Moreau <pierre.morrow@free.fr> Reviewed-by: Francisco Jerez <currojerez@riseup.net>
This commit is contained in:
parent
71b3d681d8
commit
dd81ca3883
|
@ -53,8 +53,8 @@ program::compile(const ref_vector<device> &devs, const std::string &opts,
|
||||||
try {
|
try {
|
||||||
const module m = (dev.ir_format() == PIPE_SHADER_IR_TGSI ?
|
const module m = (dev.ir_format() == PIPE_SHADER_IR_TGSI ?
|
||||||
tgsi::compile_program(_source, log) :
|
tgsi::compile_program(_source, log) :
|
||||||
llvm::compile_program(_source, headers,
|
llvm::compile_program(_source, headers, dev,
|
||||||
dev.ir_target(), opts, log));
|
opts, log));
|
||||||
_builds[&dev] = { m, opts, log };
|
_builds[&dev] = { m, opts, log };
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
_builds[&dev] = { module(), opts, log };
|
_builds[&dev] = { module(), opts, log };
|
||||||
|
@ -78,8 +78,7 @@ program::link(const ref_vector<device> &devs, const std::string &opts,
|
||||||
try {
|
try {
|
||||||
const module m = (dev.ir_format() == PIPE_SHADER_IR_TGSI ?
|
const module m = (dev.ir_format() == PIPE_SHADER_IR_TGSI ?
|
||||||
tgsi::link_program(ms) :
|
tgsi::link_program(ms) :
|
||||||
llvm::link_program(ms, dev.ir_format(),
|
llvm::link_program(ms, dev, opts, log));
|
||||||
dev.ir_target(), opts, log));
|
|
||||||
_builds[&dev] = { m, opts, log };
|
_builds[&dev] = { m, opts, log };
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
_builds[&dev] = { module(), opts, log };
|
_builds[&dev] = { module(), opts, log };
|
||||||
|
|
|
@ -201,17 +201,17 @@ namespace {
|
||||||
module
|
module
|
||||||
clover::llvm::compile_program(const std::string &source,
|
clover::llvm::compile_program(const std::string &source,
|
||||||
const header_map &headers,
|
const header_map &headers,
|
||||||
const std::string &target,
|
const device &dev,
|
||||||
const std::string &opts,
|
const std::string &opts,
|
||||||
std::string &r_log) {
|
std::string &r_log) {
|
||||||
if (has_flag(debug::clc))
|
if (has_flag(debug::clc))
|
||||||
debug::log(".cl", "// Options: " + opts + '\n' + source);
|
debug::log(".cl", "// Options: " + opts + '\n' + source);
|
||||||
|
|
||||||
auto ctx = create_context(r_log);
|
auto ctx = create_context(r_log);
|
||||||
auto c = create_compiler_instance(target, tokenize(opts + " input.cl"),
|
auto c = create_compiler_instance(dev.ir_target(),
|
||||||
r_log);
|
tokenize(opts + " input.cl"), r_log);
|
||||||
auto mod = compile(*ctx, *c, "input.cl", source, headers, target, opts,
|
auto mod = compile(*ctx, *c, "input.cl", source, headers, dev.ir_target(),
|
||||||
r_log);
|
opts, r_log);
|
||||||
|
|
||||||
if (has_flag(debug::llvm))
|
if (has_flag(debug::llvm))
|
||||||
debug::log(".ll", print_module_bitcode(*mod));
|
debug::log(".ll", print_module_bitcode(*mod));
|
||||||
|
@ -269,14 +269,14 @@ namespace {
|
||||||
|
|
||||||
module
|
module
|
||||||
clover::llvm::link_program(const std::vector<module> &modules,
|
clover::llvm::link_program(const std::vector<module> &modules,
|
||||||
enum pipe_shader_ir ir, const std::string &target,
|
const device &dev,
|
||||||
const std::string &opts, std::string &r_log) {
|
const std::string &opts, std::string &r_log) {
|
||||||
std::vector<std::string> options = tokenize(opts + " input.cl");
|
std::vector<std::string> options = tokenize(opts + " input.cl");
|
||||||
const bool create_library = count("-create-library", options);
|
const bool create_library = count("-create-library", options);
|
||||||
erase_if(equals("-create-library"), options);
|
erase_if(equals("-create-library"), options);
|
||||||
|
|
||||||
auto ctx = create_context(r_log);
|
auto ctx = create_context(r_log);
|
||||||
auto c = create_compiler_instance(target, options, r_log);
|
auto c = create_compiler_instance(dev.ir_target(), options, r_log);
|
||||||
auto mod = link(*ctx, *c, modules, r_log);
|
auto mod = link(*ctx, *c, modules, r_log);
|
||||||
|
|
||||||
optimize(*mod, c->getCodeGenOpts().OptimizationLevel, !create_library);
|
optimize(*mod, c->getCodeGenOpts().OptimizationLevel, !create_library);
|
||||||
|
@ -291,11 +291,11 @@ clover::llvm::link_program(const std::vector<module> &modules,
|
||||||
if (create_library) {
|
if (create_library) {
|
||||||
return build_module_library(*mod, module::section::text_library);
|
return build_module_library(*mod, module::section::text_library);
|
||||||
|
|
||||||
} else if (ir == PIPE_SHADER_IR_NATIVE) {
|
} else if (dev.ir_format() == PIPE_SHADER_IR_NATIVE) {
|
||||||
if (has_flag(debug::native))
|
if (has_flag(debug::native))
|
||||||
debug::log(id + ".asm", print_module_native(*mod, target));
|
debug::log(id + ".asm", print_module_native(*mod, dev.ir_target()));
|
||||||
|
|
||||||
return build_module_native(*mod, target, *c, r_log);
|
return build_module_native(*mod, dev.ir_target(), *c, r_log);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
unreachable("Unsupported IR.");
|
unreachable("Unsupported IR.");
|
||||||
|
|
|
@ -32,13 +32,12 @@ namespace clover {
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
module compile_program(const std::string &source,
|
module compile_program(const std::string &source,
|
||||||
const header_map &headers,
|
const header_map &headers,
|
||||||
const std::string &target,
|
const device &device,
|
||||||
const std::string &opts,
|
const std::string &opts,
|
||||||
std::string &r_log);
|
std::string &r_log);
|
||||||
|
|
||||||
module link_program(const std::vector<module> &modules,
|
module link_program(const std::vector<module> &modules,
|
||||||
enum pipe_shader_ir ir,
|
const device &device,
|
||||||
const std::string &target,
|
|
||||||
const std::string &opts,
|
const std::string &opts,
|
||||||
std::string &r_log);
|
std::string &r_log);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue