Mesa (master): r600g/sb: relax some restrictions for FETCH instructions

Vadim Girlin vadimg at kemper.freedesktop.org
Fri May 24 17:18:19 UTC 2013


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

Author: Vadim Girlin <vadimgirlin at gmail.com>
Date:   Fri May 24 18:15:57 2013 +0400

r600g/sb: relax some restrictions for FETCH instructions

This allows GVN rewrite pass to propagate non-const (register)
values to FETCH source operands, helping to eliminate unnecessary
copies in some cases.

Signed-off-by: Vadim Girlin <vadimgirlin at gmail.com>

---

 src/gallium/drivers/r600/sb/sb_gvn.cpp |   17 ++++++++---------
 1 files changed, 8 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/r600/sb/sb_gvn.cpp b/src/gallium/drivers/r600/sb/sb_gvn.cpp
index 12cdb1c..caea4ec 100644
--- a/src/gallium/drivers/r600/sb/sb_gvn.cpp
+++ b/src/gallium/drivers/r600/sb/sb_gvn.cpp
@@ -194,16 +194,15 @@ void gvn::process_op(node& n, bool rewrite) {
 				process_src(v->rel, rewrite);
 			}
 
-			if (rewrite && v->gvn_source && v->gvn_source->is_readonly()
-					&& n.is_any_alu()) {
+			if (rewrite && v->gvn_source && v->gvn_source->is_readonly() &&
+					n.is_any_alu()) {
 				process_alu_src_constants(n, v);
-			} else {
-				if (rewrite && (n.is_fetch_op(FETCH_OP_VFETCH) ||
-						n.is_fetch_op(FETCH_OP_SEMFETCH)))
-					process_src(v, false);
-				else
-					process_src(v, rewrite);
-			}
+			} else if (rewrite && v->gvn_source && v->gvn_source->is_const() &&
+					(n.is_fetch_op(FETCH_OP_VFETCH) ||
+							n.is_fetch_op(FETCH_OP_SEMFETCH)))
+				process_src(v, false);
+			else
+				process_src(v, rewrite);
 		}
 	}
 	if (n.pred)




More information about the mesa-commit mailing list