From: Matt Turner Date: Thu, 3 Apr 2014 21:29:30 +0000 (-0700) Subject: i965/vec4: Perform CSE on MOV ..., VF instructions. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=7463e6d61bdd2a3f8cd8b2649d96cb03de1351de;p=mesa.git 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 --- 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.