peephole2: dead regs not marked as dead
Paolo Bonzini
bonzini@gnu.org
Tue Nov 2 10:17:00 GMT 2010
On 11/02/2010 10:41 AM, Georg Lay wrote:
> What I do not understand is*why* this works.
> The internals "16.16 How to Split Instructions" mention two flavours of insn
> splitting: One after reload for the scheduler and one during combine stage, the
> latter just doing single_set --> 2 * single_set splits for insns that do*not*
> match during combine stage.
I think this is extremely out-of-date, I am sorry. I read something
from Ian Lance Taylor on the mailing list recently about the history of
splits. I cannot find it now, but basically the original purpose (help
combine to find matches for "big" patterns representing more than one
instruction) is now almost obsolete with define_insn_and_split, and the
split passes before and after reload have the biggest role in splitting.
> I observed that the insn gets split in split1 even if the splitter produces more
> than two insns and also if optimization is off.
Yes, split1 does unconditional splitting of every define_split that matches.
> That's nice but can I rely on that behaviour? (As far as -O0 is concerned, I
> will emit the special insn just if optimization is turned on, but nevertheless
> it would be interesting to know why this works smooth with -O0 as I expected to
> run in unrecognizable insn or something like that during reload).
Yes, split1 (pass_split_all_insns in recog.c) runs at -O0 too.
Paolo
More information about the Gcc
mailing list