diff options
author | Alejandro Piñeiro <[email protected]> | 2015-10-14 20:26:43 +0200 |
---|---|---|
committer | Alejandro Piñeiro <[email protected]> | 2015-10-22 21:58:03 +0200 |
commit | a59359ecd22154cc2b3f88bb8c599f21af8a3934 (patch) | |
tree | d62b6ae7088a1edeca6ec4df924136c200543dc5 /src/mesa/drivers/dri/i965/brw_ir_vec4.h | |
parent | 8ac3b525c77cb5aae9e61bd984b78f6cbbffdc1c (diff) |
i965/vec4: track and use independently each flag channel
vec4_live_variables tracks now each flag channel independently, so
vec4_dead_code_eliminate can update the writemask of null registers,
based on which component are alive at the moment. This would allow
vec4_cmod_propagation to optimize out several movs involving null
registers.
v2: added support to track each flag channel independently at vec4
live_variables, as v1 assumed that it was already doing it, as
pointed by Francisco Jerez
v3: general cleaningn after Matt Turner's review
Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/i965/brw_ir_vec4.h')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_ir_vec4.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_ir_vec4.h b/src/mesa/drivers/dri/i965/brw_ir_vec4.h index 1b57b65db27..74e9733bd44 100644 --- a/src/mesa/drivers/dri/i965/brw_ir_vec4.h +++ b/src/mesa/drivers/dri/i965/brw_ir_vec4.h @@ -186,6 +186,27 @@ public: return predicate || opcode == VS_OPCODE_UNPACK_FLAGS_SIMD4X2; } + bool reads_flag(unsigned c) + { + if (!reads_flag()) + return false; + + switch (predicate) { + case BRW_PREDICATE_NONE: + return false; + case BRW_PREDICATE_ALIGN16_REPLICATE_X: + return c == 0; + case BRW_PREDICATE_ALIGN16_REPLICATE_Y: + return c == 1; + case BRW_PREDICATE_ALIGN16_REPLICATE_Z: + return c == 2; + case BRW_PREDICATE_ALIGN16_REPLICATE_W: + return c == 3; + default: + return true; + } + } + bool writes_flag() { return (conditional_mod && (opcode != BRW_OPCODE_SEL && |