From 692a2580eb4e70f8d6b620df3f9d1bf8e23f5bd1 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Fri, 22 Jul 2022 15:48:07 -0400 Subject: [PATCH] pan/bi: Use builder for IADD -> IADDC opt As before. Signed-off-by: Alyssa Rosenzweig Part-of: --- src/panfrost/bifrost/bi_schedule.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/panfrost/bifrost/bi_schedule.c b/src/panfrost/bifrost/bi_schedule.c index d121a73..ffd9a7f 100644 --- a/src/panfrost/bifrost/bi_schedule.c +++ b/src/panfrost/bifrost/bi_schedule.c @@ -1293,13 +1293,17 @@ bi_take_instr(bi_context *ctx, struct bi_worklist st, bi_pop_instr(clause, tuple, instr, live_after_temp, fma); /* Fixups */ + bi_builder b = bi_init_builder(ctx, bi_before_instr(instr)); + if (instr->op == BI_OPCODE_IADD_U32 && fma) { assert(bi_can_iaddc(instr)); - instr->op = BI_OPCODE_IADDC_I32; - instr->src[2] = bi_zero(); - instr->nr_srcs = 3; + bi_instr *iaddc = + bi_iaddc_i32_to(&b, instr->dest[0], instr->src[0], + instr->src[1], bi_zero()); + + bi_remove_instruction(instr); + instr = iaddc; } else if (fma && bi_can_replace_with_csel(instr)) { - bi_builder b = bi_init_builder(ctx, bi_before_instr(instr)); bi_instr *csel = bi_csel_from_mux(&b, instr, false); bi_remove_instruction(instr); -- 2.7.4