summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
diff options
context:
space:
mode:
authorMatt Turner <mattst88@gmail.com>2014-06-23 22:07:20 -0700
committerMatt Turner <mattst88@gmail.com>2014-06-25 13:00:53 -0700
commit038eb649b30dfddaf40888ea28b5e88de3af2214 (patch)
treea3f7ec1d5ee5a05875145c67b44c45f9c58e081b /src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
parentaca4a951ea2bab855bcc2491a3b8996b54639ebd (diff)
downloadexternal_mesa3d-038eb649b30dfddaf40888ea28b5e88de3af2214.zip
external_mesa3d-038eb649b30dfddaf40888ea28b5e88de3af2214.tar.gz
external_mesa3d-038eb649b30dfddaf40888ea28b5e88de3af2214.tar.bz2
i965/fs: Constant propagate into 2-src math instructions on Gen8.
total instructions in shared programs: 1878133 -> 1876986 (-0.06%) instructions in affected programs: 153007 -> 151860 (-0.75%) Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
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.cpp11
1 files changed, 9 insertions, 2 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 28c6ca7..3c6e616 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
@@ -368,7 +368,8 @@ fs_visitor::try_copy_propagate(fs_inst *inst, int arg, acp_entry *entry)
static bool
-try_constant_propagate(fs_inst *inst, acp_entry *entry)
+try_constant_propagate(struct brw_context *brw, fs_inst *inst,
+ acp_entry *entry)
{
bool progress = false;
@@ -396,6 +397,12 @@ try_constant_propagate(fs_inst *inst, acp_entry *entry)
progress = true;
break;
+ case SHADER_OPCODE_POW:
+ case SHADER_OPCODE_INT_QUOTIENT:
+ case SHADER_OPCODE_INT_REMAINDER:
+ if (brw->gen < 8)
+ break;
+ /* fallthrough */
case BRW_OPCODE_BFI1:
case BRW_OPCODE_ASR:
case BRW_OPCODE_SHL:
@@ -537,7 +544,7 @@ fs_visitor::opt_copy_propagate_local(void *copy_prop_ctx, bblock_t *block,
foreach_list(entry_node, &acp[inst->src[i].reg % ACP_HASH_SIZE]) {
acp_entry *entry = (acp_entry *)entry_node;
- if (try_constant_propagate(inst, entry))
+ if (try_constant_propagate(brw, inst, entry))
progress = true;
if (try_copy_propagate(inst, i, entry))