[Mesa-dev] [PATCH 19/21] r600/sb: add lds related peepholes.

Dave Airlie airlied at gmail.com
Wed Jan 10 06:48:58 UTC 2018


From: Dave Airlie <airlied at redhat.com>

if no destination:
a) convert _RET instructions to non _RET variants if no dst
b) set src0 to undefined if it's a READ, this should get DCE then.
---
 src/gallium/drivers/r600/sb/sb_peephole.cpp | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/gallium/drivers/r600/sb/sb_peephole.cpp b/src/gallium/drivers/r600/sb/sb_peephole.cpp
index 49a6965b1f..4390a8f525 100644
--- a/src/gallium/drivers/r600/sb/sb_peephole.cpp
+++ b/src/gallium/drivers/r600/sb/sb_peephole.cpp
@@ -68,7 +68,14 @@ void peephole::run_on(container_node* c) {
 			if (n->is_alu_inst()) {
 				alu_node *a = static_cast<alu_node*>(n);
 
-				if (a->bc.op_ptr->flags &
+				if (a->bc.op_ptr->flags & AF_LDS) {
+					if (!a->dst[0]) {
+						if (a->bc.op >= LDS_OP2_LDS_ADD_RET && a->bc.op <= LDS_OP3_LDS_MSKOR_RET)
+							a->bc.set_op(a->bc.op - LDS_OP2_LDS_ADD_RET + LDS_OP2_LDS_ADD);
+						if (a->bc.op == LDS_OP1_LDS_READ_RET)
+							a->src[0] = sh.get_undef_value();
+					}
+				} else if (a->bc.op_ptr->flags &
 						(AF_PRED | AF_SET | AF_CMOV | AF_KILL)) {
 					optimize_cc_op(a);
 				} else if (a->bc.op == ALU_OP1_FLT_TO_INT) {
-- 
2.14.3



More information about the mesa-dev mailing list