<html>
<head>
<meta http-equiv="Content-Type" content="text/html"/>
</head>
<body>
<div style="color: black;">
<p style="margin: 0 0 1em 0; color: black; font-family: sans-serif;">On
July 25, 2017 8:16:42 PM "Mun, Gwan-gyeong" <elongbug@gmail.com>
wrote:</p>
<p style="margin: 0 0 1em 0; color: black; font-family: sans-serif;">>
Hi Jason,<br>
> You are right, as you commented, compilers can eliminate these
redundancies<br>
> easy.<br>
> However I think we don't need to generate redundant codes.<br>
</p>
<p style="margin: 0 0 1em 0; color: black;"><br>
The approach we generally take with generators like this is to not really
care too much what the generated C code looks like at that much so long as
it compiles down to what we want.  We are far more concerned with
keeping the generator itself as simple and easy to maintain as
possible.  If we make the C compiler do a little more work, that's
considered an acceptable loss so long as the final compiled binary is
good.  The part of the code which is maintained by humans is the
generator so the ease of maintenance of the generator is more important
than the generated C code.</p>
<p style="margin: 0 0 1em 0; color: black;">This patch makes the generator
more complicated just to improve the generated C even though it compiles to
the same binary.  As such, this patch makes the codebase *less*
maintainable with no improvement to the generated binary.  This is not
something we want to do.</p>
<p style="margin: 0 0 1em 0; color: black;">--Jason<br>
</p>
<p style="margin: 0 0 1em 0; color: black; font-family: sans-serif;"><br>
> Best regards,<br>
> Gwan-gyeong<br>
><br>
> 2017년 7월 26일 (수) 오전 12:34, Jason Ekstrand
<jason@jlekstrand.net>님이 작성:<br>
><br>
>> Does the redundancy ends up mattering in any way?  A decent
optimizing<br>
>> compiler should easily be able to get rid of that for you.<br>
>><br>
>> --Jason<br>
>><br>
>><br>
>> On July 25, 2017 2:51:31 AM Gwan-gyeong Mun
<elongbug@gmail.com> wrote:<br>
>><br>
>> > Before, it generates functions like this,<br>
>> ><br>
>> > static inline uint32_t ATTRIBUTE_PURE<br>
>> > RENDER_SURFACE_STATE_RedClearColor_start(const struct
gen_device_info<br>
>> *devinfo)<br>
>> > {<br>
>> >    switch (devinfo->gen) {<br>
>> >    case 10: return 384;<br>
>> >    case 9: return 384;<br>
>> >    case 8: return 255;<br>
>> >    case 7:<br>
>> >       if
(devinfo->is_haswell) {<br>
>> >          return
255;<br>
>> >       } else {<br>
>> >          return
255;<br>
>> >       }<br>
>> >    case 6: return 0;<br>
>> >    case 5: return 0;<br>
>> >    case 4:<br>
>> >       if (devinfo->is_g4x) {<br>
>> >          return
0;<br>
>> >       } else {<br>
>> >          return
0;<br>
>> >       }<br>
>> >    default:<br>
>> >      
unreachable("Invalid hardware generation");<br>
>> >    }<br>
>> > }<br>
>> ><br>
>> > After, it generates fuctions without a redundant identical
code for<br>
>> different<br>
>> > branches.<br>
>> ><br>
>> > static inline uint32_t ATTRIBUTE_PURE<br>
>> > RENDER_SURFACE_STATE_RedClearColor_start(const struct
gen_device_info<br>
>> *devinfo)<br>
>> > {<br>
>> >    switch (devinfo->gen) {<br>
>> >    case 10: return 384;<br>
>> >    case 9: return 384;<br>
>> >    case 8: return 255;<br>
>> >    case 7: return 255;<br>
>> >    case 6: return 0;<br>
>> >    case 5: return 0;<br>
>> >    case 4: return 0;<br>
>> >    default:<br>
>> >      
unreachable("Invalid hardware generation");<br>
>> >    }<br>
>> > }<br>
>> ><br>
>> > Signed-off-by: Mun Gwan-gyeong <elongbug@gmail.com><br>
>> > ---<br>
>> >  src/intel/genxml/gen_bits_header.py | 8 ++++++++<br>
>> >  1 file changed, 8 insertions(+)<br>
>> ><br>
>> > diff --git a/src/intel/genxml/gen_bits_header.py<br>
>> > b/src/intel/genxml/gen_bits_header.py<br>
>> > index 1b3504073b..8084facdb7 100644<br>
>> > --- a/src/intel/genxml/gen_bits_header.py<br>
>> > +++ b/src/intel/genxml/gen_bits_header.py<br>
>> > @@ -83,20 +83,28 @@ ${item.token_name}_${prop}(const struct<br>
>> gen_device_info<br>
>> > *devinfo)<br>
>> >     case 10: return ${item.get_prop(prop,
10)};<br>
>> >     case 9: return ${item.get_prop(prop,
9)};<br>
>> >     case 8: return ${item.get_prop(prop,
8)};<br>
>> > +% if item.get_prop(prop, 7) == item.get_prop(prop, 7.5):<br>
>> > +   case 7: return ${item.get_prop(prop, 7)};<br>
>> > +% else:<br>
>> >     case 7:<br>
>> >        if
(devinfo->is_haswell) {<br>
>> >          
return ${item.get_prop(prop, 7.5)};<br>
>> >        } else {<br>
>> >          
return ${item.get_prop(prop, 7)};<br>
>> >        }<br>
>> > +% endif<br>
>> >     case 6: return ${item.get_prop(prop,
6)};<br>
>> >     case 5: return ${item.get_prop(prop,
5)};<br>
>> > +% if item.get_prop(prop, 4) == item.get_prop(prop, 4.5):<br>
>> > +   case 4: return ${item.get_prop(prop, 4)};<br>
>> > +% else:<br>
>> >     case 4:<br>
>> >        if
(devinfo->is_g4x) {<br>
>> >          
return ${item.get_prop(prop, 4.5)};<br>
>> >        } else {<br>
>> >          
return ${item.get_prop(prop, 4)};<br>
>> >        }<br>
>> > +% endif<br>
>> >     default:<br>
>> >       
unreachable("Invalid hardware generation");<br>
>> >     }<br>
>> > --<br>
>> > 2.13.3<br>
>> ><br>
>><br>
>><br>
>> --<br>
> Gwan-gyeong Mun<br>
</p>
</div>
</body>
</html>