freedreno/ir3: treat high vs low reg as conversion
authorRob Clark <robdclark@chromium.org>
Tue, 15 Oct 2019 23:08:26 +0000 (16:08 -0700)
committerRob Clark <robdclark@chromium.org>
Thu, 24 Oct 2019 20:08:56 +0000 (13:08 -0700)
This avoids copy-propagating a high register into an instruction which
cannot consume it.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
src/freedreno/ir3/ir3.h

index 4fc65a90c928dd58ac75bef88ef079cd3065f8f2..7eeb8b4433645421c46f7dbd03500b81be89c4d6 100644 (file)
@@ -646,13 +646,19 @@ static inline bool is_same_type_mov(struct ir3_instruction *instr)
        case OPC_MOV:
                if (instr->cat1.src_type != instr->cat1.dst_type)
                        return false;
+               /* If the type of dest reg and src reg are different,
+                * it shouldn't be considered as same type mov
+                */
+               if (!is_same_type_reg(instr->regs[0], instr->regs[1]))
+                       return false;
                break;
        case OPC_ABSNEG_F:
        case OPC_ABSNEG_S:
                if (instr->flags & IR3_INSTR_SAT)
                        return false;
                /* If the type of dest reg and src reg are different,
-                * it shouldn't be considered as same type mov */
+                * it shouldn't be considered as same type mov
+                */
                if (!is_same_type_reg(instr->regs[0], instr->regs[1]))
                        return false;
                break;