summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimur Kristóf <timur.kristof@gmail.com>2019-09-21 17:58:08 +0200
committerTimur Kristóf <timur.kristof@gmail.com>2019-10-10 09:57:52 +0200
commita01d796de4096331a6950699d4ac66a3f3b91ef3 (patch)
treec397fc15377d311e27e63e80a303eb52dbc744ab
parentfa41a51891e5a207da831fa7c4564a413159f221 (diff)
aco: Set +wavefrontsize64 for LLVM disassembler in GFX10 wave64 mode.
Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
-rw-r--r--src/amd/compiler/aco_instruction_selection_setup.cpp1
-rw-r--r--src/amd/compiler/aco_interface.cpp2
-rw-r--r--src/amd/compiler/aco_ir.h5
-rw-r--r--src/amd/compiler/aco_print_asm.cpp14
4 files changed, 15 insertions, 7 deletions
diff --git a/src/amd/compiler/aco_instruction_selection_setup.cpp b/src/amd/compiler/aco_instruction_selection_setup.cpp
index 7505707d4bb..06c697ccdc4 100644
--- a/src/amd/compiler/aco_instruction_selection_setup.cpp
+++ b/src/amd/compiler/aco_instruction_selection_setup.cpp
@@ -1241,6 +1241,7 @@ setup_isel_context(Program* program,
program->info = info;
program->chip_class = options->chip_class;
program->family = options->family;
+ program->wave_size = options->wave_size;
program->sgpr_limit = options->chip_class >= GFX8 ? 102 : 104;
if (options->family == CHIP_TONGA || options->family == CHIP_ICELAND)
program->sgpr_limit = 94; /* workaround hardware bug */
diff --git a/src/amd/compiler/aco_interface.cpp b/src/amd/compiler/aco_interface.cpp
index 79dd33385dc..ad18101eb8e 100644
--- a/src/amd/compiler/aco_interface.cpp
+++ b/src/amd/compiler/aco_interface.cpp
@@ -147,7 +147,7 @@ void aco_compile_shader(unsigned shader_count,
std::string disasm;
if (get_disasm) {
std::ostringstream stream;
- aco::print_asm(program.get(), code, exec_size / 4u, options->family, stream);
+ aco::print_asm(program.get(), code, exec_size / 4u, stream);
stream << '\0';
disasm = stream.str();
size += disasm.size();
diff --git a/src/amd/compiler/aco_ir.h b/src/amd/compiler/aco_ir.h
index 24ff6a2b142..ac2bfebbcf0 100644
--- a/src/amd/compiler/aco_ir.h
+++ b/src/amd/compiler/aco_ir.h
@@ -1069,6 +1069,7 @@ public:
struct radv_shader_info *info;
enum chip_class chip_class;
enum radeon_family family;
+ unsigned wave_size;
Stage stage; /* Stage */
bool needs_exact = false; /* there exists an instruction with disable_wqm = true */
bool needs_wqm = false; /* there exists a p_wqm instruction */
@@ -1141,8 +1142,8 @@ void spill(Program* program, live& live_vars, const struct radv_nir_compiler_opt
void insert_wait_states(Program* program);
void insert_NOPs(Program* program);
unsigned emit_program(Program* program, std::vector<uint32_t>& code);
-void print_asm(Program *program, std::vector<uint32_t>& binary, unsigned exec_size,
- enum radeon_family family, std::ostream& out);
+void print_asm(Program *program, std::vector<uint32_t>& binary,
+ unsigned exec_size, std::ostream& out);
void validate(Program* program, FILE *output);
bool validate_ra(Program* program, const struct radv_nir_compiler_options *options, FILE *output);
#ifndef NDEBUG
diff --git a/src/amd/compiler/aco_print_asm.cpp b/src/amd/compiler/aco_print_asm.cpp
index d3f4c3cb40d..deb15a8b256 100644
--- a/src/amd/compiler/aco_print_asm.cpp
+++ b/src/amd/compiler/aco_print_asm.cpp
@@ -9,7 +9,7 @@
namespace aco {
void print_asm(Program *program, std::vector<uint32_t>& binary,
- unsigned exec_size, enum radeon_family family, std::ostream& out)
+ unsigned exec_size, std::ostream& out)
{
std::vector<bool> referenced_blocks(program->blocks.size());
referenced_blocks[0] = true;
@@ -30,9 +30,15 @@ void print_asm(Program *program, std::vector<uint32_t>& binary,
symbols.emplace_back(block.offset * 4, llvm::StringRef(block_names[block_names.size() - 1].data()), 0);
}
- LLVMDisasmContextRef disasm = LLVMCreateDisasmCPU("amdgcn-mesa-mesa3d",
- ac_get_llvm_processor_name(family),
- &symbols, 0, NULL, NULL);
+ const char *features = "";
+ if (program->chip_class >= GFX10 && program->wave_size == 64) {
+ features = "+wavefrontsize64";
+ }
+
+ LLVMDisasmContextRef disasm = LLVMCreateDisasmCPUFeatures("amdgcn-mesa-mesa3d",
+ ac_get_llvm_processor_name(program->family),
+ features,
+ &symbols, 0, NULL, NULL);
char outline[1024];
size_t pos = 0;