<p dir="ltr"><br>
On May 27, 2016 2:58 AM, "Jose Fonseca" <<a href="mailto:jfonseca@vmware.com">jfonseca@vmware.com</a>> wrote:<br>
><br>
> On 27/05/16 12:06, Jason Ekstrand wrote:<br>
>><br>
>><br>
>> On May 26, 2016 7:06 PM, "Ian Romanick" <<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a><br>
>> <mailto:<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a>>> wrote:<br>
>>  ><br>
>>  > On 05/26/2016 06:30 PM, Jason Ekstrand wrote:<br>
>>  > > This shrinks the .text section of nir_opt_algebraic.o by 30.5 KB:<br>
>>  > ><br>
>>  > >    text     data      bss      dec      hex  filename<br>
>>  > >   48703    64592        0   113295    1ba8f  nir_opt_algebraic.o<br>
>>  > >   17951    64584        0    82535    14267  nir_opt_algebraic.o<br>
>>  > > ---<br>
>>  > >  src/compiler/nir/nir_search.h | 12 ++++++------<br>
>>  > >  1 file changed, 6 insertions(+), 6 deletions(-)<br>
>>  > ><br>
>>  > > diff --git a/src/compiler/nir/nir_search.h<br>
>> b/src/compiler/nir/nir_search.h<br>
>>  > > index 888a2a3..b97522a 100644<br>
>>  > > --- a/src/compiler/nir/nir_search.h<br>
>>  > > +++ b/src/compiler/nir/nir_search.h<br>
>>  > > @@ -39,23 +39,23 @@ typedef enum {<br>
>>  > >  } nir_search_value_type;<br>
>>  > ><br>
>>  > >  typedef struct {<br>
>>  > > -   nir_search_value_type type;<br>
>>  > > +   uint8_t type; /* enum nir_search_value_type */<br>
>>  ><br>
>>  > Do we lose any checking by having this not be an enum?  Places where the<br>
>>  > compiler would warning about missing cases, etc.  Would telling GCC to<br>
>>  > pack the enum be just as good?  I've gotten similar feedback on similar<br>
>>  > kinds of patches.<br>
>><br>
>> The C99 spec states that bit-field elements must be an integer type or<br>
>> _Bool.  Everything I find indicates that enums aren't allowed.  That<br>
>> said, GCC does allow them and we did use an enum in a bit-field for<br>
>> nir_variable.data.mode for a while.  IIRC, it was making MSVC grumpy<br>
>> which is why we stopped.<br>
>><br>
>> I'd personally rather keep it as an enum four the sake of type safety as<br>
>> you say.  Since this is never included from C++ we may be able to get<br>
>> away with it but I'm not actually sure that makes a difference.  I added<br>
>> Jose to the Cc; maybe he can shed sine light on it.<br>
><br>
><br>
> I recall seeing warnings about bit structs with enums, but I don't recall if it was MSVC or `GCC -Wall`, or what.<br>
><br>
> A grep of Mesa source tree reveals a precedent of code that's being compiled by MSVC:<br>
><br>
> $ git grep '\<enum\>.*:\s*[0-9]\+\s*;'<br>
> src/gallium/auxiliary/tgsi/tgsi_info.h:   enum tgsi_output_mode output_mode:3;<br>
><br>
> It was added in 2012.  So whatever was the limitation, it might have disappeared long time ago.</p>
<p dir="ltr">Of you've got it in TGSI then I think it's fair to say it compiled fine on everything we care about. :-). I'll keep the enums.</p>