aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Turner <[email protected]>2014-04-03 14:29:30 -0700
committerMatt Turner <[email protected]>2014-12-29 10:08:18 -0800
commit7463e6d61bdd2a3f8cd8b2649d96cb03de1351de (patch)
treea59d43e75f4dec0fbacd02e0cf9b6f163d58ba25
parent44573458bdc52acc304fb75d6df502312b8e149c (diff)
i965/vec4: Perform CSE on MOV ..., VF instructions.
Port of commit a28ad9d4 from the fs backend. No shader-db changes since we don't emit MOV ..., VF instructions yet. Reviewed-by: Ian Romanick <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/brw_vec4_cse.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp b/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp
index 7071213ee38..37c930c746d 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_cse.cpp
@@ -48,6 +48,7 @@ static bool
is_expression(const vec4_instruction *const inst)
{
switch (inst->opcode) {
+ case BRW_OPCODE_MOV:
case BRW_OPCODE_SEL:
case BRW_OPCODE_NOT:
case BRW_OPCODE_AND:
@@ -154,11 +155,16 @@ vec4_visitor::opt_cse_local(bblock_t *block)
}
if (!found) {
- /* Our first sighting of this expression. Create an entry. */
- aeb_entry *entry = ralloc(cse_ctx, aeb_entry);
- entry->tmp = src_reg(); /* file will be BAD_FILE */
- entry->generator = inst;
- aeb.push_tail(entry);
+ if (inst->opcode != BRW_OPCODE_MOV ||
+ (inst->opcode == BRW_OPCODE_MOV &&
+ inst->src[0].file == IMM &&
+ inst->src[0].type == BRW_REGISTER_TYPE_VF)) {
+ /* Our first sighting of this expression. Create an entry. */
+ aeb_entry *entry = ralloc(cse_ctx, aeb_entry);
+ entry->tmp = src_reg(); /* file will be BAD_FILE */
+ entry->generator = inst;
+ aeb.push_tail(entry);
+ }
} else {
/* This is at least our second sighting of this expression.
* If we don't have a temporary already, make one.