As I understand it (perhaps wrongly), actual splitting only occurs
after combine pass (by split1 pass).
Combine has some limited splitting capabilities. For example it can
try to combine 3 insns, which might not match a pattern, but can match
a splitter which generates 2 insns. I don't recall the other cases
where combine splits, nor do I offhand recall if the split insns are
ever simplified. Search for "split" in combine.c
I think Andy is closer in its description to what actually happens.
More precisely:
- if you use define_insn_and_split, it can try to combine 3 insns into 1
and later use a splitter to create multiple instruction out of it. But
the splits are not simplified.
- after combining 3 instructions into 1 (fully simplified), if it does
not match it can try to make 2 instructions out of the complex 1 which
did not match. See find_split_point.
Paolo