From 34f2c4dc6a6d62677bb7478a70e71b0e5719fc4c Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 8 May 2020 16:18:55 +0200 Subject: [PATCH] aco: validate v_interp_*_f16 as VOP3 instructions instead of VINTRP 16-bit interp instructions are considered VINTRP by the compiler but they are emitted as VOP3 by the assembler. Signed-off-by: Samuel Pitoiset Reviewed-by: Rhys Perry Part-of: --- src/amd/compiler/aco_validate.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/amd/compiler/aco_validate.cpp b/src/amd/compiler/aco_validate.cpp index 3323acf9899..95cc1df3ffd 100644 --- a/src/amd/compiler/aco_validate.cpp +++ b/src/amd/compiler/aco_validate.cpp @@ -85,8 +85,19 @@ void validate(Program* program, FILE * output) base_format = Format::VOP2; else if ((uint32_t)base_format & (uint32_t)Format::VOPC) base_format = Format::VOPC; - else if ((uint32_t)base_format & (uint32_t)Format::VINTRP) - base_format = Format::VINTRP; + else if ((uint32_t)base_format & (uint32_t)Format::VINTRP) { + if (instr->opcode == aco_opcode::v_interp_p1ll_f16 || + instr->opcode == aco_opcode::v_interp_p1lv_f16 || + instr->opcode == aco_opcode::v_interp_p2_legacy_f16 || + instr->opcode == aco_opcode::v_interp_p2_f16) { + /* v_interp_*_fp16 are considered VINTRP by the compiler but + * they are emitted as VOP3. + */ + base_format = Format::VOP3; + } else { + base_format = Format::VINTRP; + } + } check(base_format == instr_info.format[(int)instr->opcode], "Wrong base format for instruction", instr.get()); /* check VOP3 modifiers */ -- 2.30.2