intel/compiler: don't instantiate a builder for each instruction
authorPaulo Zanoni <paulo.r.zanoni@intel.com>
Wed, 10 Jul 2019 23:48:01 +0000 (16:48 -0700)
committerCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Mon, 12 Aug 2019 22:16:23 +0000 (15:16 -0700)
Don't instantiate a builder for each instruction during
lower_integer_multiplication(). Instantiate one only when needed.

On the other hand, these unneeded builders don't seem to cost much to
init, so I don't expect any significant difference in performance:
this is mostly about code organization.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Caio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
src/intel/compiler/brw_fs.cpp
src/intel/compiler/brw_fs.h

index 755157cf1cfaf1b29a09581be1922eb418105e19..3db3332a2089f1db1bb8bc18c09be4c6e7d8d842 100644 (file)
@@ -3863,9 +3863,10 @@ fs_visitor::lower_load_payload()
 }
 
 void
-fs_visitor::lower_mul_dword_inst(fs_inst *inst, bblock_t *block,
-                                 const fs_builder &ibld)
+fs_visitor::lower_mul_dword_inst(fs_inst *inst, bblock_t *block)
 {
+   const fs_builder ibld(this, block, inst);
+
    if (inst->src[1].file == IMM && inst->src[1].ud < (1 << 16)) {
       /* The MUL instruction isn't commutative. On Gen <= 6, only the low
        * 16-bits of src0 are read, and on Gen >= 7 only the low 16-bits of
@@ -3990,9 +3991,10 @@ fs_visitor::lower_mul_dword_inst(fs_inst *inst, bblock_t *block,
 }
 
 void
-fs_visitor::lower_mulh_inst(fs_inst *inst, bblock_t *block,
-                            const fs_builder &ibld)
+fs_visitor::lower_mulh_inst(fs_inst *inst, bblock_t *block)
 {
+   const fs_builder ibld(this, block, inst);
+
    /* According to the BDW+ BSpec page for the "Multiply Accumulate
     * High" instruction:
     *
@@ -4059,8 +4061,6 @@ fs_visitor::lower_integer_multiplication()
    bool progress = false;
 
    foreach_block_and_inst_safe(block, fs_inst, inst, cfg) {
-      const fs_builder ibld(this, block, inst);
-
       if (inst->opcode == BRW_OPCODE_MUL) {
          if (inst->dst.is_accumulator() ||
              (inst->dst.type != BRW_REGISTER_TYPE_D &&
@@ -4070,9 +4070,9 @@ fs_visitor::lower_integer_multiplication()
          if (devinfo->has_integer_dword_mul)
             continue;
 
-         lower_mul_dword_inst(inst, block, ibld);
+         lower_mul_dword_inst(inst, block);
       } else if (inst->opcode == SHADER_OPCODE_MULH) {
-         lower_mulh_inst(inst, block, ibld);
+         lower_mulh_inst(inst, block);
       } else {
          continue;
       }
index 82d572916cef440797764efd07faa8e8761a9325..fb78fa829a0090a9ae0325119d6356ab207edf88 100644 (file)
@@ -406,10 +406,8 @@ private:
 
    void resolve_inot_sources(const brw::fs_builder &bld, nir_alu_instr *instr,
                              fs_reg *op);
-   void lower_mul_dword_inst(fs_inst *inst, bblock_t *block,
-                             const brw::fs_builder &ibld);
-   void lower_mulh_inst(fs_inst *inst, bblock_t *block,
-                        const brw::fs_builder &ibld);
+   void lower_mul_dword_inst(fs_inst *inst, bblock_t *block);
+   void lower_mulh_inst(fs_inst *inst, bblock_t *block);
 };
 
 /**