This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: PATCH: Properly check the end of basic block


On Thu, Nov 18, 2010 at 8:43 PM, Uros Bizjak <ubizjak@gmail.com> wrote:
> On Thu, Nov 18, 2010 at 8:37 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
>
>>>> ix86_pad_returns forgot to update BB_END when it
>>>> replaces it with a new one. OK for trunk?
>>>
>>> IMO, ?you should just move the call to vzeroupper optimization to be
>>> the first thing in ix86_reorg. This way, ix86_pad_short_function,
>>> ix86_pad_returns and ix86_avoid_jump_mispredict will also count
>>> emitted vzeroupper.
>>
>> But it will leave bad BB_END in place. ?Any uses of BB_END later
>> will still be screwed.
>
> I think that Jan or Richard (CC'd) can provide better answer on this issue.

Got it.

It is a pass ordering problem, we free CFG before machine reorg pass,
so BLOCK_FOR_INSN in machine reorg pass does not work anymore (it
returns 0).

remove_insn (called from delete_insn) can correctly fixup BB_END (see
emit-rtl.c, line 3883), but it needs data from BLOCK_FOR_INSN to
figure out BB_END of the bb of the insn it processes.

The fix is then trivial.

2010-11-18  Uros Bizjak  <ubizjak@gmail.com>

	PR middle-end/46546
	* passes.c (init_optimization_passes): Move machine_reorg pass before
	free_cfg pass.

Tested on x86_64-pc-linux-gnu {,-m32}. OK for mainline and release branches?

Uros.

Index: passes.c
===================================================================
--- passes.c	(revision 166920)
+++ passes.c	(working copy)
@@ -1051,8 +1051,8 @@ init_optimization_passes (void)
 	  NEXT_PASS (pass_compute_alignments);
 	  NEXT_PASS (pass_duplicate_computed_gotos);
 	  NEXT_PASS (pass_variable_tracking);
-	  NEXT_PASS (pass_free_cfg);
 	  NEXT_PASS (pass_machine_reorg);
+	  NEXT_PASS (pass_free_cfg);
 	  NEXT_PASS (pass_cleanup_barriers);
 	  NEXT_PASS (pass_delay_slots);
 	  NEXT_PASS (pass_split_for_shorten_branches);


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]