From 7106d491044fec66141ed9defe95d80650f374e0 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Fri, 21 Sep 2001 14:39:28 +0000 Subject: [PATCH] cfgcleanup.c (flow_find_cross_jump): Delete any REG_EQUAL notes that would be invalid after a merge. * cfgcleanup.c (flow_find_cross_jump): Delete any REG_EQUAL notes that would be invalid after a merge. From-SVN: r45727 --- gcc/ChangeLog | 5 +++++ gcc/cfgcleanup.c | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4dfc2e023c4..49148b0a3c9 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +21-09-2001 Richard Earnshaw (reanrsha@arm.com) + + * cfgcleanup.c (flow_find_cross_jump): Delete any REG_EQUAL notes + that would be invalid after a merge. + Fri Sep 21 14:24:29 CEST 2001 Jan Hubicka * basic-block.h (flow_delete_insn, flow_delete_insn_chain): Kill. diff --git a/gcc/cfgcleanup.c b/gcc/cfgcleanup.c index 314d9f401cf..a3ddcac872e 100644 --- a/gcc/cfgcleanup.c +++ b/gcc/cfgcleanup.c @@ -583,6 +583,22 @@ flow_find_cross_jump (mode, bb1, bb2, f1, f2) /* Don't begin a cross-jump with a USE or CLOBBER insn. */ if (GET_CODE (p1) != USE && GET_CODE (p1) != CLOBBER) { + /* If the merged insns have different REG_EQUAL notes, then + remove them. */ + rtx equiv1 = find_reg_equal_equiv_note (i1); + rtx equiv2 = find_reg_equal_equiv_note (i2); + + if (equiv1 && !equiv2) + remove_note (i1, equiv1); + else if (!equiv1 && equiv2) + remove_note (i2, equiv2); + else if (equiv1 && equiv2 + && !rtx_equal_p (XEXP (equiv1, 0), XEXP (equiv2, 0))) + { + remove_note (i1, equiv1); + remove_note (i2, equiv2); + } + afterlast1 = last1, afterlast2 = last2; last1 = i1, last2 = i2; ninsns++; -- 2.30.2