On 23/07/12 14:57, Ulrich Weigand wrote: > Richard Earnshaw wrote: >>>> Hmm, I wonder if we should just unconditionally call split_all_insns() >>>> at the start of md_reorg when -O0. This would address your problem, but >>>> have the added benefit that the length calculations would be more >>>> accurate. We're going to have to split the insns anyway during output, >>>> so why not get it over and done with... > > OK, here's a patch to implement this solution, which does indeed fix my > original problem as well. > > Tested on arm-linux-gnueabi with no regressions. > > OK for mainline? > > Thanks, > Ulrich > > > ChangeLog: > > * config/arm/arm.c (arm_reorg): Ensure all insns are split. > > Index: gcc/config/arm/arm.c > =================================================================== > *** gcc/config/arm/arm.c (revision 189459) > --- gcc/config/arm/arm.c (working copy) > *************** arm_reorg (void) > *** 13359,13364 **** > --- 13359,13371 ---- > if (TARGET_THUMB2) > thumb2_reorg (); > > + /* Ensure all insns that must be split have been split at this point. > + Otherwise, the pool placement code below may compute incorrect > + insn lengths. Note that when optimizing, all insns have already > + been split at this point. */ > + if (!optimize) > + split_all_insns_noflow (); > + > minipool_fix_head = minipool_fix_tail = NULL; > > /* The first insn must always be a note, or the code below won't > >
OK. R.