mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-07 00:00:12 +01:00
agx: unit test memory parallel copies
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/27616>
This commit is contained in:
parent
14e1bb78ae
commit
a5ff85e782
1 changed files with 80 additions and 0 deletions
|
|
@ -3,6 +3,8 @@
|
|||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "agx_builder.h"
|
||||
#include "agx_compiler.h"
|
||||
#include "agx_test.h"
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
|
|
@ -12,6 +14,7 @@
|
|||
agx_builder *A = agx_test_builder(mem_ctx); \
|
||||
agx_builder *B = agx_test_builder(mem_ctx); \
|
||||
\
|
||||
A->shader->scratch_size = 2000; \
|
||||
agx_emit_parallel_copies(A, copies, ARRAY_SIZE(copies)); \
|
||||
\
|
||||
{ \
|
||||
|
|
@ -232,6 +235,83 @@ TEST_F(LowerParallelCopy, VectorizeAlignedHalfRegs)
|
|||
});
|
||||
}
|
||||
|
||||
TEST_F(LowerParallelCopy, StackCopies)
|
||||
{
|
||||
struct agx_copy test[] = {
|
||||
{.dest = 21, .dest_mem = true, .src = agx_register(20, AGX_SIZE_16)},
|
||||
{.dest = 22, .dest_mem = true, .src = agx_register(22, AGX_SIZE_32)},
|
||||
{.dest = 0, .src = agx_memory_register(10, AGX_SIZE_16)},
|
||||
{.dest = 1, .src = agx_memory_register(11, AGX_SIZE_16)},
|
||||
{.dest = 0, .dest_mem = true, .src = agx_memory_register(12, AGX_SIZE_16)},
|
||||
{.dest = 1, .dest_mem = true, .src = agx_memory_register(13, AGX_SIZE_16)},
|
||||
{.dest = 2,
|
||||
.dest_mem = true,
|
||||
.src = agx_memory_register(804, AGX_SIZE_32)},
|
||||
{.dest = 804,
|
||||
.dest_mem = true,
|
||||
.src = agx_memory_register(2, AGX_SIZE_32)},
|
||||
{.dest = 807,
|
||||
.dest_mem = true,
|
||||
.src = agx_memory_register(808, AGX_SIZE_16)},
|
||||
{.dest = 808,
|
||||
.dest_mem = true,
|
||||
.src = agx_memory_register(807, AGX_SIZE_16)},
|
||||
};
|
||||
|
||||
CASE(test, {
|
||||
/* Vectorized fill */
|
||||
agx_mov_to(b, agx_register(0, AGX_SIZE_32),
|
||||
agx_memory_register(10, AGX_SIZE_32));
|
||||
|
||||
/* Regular spills */
|
||||
agx_mov_to(b, agx_memory_register(21, AGX_SIZE_16),
|
||||
agx_register(20, AGX_SIZE_16));
|
||||
agx_mov_to(b, agx_memory_register(22, AGX_SIZE_32),
|
||||
agx_register(22, AGX_SIZE_32));
|
||||
|
||||
/* Vectorized stack->stack copy */
|
||||
agx_mov_to(b, agx_memory_register(1000, AGX_SIZE_32),
|
||||
agx_register(0, AGX_SIZE_32));
|
||||
|
||||
agx_mov_to(b, agx_register(0, AGX_SIZE_32),
|
||||
agx_memory_register(12, AGX_SIZE_32));
|
||||
|
||||
agx_mov_to(b, agx_memory_register(0, AGX_SIZE_32),
|
||||
agx_register(0, AGX_SIZE_32));
|
||||
|
||||
agx_mov_to(b, agx_register(0, AGX_SIZE_32),
|
||||
agx_memory_register(1000, AGX_SIZE_32));
|
||||
|
||||
/* Stack swap: 32-bit */
|
||||
agx_index temp1 = agx_register(0, AGX_SIZE_32);
|
||||
agx_index temp2 = agx_register(2, AGX_SIZE_32);
|
||||
agx_index spilled_gpr_vec2 = agx_register(0, AGX_SIZE_32);
|
||||
agx_index scratch_vec2 = agx_memory_register(1000, AGX_SIZE_32);
|
||||
spilled_gpr_vec2.channels_m1++;
|
||||
scratch_vec2.channels_m1++;
|
||||
|
||||
agx_mov_to(b, scratch_vec2, spilled_gpr_vec2);
|
||||
agx_mov_to(b, temp1, agx_memory_register(2, AGX_SIZE_32));
|
||||
agx_mov_to(b, temp2, agx_memory_register(804, AGX_SIZE_32));
|
||||
agx_mov_to(b, agx_memory_register(804, AGX_SIZE_32), temp1);
|
||||
agx_mov_to(b, agx_memory_register(2, AGX_SIZE_32), temp2);
|
||||
agx_mov_to(b, spilled_gpr_vec2, scratch_vec2);
|
||||
|
||||
/* Stack swap: 16-bit */
|
||||
spilled_gpr_vec2.size = AGX_SIZE_16;
|
||||
scratch_vec2.size = AGX_SIZE_16;
|
||||
temp1.size = AGX_SIZE_16;
|
||||
temp2.size = AGX_SIZE_16;
|
||||
|
||||
agx_mov_to(b, scratch_vec2, spilled_gpr_vec2);
|
||||
agx_mov_to(b, temp1, agx_memory_register(807, AGX_SIZE_16));
|
||||
agx_mov_to(b, temp2, agx_memory_register(808, AGX_SIZE_16));
|
||||
agx_mov_to(b, agx_memory_register(808, AGX_SIZE_16), temp1);
|
||||
agx_mov_to(b, agx_memory_register(807, AGX_SIZE_16), temp2);
|
||||
agx_mov_to(b, spilled_gpr_vec2, scratch_vec2);
|
||||
});
|
||||
}
|
||||
|
||||
#if 0
|
||||
TEST_F(LowerParallelCopy, LooksLikeASwap) {
|
||||
struct agx_copy test[] = {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue