[Mesa-dev] [PATCH] i965: Replace default case with list of enum values.
Ian Romanick
idr at freedesktop.org
Fri Oct 30 17:19:44 PDT 2015
On 10/29/2015 05:52 PM, Matt Turner wrote:
> If we add a new file type, we'd like to get warnings if it's not
> handled.
>
> Unfortuately, gcc seems to have bugs (see the XXX).
Did you submit a GCC bug?
Assuming there are not warnings added, this patch is
Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>
> ---
> src/mesa/drivers/dri/i965/brw_fs.cpp | 16 +++++-----------
> src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp | 7 ++++---
> src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 11 ++++++++---
> src/mesa/drivers/dri/i965/brw_ir_fs.h | 7 ++++---
> src/mesa/drivers/dri/i965/brw_vec4.cpp | 19 +++++++++++--------
> 5 files changed, 32 insertions(+), 28 deletions(-)
>
> diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp
> index c40ca91..0258633 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp
> @@ -88,8 +88,6 @@ fs_inst::init(enum opcode opcode, uint8_t exec_size, const fs_reg &dst,
> case IMM:
> case UNIFORM:
> unreachable("Invalid destination register file");
> - default:
> - unreachable("Invalid register file");
> }
>
> this->writes_accumulator = false;
> @@ -839,10 +837,10 @@ fs_inst::regs_read(int arg) const
> src[arg].component_size(exec_size),
> REG_SIZE);
> case MRF:
> - unreachable("MRF registers are not allowed as sources");
> - default:
> - unreachable("Invalid register file");
> + break;
> }
> + /* XXX: gcc warns if this is in the switch */
> + unreachable("MRF registers are not allowed as sources");
> }
>
> bool
> @@ -4501,9 +4499,8 @@ fs_visitor::dump_instruction(backend_instruction *be_inst, FILE *file)
> if (inst->dst.fixed_hw_reg.subnr)
> fprintf(file, "+%d", inst->dst.fixed_hw_reg.subnr);
> break;
> - default:
> - fprintf(file, "???");
> - break;
> + case IMM:
> + unreachable("not reached");
> }
> fprintf(file, ":%s, ", brw_reg_type_letters(inst->dst.type));
>
> @@ -4596,9 +4593,6 @@ fs_visitor::dump_instruction(backend_instruction *be_inst, FILE *file)
> if (inst->src[i].fixed_hw_reg.abs)
> fprintf(file, "|");
> break;
> - default:
> - fprintf(file, "???");
> - break;
> }
> if (inst->src[i].abs)
> fprintf(file, "|");
> 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 97e206d..2620482 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
> @@ -416,9 +416,10 @@ fs_visitor::try_copy_propagate(fs_inst *inst, int arg, acp_entry *entry)
> inst->src[arg].subreg_offset = offset % 32;
> }
> break;
> - default:
> - unreachable("Invalid register file");
> - break;
> +
> + case MRF:
> + case IMM:
> + unreachable("not reached");
> }
>
> if (has_source_modifiers) {
> diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> index 139d1dd..4ef86dd 100644
> --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
> @@ -42,9 +42,13 @@ static uint32_t brw_file_from_reg(fs_reg *reg)
> return BRW_MESSAGE_REGISTER_FILE;
> case IMM:
> return BRW_IMMEDIATE_VALUE;
> - default:
> - unreachable("not reached");
> + case BAD_FILE:
> + case HW_REG:
> + case ATTR:
> + case UNIFORM:
> + break;
> }
> + unreachable("not reached"); /* XXX: gcc warns if this is in the switch */
> }
>
> static struct brw_reg
> @@ -116,7 +120,8 @@ brw_reg_from_fs_reg(fs_inst *inst, fs_reg *reg, unsigned gen)
> /* Probably unused. */
> brw_reg = brw_null_reg();
> break;
> - default:
> + case ATTR:
> + case UNIFORM:
> unreachable("not reached");
> }
> if (reg->abs)
> diff --git a/src/mesa/drivers/dri/i965/brw_ir_fs.h b/src/mesa/drivers/dri/i965/brw_ir_fs.h
> index 7726e4b..4417555 100644
> --- a/src/mesa/drivers/dri/i965/brw_ir_fs.h
> +++ b/src/mesa/drivers/dri/i965/brw_ir_fs.h
> @@ -97,7 +97,9 @@ byte_offset(fs_reg reg, unsigned delta)
> case MRF:
> reg.reg += delta / 32;
> break;
> - default:
> + case IMM:
> + case HW_REG:
> + case UNIFORM:
> assert(delta == 0);
> }
> reg.subreg_offset += delta % 32;
> @@ -119,7 +121,7 @@ horiz_offset(fs_reg reg, unsigned delta)
> case MRF:
> case ATTR:
> return byte_offset(reg, delta * reg.stride * type_sz(reg.type));
> - default:
> + case HW_REG:
> assert(delta == 0);
> }
> return reg;
> @@ -163,7 +165,6 @@ half(fs_reg reg, unsigned idx)
>
> case ATTR:
> case HW_REG:
> - default:
> unreachable("Cannot take half of this register type");
> }
> return reg;
> diff --git a/src/mesa/drivers/dri/i965/brw_vec4.cpp b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> index 3353e1e..01eb158 100644
> --- a/src/mesa/drivers/dri/i965/brw_vec4.cpp
> +++ b/src/mesa/drivers/dri/i965/brw_vec4.cpp
> @@ -1427,9 +1427,10 @@ vec4_visitor::dump_instruction(backend_instruction *be_inst, FILE *file)
> case BAD_FILE:
> fprintf(file, "(null)");
> break;
> - default:
> - fprintf(file, "???");
> - break;
> + case IMM:
> + case ATTR:
> + case UNIFORM:
> + unreachable("not reached");
> }
> if (inst->dst.writemask != WRITEMASK_XYZW) {
> fprintf(file, ".");
> @@ -1521,9 +1522,8 @@ vec4_visitor::dump_instruction(backend_instruction *be_inst, FILE *file)
> case BAD_FILE:
> fprintf(file, "(null)");
> break;
> - default:
> - fprintf(file, "???");
> - break;
> + case MRF:
> + unreachable("not reached");
> }
>
> /* Don't print .0; and only VGRFs have reg_offsets and sizes */
> @@ -1839,7 +1839,8 @@ vec4_visitor::convert_to_hw_regs()
> reg = brw_null_reg();
> break;
>
> - default:
> + case MRF:
> + case ATTR:
> unreachable("not reached");
> }
> src.fixed_hw_reg = reg;
> @@ -1871,7 +1872,9 @@ vec4_visitor::convert_to_hw_regs()
> reg = brw_null_reg();
> break;
>
> - default:
> + case IMM:
> + case ATTR:
> + case UNIFORM:
> unreachable("not reached");
> }
>
>
More information about the mesa-dev
mailing list