summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2014-12-12 12:52:11 -0800
committerJason Ekstrand <[email protected]>2015-01-15 07:19:00 -0800
commit4f44120ff51fba27258376941ee965078aa8494e (patch)
treeb1e73e3e72b0767fd6b2b89ff383b68eddcb7a73
parent366181d826219b50ae74a5d5db49e885f3bb7c4e (diff)
nir: Add a function for comparing two sources
Reviewed-by: Connor Abbott <[email protected]>
-rw-r--r--src/glsl/nir/nir.c27
-rw-r--r--src/glsl/nir/nir.h2
2 files changed, 29 insertions, 0 deletions
diff --git a/src/glsl/nir/nir.c b/src/glsl/nir/nir.c
index b64ec4073a4..56891dc3401 100644
--- a/src/glsl/nir/nir.c
+++ b/src/glsl/nir/nir.c
@@ -1634,6 +1634,33 @@ nir_foreach_src(nir_instr *instr, nir_foreach_src_cb cb, void *state)
return nir_foreach_dest(instr, visit_dest_indirect, &dest_state);
}
+bool
+nir_srcs_equal(nir_src src1, nir_src src2)
+{
+ if (src1.is_ssa) {
+ if (src2.is_ssa) {
+ return src1.ssa == src2.ssa;
+ } else {
+ return false;
+ }
+ } else {
+ if (src2.is_ssa) {
+ return false;
+ } else {
+ if ((src1.reg.indirect == NULL) != (src2.reg.indirect == NULL))
+ return false;
+
+ if (src1.reg.indirect) {
+ if (!nir_srcs_equal(*src1.reg.indirect, *src2.reg.indirect))
+ return false;
+ }
+
+ return src1.reg.reg == src2.reg.reg &&
+ src1.reg.base_offset == src2.reg.base_offset;
+ }
+ }
+}
+
void
nir_ssa_def_init(nir_function_impl *impl, nir_instr *instr, nir_ssa_def *def,
unsigned num_components, const char *name)
diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h
index 6c1f6682843..126e9c841c7 100644
--- a/src/glsl/nir/nir.h
+++ b/src/glsl/nir/nir.h
@@ -1301,6 +1301,8 @@ typedef bool (*nir_foreach_src_cb)(nir_src *src, void *state);
bool nir_foreach_dest(nir_instr *instr, nir_foreach_dest_cb cb, void *state);
bool nir_foreach_src(nir_instr *instr, nir_foreach_src_cb cb, void *state);
+bool nir_srcs_equal(nir_src src1, nir_src src2);
+
void nir_ssa_def_init(nir_function_impl *impl, nir_instr *instr,
nir_ssa_def *def, unsigned num_components,
const char *name);