diff options
author | Matt Turner <[email protected]> | 2014-04-03 14:29:30 -0700 |
---|---|---|
committer | Matt Turner <[email protected]> | 2014-12-05 16:43:31 -0800 |
commit | a28ad9d4c0d4b95aee8c3b99e9aaa59add21ea9d (patch) | |
tree | 49297f78e11e5d4058781eb8969fe5d610ebc3eb /src/mesa/drivers/dri | |
parent | 963a3c7f90672c8d4931606d45e172792caf84ca (diff) |
i965/fs: Perform CSE on MOV ..., VF instructions.
Safe from causing optimization loops, since we don't constant propagate
VF arguments.
(for this and the previous patch):
total instructions in shared programs: 4289075 -> 4271932 (-0.40%)
instructions in affected programs: 1616779 -> 1599636 (-1.06%)
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_cse.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp index b1c433e45c7..38fae178114 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_cse.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_cse.cpp @@ -62,6 +62,7 @@ static bool is_expression(const fs_inst *const inst) { switch (inst->opcode) { + case BRW_OPCODE_MOV: case BRW_OPCODE_SEL: case BRW_OPCODE_NOT: case BRW_OPCODE_AND: @@ -194,11 +195,16 @@ fs_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 = reg_undef; - 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 = reg_undef; + 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. |