[Mesa-dev] [PATCH 17/32] i965/vec4: Fix constant propagation across different types.
Francisco Jerez
currojerez at riseup.net
Fri Feb 6 06:42:57 PST 2015
If the source type differs from the original type of the constant we
need to bit-cast it before propagating, otherwise the original type
information will be lost. If the constant was a vector float there
isn't much we can do, because the result of bit-casting the component
values of a vector float cannot itself be represented as an immediate.
---
src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
index 81567d2..0a961ce 100644
--- a/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
+++ b/src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp
@@ -113,6 +113,16 @@ try_constant_propagate(struct brw_context *brw, vec4_instruction *inst,
if (value.file != IMM)
return false;
+ if (value.type == BRW_REGISTER_TYPE_VF) {
+ /* The result of bit-casting the component values of a vector float
+ * cannot in general be represented as an immediate.
+ */
+ if (inst->src[arg].type != BRW_REGISTER_TYPE_F)
+ return false;
+ } else {
+ value.type = inst->src[arg].type;
+ }
+
if (inst->src[arg].abs) {
if (!brw_abs_immediate(value.type, &value.fixed_hw_reg)) {
return false;
--
2.1.3
More information about the mesa-dev
mailing list