mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-30 18:40:13 +01:00
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>
This commit is contained in:
parent
610c7486c2
commit
3a5c7e47fd
1 changed files with 2 additions and 2 deletions
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue