On 27/05/16 12:06, Jason Ekstrand wrote:

On May 26, 2016 7:06 PM, "Ian Romanick" <[email protected]
<mailto:[email protected]>> wrote:
 >
 > On 05/26/2016 06:30 PM, Jason Ekstrand wrote:
 > > This shrinks the .text section of nir_opt_algebraic.o by 30.5 KB:
 > >
 > >    text     data      bss      dec      hex  filename
 > >   48703    64592        0   113295    1ba8f  nir_opt_algebraic.o
 > >   17951    64584        0    82535    14267  nir_opt_algebraic.o
 > > ---
 > >  src/compiler/nir/nir_search.h | 12 ++++++------
 > >  1 file changed, 6 insertions(+), 6 deletions(-)
 > >
 > > diff --git a/src/compiler/nir/nir_search.h
b/src/compiler/nir/nir_search.h
 > > index 888a2a3..b97522a 100644
 > > --- a/src/compiler/nir/nir_search.h
 > > +++ b/src/compiler/nir/nir_search.h
 > > @@ -39,23 +39,23 @@ typedef enum {
 > >  } nir_search_value_type;
 > >
 > >  typedef struct {
 > > -   nir_search_value_type type;
 > > +   uint8_t type; /* enum nir_search_value_type */
 >
 > Do we lose any checking by having this not be an enum?  Places where the
 > compiler would warning about missing cases, etc.  Would telling GCC to
 > pack the enum be just as good?  I've gotten similar feedback on similar
 > kinds of patches.

The C99 spec states that bit-field elements must be an integer type or
_Bool.  Everything I find indicates that enums aren't allowed.  That
said, GCC does allow them and we did use an enum in a bit-field for
nir_variable.data.mode for a while.  IIRC, it was making MSVC grumpy
which is why we stopped.

I'd personally rather keep it as an enum four the sake of type safety as
you say.  Since this is never included from C++ we may be able to get
away with it but I'm not actually sure that makes a difference.  I added
Jose to the Cc; maybe he can shed sine light on it.

I recall seeing warnings about bit structs with enums, but I don't recall if it was MSVC or `GCC -Wall`, or what.

A grep of Mesa source tree reveals a precedent of code that's being compiled by MSVC:

$ git grep '\<enum\>.*:\s*[0-9]\+\s*;'
src/gallium/auxiliary/tgsi/tgsi_info.h: enum tgsi_output_mode output_mode:3;

It was added in 2012. So whatever was the limitation, it might have disappeared long time ago.


Jose

_______________________________________________
mesa-dev mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to