[PATCH, 2/2] shrink wrap a function with a single loop: split live_edge

Jiong Wang jiong.wang@arm.com
Mon Sep 22 10:24:00 GMT 2014


On 19/09/14 17:19, Jeff Law wrote:

> On 09/19/14 10:02, Jiong Wang wrote:
>> On 19/09/14 16:49, Jeff Law wrote:
>>>
>>> Probably.  Though I'd be a bit concerned with next_block->next_bb.
>>> Wouldn't it be safer to stash away the relevant basic block prior to the
>>> call to split_edge, then use that saved copy.  Something like this
>>> (untested):
>>>
>>> basic_block old_dest = live_edge->dest;
>>> next_block = split_edge (live_edge);
>>>
>>> /* We create a new basic block.  Call df_grow_bb_info to make sure
>>>       all data structures are allocated.  */
>>> df_grow_bb_info (df_live);
>>> bitmap_and (df_get_live_in (next_block),
>>>                df_get_live_out (bb),
>>>                df_get_live_in (old_dest));
>>>
>>>
>>> The idea being we don't want to depend on the precise ordering blocks in
>>> the block chain.
>>>
>>> Could you try that and see if it does what you need?
>> Jeff,
>>
>>     Thanks, verified, it works.
> Great.  Can you send an updated patchkit for review.

patch attached.

please review, thanks.

gcc/
   * shrink-wrap.c (move_insn_for_shrink_wrap): Initialize the live-in of
   new created BB as the intersection of live-in from "old_dest" and live-out
   from "bb".
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fix.patch
Type: text/x-patch
Size: 769 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20140922/6aeff1cc/attachment.bin>


More information about the Gcc-patches mailing list