From 4bc47db08dbd2afefc973f63ba5c1f02f95f19b0 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 18 Jan 2023 17:19:37 +0300 Subject: [PATCH] Fix use_list update --- ir_sccp.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/ir_sccp.c b/ir_sccp.c index c62c12a..ab5faf2 100644 --- a/ir_sccp.c +++ b/ir_sccp.c @@ -308,32 +308,32 @@ restart: insn->optx = ctx->fold_insn.opt; if (insn->op1 != ctx->fold_insn.op1) { - if (!IR_IS_CONST_REF(insn->op1)) { + if (!IR_IS_CONST_REF(insn->op1) && insn->op1 != ctx->fold_insn.op2 && insn->op1 != ctx->fold_insn.op3) { ir_sccp_remove_from_use_list(ctx, insn->op1, ref); } - if (!IR_IS_CONST_REF(ctx->fold_insn.op1)) { + if (!IR_IS_CONST_REF(ctx->fold_insn.op1) && ctx->fold_insn.op1 != insn->op2 && ctx->fold_insn.op1 != insn->op3) { ir_sccp_add_to_use_list(ctx, ctx->fold_insn.op1, ref); } - insn->op1 = ctx->fold_insn.op1; } if (insn->op2 != ctx->fold_insn.op2) { - if (!IR_IS_CONST_REF(insn->op2)) { + if (!IR_IS_CONST_REF(insn->op2) && insn->op2 != ctx->fold_insn.op1 && insn->op2 != ctx->fold_insn.op3) { ir_sccp_remove_from_use_list(ctx, insn->op2, ref); } - if (!IR_IS_CONST_REF(ctx->fold_insn.op2)) { + if (!IR_IS_CONST_REF(ctx->fold_insn.op2) && ctx->fold_insn.op2 != insn->op1 && ctx->fold_insn.op2 != insn->op3) { ir_sccp_add_to_use_list(ctx, ctx->fold_insn.op2, ref); } - insn->op2 = ctx->fold_insn.op2; } if (insn->op3 != ctx->fold_insn.op3) { - if (!IR_IS_CONST_REF(insn->op3)) { + if (!IR_IS_CONST_REF(insn->op3) && insn->op3 != ctx->fold_insn.op2 && insn->op3 != ctx->fold_insn.op2) { ir_sccp_remove_from_use_list(ctx, insn->op3, ref); } - if (!IR_IS_CONST_REF(ctx->fold_insn.op3)) { + if (!IR_IS_CONST_REF(ctx->fold_insn.op3) && ctx->fold_insn.op3 != insn->op1 && ctx->fold_insn.op3 != insn->op2) { ir_sccp_add_to_use_list(ctx, ctx->fold_insn.op3, ref); } - insn->op3 = ctx->fold_insn.op3; } + insn->op1 = ctx->fold_insn.op1; + insn->op2 = ctx->fold_insn.op2; + insn->op3 = ctx->fold_insn.op3; use_list = &ctx->use_lists[ref]; n = use_list->count;