From: Matt Turner Date: Sun, 21 Dec 2014 01:37:09 +0000 (-0800) Subject: i965/vec4: Add parameter to skip doing constant propagation. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c855f49c99379cc65e5a91fe9297a6b961e09e1f;p=mesa.git i965/vec4: Add parameter to skip doing constant propagation. After CSEing some MOV ..., VF instructions we have code like mov tmp, [1F, 2F, 3F, 4F]VF mov r10, tmp mov r11, tmp ... use r10 use r11 We want to copy propagate tmp into the uses of r10 and r11, but *not* constant propagate the VF immediate into the uses of tmp. Reviewed-by: Ian Romanick --- diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h index 4a8a4676d65..75ecaf1a37d 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.h +++ b/src/mesa/drivers/dri/i965/brw_vec4.h @@ -369,7 +369,7 @@ public: bool opt_reduce_swizzle(); bool dead_code_eliminate(); bool virtual_grf_interferes(int a, int b); - bool opt_copy_propagation(); + bool opt_copy_propagation(bool do_constant_prop = true); bool opt_cse_local(bblock_t *block); bool opt_cse(); bool opt_algebraic(); diff --git a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp index 65564c998e3..9deaffa9fc3 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp @@ -330,7 +330,7 @@ try_copy_propagate(struct brw_context *brw, vec4_instruction *inst, } bool -vec4_visitor::opt_copy_propagation() +vec4_visitor::opt_copy_propagation(bool do_constant_prop) { bool progress = false; struct copy_entry entries[virtual_grf_reg_count]; @@ -395,7 +395,7 @@ vec4_visitor::opt_copy_propagation() if (c != 4) continue; - if (try_constant_propagate(brw, inst, i, &entry)) + if (do_constant_prop && try_constant_propagate(brw, inst, i, &entry)) progress = true; if (try_copy_propagate(brw, inst, i, &entry, reg))