i965: Pass devinfo pointer to is_3src() helpers.
authorFrancisco Jerez <currojerez@riseup.net>
Thu, 28 Apr 2016 07:19:13 +0000 (00:19 -0700)
committerMatt Turner <mattst88@gmail.com>
Wed, 4 May 2016 01:06:21 +0000 (18:06 -0700)
This is not strictly required for the following changes because none
of the three-source opcodes we support at the moment in the compiler
back-end has been removed or redefined, but that's likely to change in
the future.  In any case having hardware instructions specified as a
pair of hardware device and opcode number explicitly in all cases will
simplify the opcode look-up interface introduced in a subsequent
commit, since the opcode number alone is in general ambiguous.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/mesa/drivers/dri/i965/brw_eu.h
src/mesa/drivers/dri/i965/brw_eu_compact.c
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp
src/mesa/drivers/dri/i965/brw_shader.cpp
src/mesa/drivers/dri/i965/brw_shader.h
src/mesa/drivers/dri/i965/brw_vec4.cpp
src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp

index 08ad63ade9f9275b4015302ce007455470412128..89b4e7f9c4b3c6e284bc880c6c51df09a6b8bb13 100644 (file)
@@ -546,7 +546,7 @@ next_offset(const struct brw_device_info *devinfo, void *store, int offset)
 }
 
 static inline bool
-is_3src(enum opcode opcode)
+is_3src(const struct brw_device_info *devinfo, enum opcode opcode)
 {
    return opcode_descs[opcode].nsrc == 3;
 }
index bca8a84154f5df906c95b4355cb17bcf8e7d2a88..5ae3fdd88cc4fa8578b54a733679a9c2c83d04c2 100644 (file)
@@ -968,7 +968,7 @@ brw_try_compact_instruction(const struct brw_device_info *devinfo,
 
    assert(brw_inst_cmpt_control(devinfo, src) == 0);
 
-   if (is_3src(brw_inst_opcode(devinfo, src))) {
+   if (is_3src(devinfo, brw_inst_opcode(devinfo, src))) {
       if (devinfo->gen >= 8) {
          memset(&temp, 0, sizeof(temp));
          if (brw_try_compact_3src_instruction(devinfo, &temp, src)) {
@@ -1202,7 +1202,8 @@ brw_uncompact_instruction(const struct brw_device_info *devinfo, brw_inst *dst,
 {
    memset(dst, 0, sizeof(*dst));
 
-   if (devinfo->gen >= 8 && is_3src(brw_compact_inst_3src_opcode(devinfo, src))) {
+   if (devinfo->gen >= 8 &&
+       is_3src(devinfo, brw_compact_inst_3src_opcode(devinfo, src))) {
       brw_uncompact_3src_instruction(devinfo, dst, src);
       return;
    }
index 392404033b2245483bb129d8be9067dae4a7e0c6..18760dd30b1960d8f6e99574c520bce2aa864d79 100644 (file)
@@ -5372,7 +5372,7 @@ fs_visitor::fixup_3src_null_dest()
    bool progress = false;
 
    foreach_block_and_inst_safe (block, fs_inst, inst, cfg) {
-      if (inst->is_3src() && inst->dst.is_null()) {
+      if (inst->is_3src(devinfo) && inst->dst.is_null()) {
          inst->dst = fs_reg(VGRF, alloc.allocate(dispatch_width / 8),
                             inst->dst.type);
          progress = true;
index ffab0a8ebd578e39c0ff71c453ba0a0559725a97..2e8c84fa34e9e3550088c4127d35c859d09035ec 100644 (file)
@@ -293,7 +293,7 @@ can_take_stride(fs_inst *inst, unsigned arg, unsigned stride,
     *    This is applicable to 32b datatypes and 16b datatype. 64b datatypes
     *    cannot use the replicate control.
     */
-   if (inst->is_3src()) {
+   if (inst->is_3src(devinfo)) {
       if (type_sz(inst->src[arg].type) > 4)
          return stride == 1;
       else
index a2281a79a1804c81fc2d855376b01258ffcb7089..d417d3dd4a8bd889d7ea9d1533ae82b7fa739dc5 100644 (file)
@@ -737,9 +737,9 @@ backend_instruction::is_commutative() const
 }
 
 bool
-backend_instruction::is_3src() const
+backend_instruction::is_3src(const struct brw_device_info *devinfo) const
 {
-   return ::is_3src(opcode);
+   return ::is_3src(devinfo, opcode);
 }
 
 bool
index 8ab8d5bf9707c4edeb59e8e7943851404fc63ed2..d77531c11da6b6c2afe5aabaa7c31e93645a8fdd 100644 (file)
@@ -101,7 +101,7 @@ struct bblock_t;
 
 #ifdef __cplusplus
 struct backend_instruction : public exec_node {
-   bool is_3src() const;
+   bool is_3src(const struct brw_device_info *devinfo) const;
    bool is_tex() const;
    bool is_math() const;
    bool is_control_flow() const;
index 599e45e434a120fb8e9afb3f8986790b388dcb49..815eaed6859cceb22bc3952820e2474e1ff0c713 100644 (file)
@@ -1868,7 +1868,7 @@ vec4_visitor::convert_to_hw_regs()
          src = reg;
       }
 
-      if (inst->is_3src()) {
+      if (inst->is_3src(devinfo)) {
          /* 3-src instructions with scalar sources support arbitrary subnr,
           * but don't actually use swizzles.  Convert swizzle into subnr.
           */
index 92423e1f9424506aa0c11ef5df4b3759e28036f1..8faa241bd550005e0a30bf87fa98907c82106240 100644 (file)
@@ -324,7 +324,7 @@ try_copy_propagate(const struct brw_device_info *devinfo,
 
    unsigned composed_swizzle = brw_compose_swizzle(inst->src[arg].swizzle,
                                                    value.swizzle);
-   if (inst->is_3src() &&
+   if (inst->is_3src(devinfo) &&
        (value.file == UNIFORM ||
         (value.file == ATTR && attributes_per_reg != 1)) &&
        !brw_is_single_value_swizzle(composed_swizzle))