summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2014-10-16 11:45:44 -0700
committerJason Ekstrand <jason.ekstrand@intel.com>2015-01-13 13:24:52 -0800
commit3a5c7e47fdcfb3e322c0756e960cbcf8403e4230 (patch)
treea81c373f72b12df316e40ce1644394b3c3e01363 /src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
parent610c7486c24686429257d63403e275d56d7100b5 (diff)
downloadexternal_mesa3d-3a5c7e47fdcfb3e322c0756e960cbcf8403e4230.zip
external_mesa3d-3a5c7e47fdcfb3e322c0756e960cbcf8403e4230.tar.gz
external_mesa3d-3a5c7e47fdcfb3e322c0756e960cbcf8403e4230.tar.bz2
i965/fs: Allow constant propagation between different types
This will be needed for NIR because it is typeless and treats all constants as uint32 values and reinterprets them when they are used later. This commit allows those values to be properly propagated. Also, this helps some synmark shaders because it allows us to copy propagate a 0x00000000UD into a 0.0F in a load_payload, which then lets us combine 4 load_payloads. instructions in affected programs: 2288 -> 2144 (-6.29%) Reviewed-by: Matt Turner <mattst88@gmail.com>
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.cpp4
1 files changed, 2 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 611cff1..70f417f 100644
--- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
@@ -433,8 +433,7 @@ fs_visitor::try_constant_propagate(fs_inst *inst, acp_entry *entry)
continue;
assert(entry->dst.file == GRF);
- if (inst->src[i].reg != entry->dst.reg ||
- inst->src[i].type != entry->dst.type)
+ if (inst->src[i].reg != entry->dst.reg)
continue;
/* Bail if inst is reading a range that isn't contained in the range
@@ -454,6 +453,7 @@ fs_visitor::try_constant_propagate(fs_inst *inst, acp_entry *entry)
fs_reg val = entry->src;
val.effective_width = inst->src[i].effective_width;
+ val.type = inst->src[i].type;
switch (inst->opcode) {
case BRW_OPCODE_MOV: