aboutsummaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
diff options
context:
space:
mode:
authorAbdiel Janulgue <[email protected]>2014-06-05 11:05:28 -0700
committerMatt Turner <[email protected]>2014-06-09 11:19:39 -0700
commita66660d2b75197814f5e36b9994b1e9eadff0a2e (patch)
tree510f1f1864559b218aa8ea1e8135bb1305245932 /src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
parent1e150ca696876e2c884e957f714744522eb4b7e2 (diff)
i965/fs: Refactor check for potential copy propagated instructions.
Reviewed-by: Matt Turner <[email protected]> Signed-off-by: Abdiel Janulgue <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp')
-rw-r--r--src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp27
1 files changed, 17 insertions, 10 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
index a1aff21fd3a..d3d59aa1bc9 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
@@ -478,6 +478,22 @@ fs_visitor::try_constant_propagate(fs_inst *inst, acp_entry *entry)
return progress;
}
+
+static bool
+can_propagate_from(fs_inst *inst)
+{
+ return (inst->opcode == BRW_OPCODE_MOV &&
+ inst->dst.file == GRF &&
+ ((inst->src[0].file == GRF &&
+ (inst->src[0].reg != inst->dst.reg ||
+ inst->src[0].reg_offset != inst->dst.reg_offset)) ||
+ inst->src[0].file == UNIFORM ||
+ inst->src[0].file == IMM) &&
+ inst->src[0].type == inst->dst.type &&
+ !inst->saturate &&
+ !inst->is_partial_write());
+}
+
/* Walks a basic block and does copy propagation on it using the acp
* list.
*/
@@ -532,16 +548,7 @@ fs_visitor::opt_copy_propagate_local(void *copy_prop_ctx, bblock_t *block,
/* If this instruction's source could potentially be folded into the
* operand of another instruction, add it to the ACP.
*/
- if (inst->opcode == BRW_OPCODE_MOV &&
- inst->dst.file == GRF &&
- ((inst->src[0].file == GRF &&
- (inst->src[0].reg != inst->dst.reg ||
- inst->src[0].reg_offset != inst->dst.reg_offset)) ||
- inst->src[0].file == UNIFORM ||
- inst->src[0].file == IMM) &&
- inst->src[0].type == inst->dst.type &&
- !inst->saturate &&
- !inst->is_partial_write()) {
+ if (can_propagate_from(inst)) {
acp_entry *entry = ralloc(copy_prop_ctx, acp_entry);
entry->dst = inst->dst;
entry->src = inst->src[0];