Message ID | CAAe5K+X+iEwyuGH3=1nii3YDoni3-XeO_v4RVSL+Mfb=SpQSqA@mail.gmail.com |
---|---|
State | New |
Headers | show |
Ping. Thanks, Teresa On Sun, Aug 11, 2013 at 9:35 PM, Teresa Johnson <tejohnson@google.com> wrote: > This patch fixes PR rtl-optimizations/57451 by preventing scopes and > therefore lexical blocks from crossing split section boundaries. > This will prevent debug info generation from using DW_AT_low_pc/high_pc > pairs across the section boundary. > > Bootstrapped and tested on x86_64-unknown-linux-gnu. With this patch, > a profilebootstrap with -freorder-blocks-and-partition force-enabled > also passes. Ok for trunk? > > Thanks, > Teresa > > 2013-08-11 Teresa Johnson <tejohnson@google.com> > > PR rtl-optimizations/57451 > * final.c (reemit_insn_block_notes): Prevent lexical blocks > from crossing split section boundaries. > > Index: final.c > =================================================================== > --- final.c (revision 201644) > +++ final.c (working copy) > @@ -1650,12 +1650,26 @@ reemit_insn_block_notes (void) > rtx insn, note; > > insn = get_insns (); > - if (!active_insn_p (insn)) > - insn = next_active_insn (insn); > - for (; insn; insn = next_active_insn (insn)) > + for (; insn; insn = next_insn (insn)) > { > tree this_block; > > + /* Prevent lexical blocks from straddling section boundaries. */ > + if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_SWITCH_TEXT_SECTIONS) > + { > + for (tree s = cur_block; s != DECL_INITIAL (cfun->decl); > + s = BLOCK_SUPERCONTEXT (s)) > + { > + rtx note = emit_note_before (NOTE_INSN_BLOCK_END, insn); > + NOTE_BLOCK (note) = s; > + note = emit_note_after (NOTE_INSN_BLOCK_BEG, insn); > + NOTE_BLOCK (note) = s; > + } > + } > + > + if (!active_insn_p (insn)) > + continue; > + > /* Avoid putting scope notes between jump table and its label. */ > if (JUMP_TABLE_DATA_P (insn)) > continue; > > -- > Teresa Johnson | Software Engineer | tejohnson@google.com | 408-460-2413
On 08/19/2013 12:34 PM, Teresa Johnson wrote: > Ping. > Thanks, > Teresa > > On Sun, Aug 11, 2013 at 9:35 PM, Teresa Johnson <tejohnson@google.com> wrote: >> This patch fixes PR rtl-optimizations/57451 by preventing scopes and >> therefore lexical blocks from crossing split section boundaries. >> This will prevent debug info generation from using DW_AT_low_pc/high_pc >> pairs across the section boundary. >> >> Bootstrapped and tested on x86_64-unknown-linux-gnu. With this patch, >> a profilebootstrap with -freorder-blocks-and-partition force-enabled >> also passes. Ok for trunk? >> >> Thanks, >> Teresa >> >> 2013-08-11 Teresa Johnson <tejohnson@google.com> >> >> PR rtl-optimizations/57451 >> * final.c (reemit_insn_block_notes): Prevent lexical blocks >> from crossing split section boundaries. This is fine. Is there any way you can turn the steps mentioned in 57451 into a dejagnu testcase? Clearly it would only work in a native configuration due to the need to run the instrumented program. jeff
On Mon, Aug 19, 2013 at 11:44 AM, Jeff Law <law@redhat.com> wrote: > On 08/19/2013 12:34 PM, Teresa Johnson wrote: >> >> Ping. >> Thanks, >> Teresa >> >> On Sun, Aug 11, 2013 at 9:35 PM, Teresa Johnson <tejohnson@google.com> >> wrote: >>> >>> This patch fixes PR rtl-optimizations/57451 by preventing scopes and >>> therefore lexical blocks from crossing split section boundaries. >>> This will prevent debug info generation from using DW_AT_low_pc/high_pc >>> pairs across the section boundary. >>> >>> Bootstrapped and tested on x86_64-unknown-linux-gnu. With this patch, >>> a profilebootstrap with -freorder-blocks-and-partition force-enabled >>> also passes. Ok for trunk? >>> >>> Thanks, >>> Teresa >>> >>> 2013-08-11 Teresa Johnson <tejohnson@google.com> >>> >>> PR rtl-optimizations/57451 >>> * final.c (reemit_insn_block_notes): Prevent lexical blocks >>> from crossing split section boundaries. > > This is fine. Is there any way you can turn the steps mentioned in 57451 > into a dejagnu testcase? Clearly it would only work in a native > configuration due to the need to run the instrumented program. Since this was a compile-time failure (link-time actually), I could just take the existing test case mentioned there and turn it into a "-g -freorder-blocks-and-partition" test (probably by cloning as a new test case the g++.dg/tree-prof testsuite directory). Does that seem reasonable? Thanks, Teresa > > jeff >
Index: final.c =================================================================== --- final.c (revision 201644) +++ final.c (working copy) @@ -1650,12 +1650,26 @@ reemit_insn_block_notes (void) rtx insn, note; insn = get_insns (); - if (!active_insn_p (insn)) - insn = next_active_insn (insn); - for (; insn; insn = next_active_insn (insn)) + for (; insn; insn = next_insn (insn)) { tree this_block; + /* Prevent lexical blocks from straddling section boundaries. */ + if (NOTE_P (insn) && NOTE_KIND (insn) == NOTE_INSN_SWITCH_TEXT_SECTIONS) + { + for (tree s = cur_block; s != DECL_INITIAL (cfun->decl); + s = BLOCK_SUPERCONTEXT (s)) + { + rtx note = emit_note_before (NOTE_INSN_BLOCK_END, insn); + NOTE_BLOCK (note) = s; + note = emit_note_after (NOTE_INSN_BLOCK_BEG, insn); + NOTE_BLOCK (note) = s; + } + } + + if (!active_insn_p (insn)) + continue; + /* Avoid putting scope notes between jump table and its label. */ if (JUMP_TABLE_DATA_P (insn)) continue;