Module: Mesa
Branch: main
Commit: c9728b41d51d949e48995641a5a9f7c4a205ef9e
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c9728b41d51d949e48995641a5a9f7c4a205ef9e

Author: Alyssa Rosenzweig <[email protected]>
Date:   Sat Feb 18 17:05:57 2023 -0500

agx: Factor out allows_16bit_immediate check

The optimizer needs this information to inline immediates effectively.

Signed-off-by: Alyssa Rosenzweig <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21430>

---

 src/asahi/compiler/agx_compiler.h |  1 +
 src/asahi/compiler/agx_ir.c       | 14 ++++++++++++++
 src/asahi/compiler/agx_validate.c |  4 +---
 src/asahi/compiler/meson.build    |  1 +
 4 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/src/asahi/compiler/agx_compiler.h 
b/src/asahi/compiler/agx_compiler.h
index da1ac2a7c34..dc384221ccc 100644
--- a/src/asahi/compiler/agx_compiler.h
+++ b/src/asahi/compiler/agx_compiler.h
@@ -808,6 +808,7 @@ agx_validate(UNUSED agx_context *ctx, UNUSED const char 
*after_str)
 
 unsigned agx_read_registers(agx_instr *I, unsigned s);
 unsigned agx_write_registers(agx_instr *I, unsigned d);
+bool agx_allows_16bit_immediate(agx_instr *I);
 
 struct agx_copy {
    /* Base register destination of the copy */
diff --git a/src/asahi/compiler/agx_ir.c b/src/asahi/compiler/agx_ir.c
new file mode 100644
index 00000000000..d499a7fc581
--- /dev/null
+++ b/src/asahi/compiler/agx_ir.c
@@ -0,0 +1,14 @@
+/*
+ * Copyright 2022 Alyssa Rosenzweig
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "agx_compiler.h"
+
+bool
+agx_allows_16bit_immediate(agx_instr *I)
+{
+   return (I->op == AGX_OPCODE_DEVICE_LOAD) ||
+          (I->op == AGX_OPCODE_DEVICE_STORE) ||
+          (I->op == AGX_OPCODE_UNIFORM_STORE) || (I->op == AGX_OPCODE_ATOMIC);
+}
diff --git a/src/asahi/compiler/agx_validate.c 
b/src/asahi/compiler/agx_validate.c
index d57fb97ce97..08e98555b84 100644
--- a/src/asahi/compiler/agx_validate.c
+++ b/src/asahi/compiler/agx_validate.c
@@ -103,9 +103,7 @@ agx_validate_sources(agx_instr *I)
          agx_validate_assert(!src.cache);
          agx_validate_assert(!src.discard);
 
-         bool ldst = (I->op == AGX_OPCODE_DEVICE_LOAD) ||
-                     (I->op == AGX_OPCODE_UNIFORM_STORE) ||
-                     (I->op == AGX_OPCODE_ATOMIC);
+         bool ldst = agx_allows_16bit_immediate(I);
 
          /* Immediates are encoded as 8-bit (16-bit for memory load/store). For
           * integers, they extend to 16-bit. For floating point, they are 8-bit
diff --git a/src/asahi/compiler/meson.build b/src/asahi/compiler/meson.build
index 0404ed3374b..42af74d2d05 100644
--- a/src/asahi/compiler/meson.build
+++ b/src/asahi/compiler/meson.build
@@ -37,6 +37,7 @@ libasahi_agx_files = files(
   'agx_lower_uniform_sources.c',
   'agx_pack.c',
   'agx_print.c',
+  'agx_ir.c',
   'agx_opt_cse.c',
   'agx_optimizer.c',
   'agx_register_allocate.c',

Reply via email to