[Mesa-dev] [RFC PATCH 16/17] eir: add optimization 'framework'

Christian Gmeiner christian.gmeiner at gmail.com
Fri May 10 09:09:14 UTC 2019


Signed-off-by: Christian Gmeiner <christian.gmeiner at gmail.com>
---
 src/etnaviv/compiler/eir.h              |  3 ++
 src/etnaviv/compiler/eir_compiler_nir.c |  6 ++++
 src/etnaviv/compiler/eir_optimize.c     | 48 +++++++++++++++++++++++++
 src/etnaviv/compiler/eir_optimize.h     | 31 ++++++++++++++++
 src/etnaviv/compiler/meson.build        |  1 +
 5 files changed, 89 insertions(+)
 create mode 100644 src/etnaviv/compiler/eir_optimize.c
 create mode 100644 src/etnaviv/compiler/eir_optimize.h

diff --git a/src/etnaviv/compiler/eir.h b/src/etnaviv/compiler/eir.h
index 1b67edab559..f46d12b822a 100644
--- a/src/etnaviv/compiler/eir.h
+++ b/src/etnaviv/compiler/eir.h
@@ -294,6 +294,9 @@ eir_assign_output(struct eir *ir, unsigned idx, unsigned slot, unsigned ncomp)
 void
 eir_legalize(struct eir *ir);
 
+void
+eir_optimize(struct eir *ir);
+
 void
 eir_calculate_live_intervals(struct eir *ir);
 
diff --git a/src/etnaviv/compiler/eir_compiler_nir.c b/src/etnaviv/compiler/eir_compiler_nir.c
index 862f34390e0..4dbbd5e8f0a 100644
--- a/src/etnaviv/compiler/eir_compiler_nir.c
+++ b/src/etnaviv/compiler/eir_compiler_nir.c
@@ -991,6 +991,12 @@ eir_compile_shader_nir(struct eir_compiler *compiler,
       eir_print(ctx->ir);
    }
 
+   eir_optimize(ctx->ir);
+   if (eir_compiler_debug & EIR_DBG_OPTMSGS) {
+      printf("AFTER eir_optimize:\n");
+      eir_print(ctx->ir);
+   }
+
    eir_legalize(ctx->ir);
    if (eir_compiler_debug & EIR_DBG_OPTMSGS) {
       printf("AFTER legalization:\n");
diff --git a/src/etnaviv/compiler/eir_optimize.c b/src/etnaviv/compiler/eir_optimize.c
new file mode 100644
index 00000000000..6eae8e9c9ec
--- /dev/null
+++ b/src/etnaviv/compiler/eir_optimize.c
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2019 Etnaviv Project
+ * Copyright (C) 2019 Zodiac Inflight Innovations
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Christian Gmeiner <christian.gmeiner at gmail.com>
+ */
+
+#include "eir.h"
+#include "eir_optimize.h"
+#include <stdio.h>
+
+#define OPTPASS(func)                                 \
+   do {                                               \
+         bool stage_progress = func(ir);              \
+         if (stage_progress) {                        \
+            if (print_opt_debug) {                    \
+               fprintf(stderr,                        \
+                       "EIR opt pass %s progress\n",  \
+                       #func);                        \
+            }                                         \
+         }                                            \
+   } while (0)
+
+void
+eir_optimize(struct eir *ir)
+{
+   const bool print_opt_debug = true;
+}
diff --git a/src/etnaviv/compiler/eir_optimize.h b/src/etnaviv/compiler/eir_optimize.h
new file mode 100644
index 00000000000..b840a273c25
--- /dev/null
+++ b/src/etnaviv/compiler/eir_optimize.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2019 Etnaviv Project
+ * Copyright (C) 2019 Zodiac Inflight Innovations
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sub license,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Authors:
+ *    Christian Gmeiner <christian.gmeiner at gmail.com>
+ */
+
+#ifndef H_EIR_OPTIMIZE
+#define H_EIR_OPTIMIZE
+
+#endif // H_EIR_OPTIMIZE
diff --git a/src/etnaviv/compiler/meson.build b/src/etnaviv/compiler/meson.build
index 3431cb48c36..8343e6b91ad 100644
--- a/src/etnaviv/compiler/meson.build
+++ b/src/etnaviv/compiler/meson.build
@@ -31,6 +31,7 @@ libetnaviv_compiler_files = files(
   'eir_nir_lower_alu_to_scalar.c',
   'eir_nir.c',
   'eir_nir.h',
+  'eir_optimize.c',
   'eir_print.c',
   'eir_register_allocate.c',
   'eir_shader.c',
-- 
2.21.0



More information about the mesa-dev mailing list