ac/radv: split the non-common init_once code from the common target code. (v2)
This just splits out the non-shared code and reuses ac_get_llvm_target in radv. v2: rebase on Marek's patch - fixup brace position/whitespace Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
@@ -57,13 +57,16 @@ static void ac_init_llvm_target()
|
|||||||
|
|
||||||
static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;
|
static once_flag ac_init_llvm_target_once_flag = ONCE_FLAG_INIT;
|
||||||
|
|
||||||
|
void ac_init_llvm_once(void)
|
||||||
|
{
|
||||||
|
call_once(&ac_init_llvm_target_once_flag, ac_init_llvm_target);
|
||||||
|
}
|
||||||
|
|
||||||
LLVMTargetRef ac_get_llvm_target(const char *triple)
|
LLVMTargetRef ac_get_llvm_target(const char *triple)
|
||||||
{
|
{
|
||||||
LLVMTargetRef target = NULL;
|
LLVMTargetRef target = NULL;
|
||||||
char *err_message = NULL;
|
char *err_message = NULL;
|
||||||
|
|
||||||
call_once(&ac_init_llvm_target_once_flag, ac_init_llvm_target);
|
|
||||||
|
|
||||||
if (LLVMGetTargetFromTriple(triple, &target, &err_message)) {
|
if (LLVMGetTargetFromTriple(triple, &target, &err_message)) {
|
||||||
fprintf(stderr, "Cannot find target for triple %s ", triple);
|
fprintf(stderr, "Cannot find target for triple %s ", triple);
|
||||||
if (err_message) {
|
if (err_message) {
|
||||||
|
@@ -111,6 +111,8 @@ ac_get_store_intr_attribs(bool writeonly_memory)
|
|||||||
unsigned
|
unsigned
|
||||||
ac_count_scratch_private_memory(LLVMValueRef function);
|
ac_count_scratch_private_memory(LLVMValueRef function);
|
||||||
|
|
||||||
|
void ac_init_llvm_once(void);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -521,22 +521,9 @@ static void radv_init_llvm_target()
|
|||||||
|
|
||||||
static once_flag radv_init_llvm_target_once_flag = ONCE_FLAG_INIT;
|
static once_flag radv_init_llvm_target_once_flag = ONCE_FLAG_INIT;
|
||||||
|
|
||||||
static LLVMTargetRef radv_get_llvm_target(const char *triple)
|
static void radv_init_llvm_once(void)
|
||||||
{
|
{
|
||||||
LLVMTargetRef target = NULL;
|
|
||||||
char *err_message = NULL;
|
|
||||||
|
|
||||||
call_once(&radv_init_llvm_target_once_flag, radv_init_llvm_target);
|
call_once(&radv_init_llvm_target_once_flag, radv_init_llvm_target);
|
||||||
|
|
||||||
if (LLVMGetTargetFromTriple(triple, &target, &err_message)) {
|
|
||||||
fprintf(stderr, "Cannot find target for triple %s ", triple);
|
|
||||||
if (err_message) {
|
|
||||||
fprintf(stderr, "%s\n", err_message);
|
|
||||||
}
|
|
||||||
LLVMDisposeMessage(err_message);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return target;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static LLVMTargetMachineRef radv_create_target_machine(enum radeon_family family,
|
static LLVMTargetMachineRef radv_create_target_machine(enum radeon_family family,
|
||||||
@@ -546,7 +533,7 @@ static LLVMTargetMachineRef radv_create_target_machine(enum radeon_family family
|
|||||||
assert(family >= CHIP_TAHITI);
|
assert(family >= CHIP_TAHITI);
|
||||||
char features[256];
|
char features[256];
|
||||||
const char *triple = (tm_options & AC_TM_SUPPORTS_SPILL) ? "amdgcn-mesa-mesa3d" : "amdgcn--";
|
const char *triple = (tm_options & AC_TM_SUPPORTS_SPILL) ? "amdgcn-mesa-mesa3d" : "amdgcn--";
|
||||||
LLVMTargetRef target = radv_get_llvm_target(triple);
|
LLVMTargetRef target = ac_get_llvm_target(triple);
|
||||||
|
|
||||||
snprintf(features, sizeof(features),
|
snprintf(features, sizeof(features),
|
||||||
"+DumpCode,+vgpr-spilling,-fp32-denormals,+fp64-denormals%s%s%s%s",
|
"+DumpCode,+vgpr-spilling,-fp32-denormals,+fp64-denormals%s%s%s%s",
|
||||||
@@ -604,8 +591,9 @@ shader_variant_create(struct radv_device *device,
|
|||||||
tm_options |= AC_TM_SUPPORTS_SPILL;
|
tm_options |= AC_TM_SUPPORTS_SPILL;
|
||||||
if (device->instance->perftest_flags & RADV_PERFTEST_SISCHED)
|
if (device->instance->perftest_flags & RADV_PERFTEST_SISCHED)
|
||||||
tm_options |= AC_TM_SISCHED;
|
tm_options |= AC_TM_SISCHED;
|
||||||
tm = radv_create_target_machine(chip_family, tm_options, NULL);
|
|
||||||
|
|
||||||
|
radv_init_llvm_once();
|
||||||
|
tm = radv_create_target_machine(chip_family, tm_options, NULL);
|
||||||
if (gs_copy_shader) {
|
if (gs_copy_shader) {
|
||||||
assert(shader_count == 1);
|
assert(shader_count == 1);
|
||||||
radv_compile_gs_copy_shader(tm, *shaders, &binary,
|
radv_compile_gs_copy_shader(tm, *shaders, &binary,
|
||||||
|
@@ -120,6 +120,7 @@ static void si_init_compiler(struct si_screen *sscreen,
|
|||||||
(!sscreen->llvm_has_working_vgpr_indexing ? AC_TM_PROMOTE_ALLOCA_TO_SCRATCH : 0);
|
(!sscreen->llvm_has_working_vgpr_indexing ? AC_TM_PROMOTE_ALLOCA_TO_SCRATCH : 0);
|
||||||
|
|
||||||
const char *triple;
|
const char *triple;
|
||||||
|
ac_init_llvm_once();
|
||||||
compiler->tm = ac_create_target_machine(sscreen->info.family,
|
compiler->tm = ac_create_target_machine(sscreen->info.family,
|
||||||
tm_options, &triple);
|
tm_options, &triple);
|
||||||
if (!compiler->tm)
|
if (!compiler->tm)
|
||||||
|
Reference in New Issue
Block a user