From patchwork Mon Sep 24 10:34:24 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [RFA,1/n] Fix if conversion interactions with block partitioning Date: Mon, 24 Sep 2012 00:34:24 -0000 From: Matthew Gretton-Dann X-Patchwork-Id: 186359 Message-Id: <1586422.8dgmbajGbX@e103209-lin> To: Steven Bosscher Cc: gcc-patches@gcc.gnu.org, jle@rice.edu, rdsandiford@googlemail.com, ebotcazou@libertysurf.fr, rearnsha@arm.com, ramrad01@arm.com On Wednesday 05 September 2012 13:47:19 Steven Bosscher wrote: > On Wed, Sep 5, 2012 at 1:25 PM, Matthew Gretton-Dann wrote: > > + /* If the two blocks are in different partitions we do not want to mark > > + this as a fallthru edge. */ > > + if (BB_PARTITION (b) != BB_PARTITION (c)) > > + return; > > + > > I think you should look for a REG_CROSSING_JUMP note on BB_END instead > of comparing BB_PARTITION. Sorry for the delay in getting back to this. Anyway, I had a look at how other parts of cfgrtl.c handled this and it seems as if they do both your suggestion and the check against different partitions. So this is what I have implemented in the attached patch. Cross tested arm-none-linux-gnueabi with QEmu. OK for trunk? Thanks, Matt gcc/ChangeLog: 2012-09-24 Matthew Gretton-Dann * cfgrtl.c (rtl_tidy_fallthru_edge): Don't tidy edges which cross partitions. diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c index c62b5bc..8fcf7e4 100644 --- a/gcc/cfgrtl.c +++ b/gcc/cfgrtl.c @@ -1572,6 +1572,12 @@ rtl_tidy_fallthru_edge (edge e) if (INSN_P (q)) return; + /* If the two blocks are in different partitions we do not want to mark + this as a fallthru edge. */ + if (find_reg_note (BB_END (b), REG_CROSSING_JUMP, NULL_RTX) + || BB_PARTITION (b) != BB_PARTITION (c)) + return; + /* Remove what will soon cease being the jump insn from the source block. If block B consisted only of this single jump, turn it into a deleted note. */