aco/tests: add disassembler tests to reproduce the add3+clamp crash
Like some other v_add instructions, LLVM fails to disassemble v_add3_u32 + clamp. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6961>
This commit is contained in:
@@ -227,3 +227,40 @@ BEGIN_TEST(assembler.long_jump.constaddr)
|
||||
|
||||
finish_assembler_test();
|
||||
END_TEST
|
||||
|
||||
BEGIN_TEST(assembler.v_add3)
|
||||
for (unsigned i = GFX9; i <= GFX10; i++) {
|
||||
if (!setup_cs(NULL, (chip_class)i))
|
||||
continue;
|
||||
|
||||
//~gfx9>> v_add3_u32 v0, 0, 0, 0 ; d1ff0000 02010080
|
||||
//~gfx10>> v_add3_u32 v0, 0, 0, 0 ; d76d0000 02010080
|
||||
aco_ptr<VOP3A_instruction> add3{create_instruction<VOP3A_instruction>(aco_opcode::v_add3_u32, Format::VOP3A, 3, 1)};
|
||||
add3->operands[0] = Operand(0u);
|
||||
add3->operands[1] = Operand(0u);
|
||||
add3->operands[2] = Operand(0u);
|
||||
add3->definitions[0] = Definition(PhysReg(0), v1);
|
||||
bld.insert(std::move(add3));
|
||||
|
||||
finish_assembler_test();
|
||||
}
|
||||
END_TEST
|
||||
|
||||
BEGIN_TEST(assembler.v_add3_clamp)
|
||||
for (unsigned i = GFX9; i <= GFX10; i++) {
|
||||
if (!setup_cs(NULL, (chip_class)i))
|
||||
continue;
|
||||
|
||||
//~gfx9>> integer addition + clamp ; d1ff8000 02010080
|
||||
//~gfx10>> integer addition + clamp ; d76d8000 02010080
|
||||
aco_ptr<VOP3A_instruction> add3{create_instruction<VOP3A_instruction>(aco_opcode::v_add3_u32, Format::VOP3A, 3, 1)};
|
||||
add3->operands[0] = Operand(0u);
|
||||
add3->operands[1] = Operand(0u);
|
||||
add3->operands[2] = Operand(0u);
|
||||
add3->definitions[0] = Definition(PhysReg(0), v1);
|
||||
add3->clamp = 1;
|
||||
bld.insert(std::move(add3));
|
||||
|
||||
finish_assembler_test();
|
||||
}
|
||||
END_TEST
|
||||
|
Reference in New Issue
Block a user