[Mesa-dev] [PATCH] genxml: Remove a redundant identical code for different branches

Jason Ekstrand jason at jlekstrand.net
Tue Jul 25 15:34:02 UTC 2017


Does the redundancy ends up mattering in any way?  A decent optimizing 
compiler should easily be able to get rid of that for you.

--Jason


On July 25, 2017 2:51:31 AM Gwan-gyeong Mun <elongbug at gmail.com> wrote:

> Before, it generates functions like this,
>
> static inline uint32_t ATTRIBUTE_PURE
> RENDER_SURFACE_STATE_RedClearColor_start(const struct gen_device_info *devinfo)
> {
>    switch (devinfo->gen) {
>    case 10: return 384;
>    case 9: return 384;
>    case 8: return 255;
>    case 7:
>       if (devinfo->is_haswell) {
>          return 255;
>       } else {
>          return 255;
>       }
>    case 6: return 0;
>    case 5: return 0;
>    case 4:
>       if (devinfo->is_g4x) {
>          return 0;
>       } else {
>          return 0;
>       }
>    default:
>       unreachable("Invalid hardware generation");
>    }
> }
>
> After, it generates fuctions without a redundant identical code for different
> branches.
>
> static inline uint32_t ATTRIBUTE_PURE
> RENDER_SURFACE_STATE_RedClearColor_start(const struct gen_device_info *devinfo)
> {
>    switch (devinfo->gen) {
>    case 10: return 384;
>    case 9: return 384;
>    case 8: return 255;
>    case 7: return 255;
>    case 6: return 0;
>    case 5: return 0;
>    case 4: return 0;
>    default:
>       unreachable("Invalid hardware generation");
>    }
> }
>
> Signed-off-by: Mun Gwan-gyeong <elongbug at gmail.com>
> ---
>  src/intel/genxml/gen_bits_header.py | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/src/intel/genxml/gen_bits_header.py 
> b/src/intel/genxml/gen_bits_header.py
> index 1b3504073b..8084facdb7 100644
> --- a/src/intel/genxml/gen_bits_header.py
> +++ b/src/intel/genxml/gen_bits_header.py
> @@ -83,20 +83,28 @@ ${item.token_name}_${prop}(const struct gen_device_info 
> *devinfo)
>     case 10: return ${item.get_prop(prop, 10)};
>     case 9: return ${item.get_prop(prop, 9)};
>     case 8: return ${item.get_prop(prop, 8)};
> +% if item.get_prop(prop, 7) == item.get_prop(prop, 7.5):
> +   case 7: return ${item.get_prop(prop, 7)};
> +% else:
>     case 7:
>        if (devinfo->is_haswell) {
>           return ${item.get_prop(prop, 7.5)};
>        } else {
>           return ${item.get_prop(prop, 7)};
>        }
> +% endif
>     case 6: return ${item.get_prop(prop, 6)};
>     case 5: return ${item.get_prop(prop, 5)};
> +% if item.get_prop(prop, 4) == item.get_prop(prop, 4.5):
> +   case 4: return ${item.get_prop(prop, 4)};
> +% else:
>     case 4:
>        if (devinfo->is_g4x) {
>           return ${item.get_prop(prop, 4.5)};
>        } else {
>           return ${item.get_prop(prop, 4)};
>        }
> +% endif
>     default:
>        unreachable("Invalid hardware generation");
>     }
> --
> 2.13.3
>




More information about the mesa-dev mailing list