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.roman...@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"); > } > > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev