summaryrefslogtreecommitdiff
path: root/src/freedreno/ir3/ir3_ra.c
diff options
context:
space:
mode:
authorKristian H. Kristensen <hoegsberg@google.com>2020-01-09 09:37:35 -0800
committerKristian H. Kristensen <hoegsberg@google.com>2020-01-09 16:03:25 -0800
commitf9d35ea55b1e4822a04928bb007f6a339f3d9a20 (patch)
treee449df91db8cd6adf1c8497997e02e73bb06b0a4 /src/freedreno/ir3/ir3_ra.c
parent85eed5def3056d522971820e2ec3a0a0fd622ff5 (diff)
ir3: Set up full/half register conflicts correctly
Setting up transitive conflicts between a full register and its two half registers (eg r0.x and hr0.x and hr0.y) will make the half registers conflict. They don't actually conflict and this prevents us from using both at the same time. Add and use a new ra helper that sets up transitive conflicts between a register and its subregisters, except it carefully avoids the subregister conflict. Signed-off-by: Kristian H. Kristensen <hoegsberg@google.com> Reviewed-by: Rob Clark <robdclark@chromium.org>
Diffstat (limited to 'src/freedreno/ir3/ir3_ra.c')
-rw-r--r--src/freedreno/ir3/ir3_ra.c3
1 files changed, 1 insertions, 2 deletions
diff --git a/src/freedreno/ir3/ir3_ra.c b/src/freedreno/ir3/ir3_ra.c
index 9f0d71f9f4e..789c08f42ed 100644
--- a/src/freedreno/ir3/ir3_ra.c
+++ b/src/freedreno/ir3/ir3_ra.c
@@ -297,8 +297,7 @@ ir3_ra_alloc_reg_set(struct ir3_compiler *compiler)
unsigned hreg0 = set->gpr_to_ra_reg[i + HALF_OFFSET][(j * 2) + 0];
unsigned hreg1 = set->gpr_to_ra_reg[i + HALF_OFFSET][(j * 2) + 1];
- ra_add_transitive_reg_conflict(set->regs, freg, hreg0);
- ra_add_transitive_reg_conflict(set->regs, freg, hreg1);
+ ra_add_transitive_reg_pair_conflict(set->regs, freg, hreg0, hreg1);
}
}