i965: Optimize reading the destination type
authorMatt Turner <mattst88@gmail.com>
Thu, 3 Aug 2017 06:20:00 +0000 (23:20 -0700)
committerMatt Turner <mattst88@gmail.com>
Mon, 21 Aug 2017 21:05:23 +0000 (14:05 -0700)
brw_hw_type_to_reg_type() needs to know only whether the file is
BRW_IMMEDIATE_VALUE or not, which is not a valid file for the
destination. gcc and clang will evaluate __builtin_strcmp() at compile
time, so we can use it to pass a constant file for the destination.

   text    data     bss     dec     hex filename
7816214  346248  420496 8582958  82f72e i965_dri.so before
7816070  346248  420496 8582814  82f69e i965_dri.so after

Reviewed-by: Scott D Phillips <scott.d.phillips@intel.com>
src/intel/compiler/brw_inst.h

index eacc0a024a799e9cc52de3df6e5401570489e405..e9dad38f6995d95e9efe9370e04986992917f53a 100644 (file)
@@ -669,7 +669,9 @@ static inline enum brw_reg_type                                               \
 brw_inst_##reg##_type(const struct gen_device_info *devinfo,                  \
                       const brw_inst *inst)                                   \
 {                                                                             \
-   unsigned file = brw_inst_##reg##_reg_file(devinfo, inst);                  \
+   unsigned file = __builtin_strcmp("dst", #reg) == 0 ?                       \
+                   BRW_GENERAL_REGISTER_FILE :                                \
+                   brw_inst_##reg##_reg_file(devinfo, inst);                  \
    unsigned hw_type = brw_inst_##reg##_reg_hw_type(devinfo, inst);            \
    return brw_hw_type_to_reg_type(devinfo, (enum brw_reg_file)file, hw_type); \
 }