> This is then combined into:
> 
> newpat = (parallel [
>          (set (pc)
>              (pc))
>          (set (reg/v/f:SI 34 [ stack ])
>              (reg/f:SI 15 %sp))
>      ])
> 
> This isn't a recognized insn, and it needs to be split.  Since it's just
> a parallel of independent sets, combine tries to split it into a pair of
> assignments which look like:
> 
> (insn 16 14 17 2 (set (pc)
>          (pc)) pr52714.c:10 2147483647 {NOOP_MOVE}
>       (nil))
> (jump_insn 17 16 18 2 (set (reg/v/f:SI 34 [ stack ])
>          (reg/f:SI 15 %sp)) pr52714.c:10 38 {*movsi_m68k2}
>       (int_list:REG_BR_PROB 1014 (nil))
>   -> 40)
> 
> 
> Note how the second is a JUMP_INSN, but it doesn't modify the PC.  Opps.
> 
> 
> ISTM the code in combine which tries to rip apart a PARALLEL like that
> needs to ensure that I2 and I3 are both INSNs.

That seems to be an unnecessary pessimization given that the combination looks 
perfectly valid if you swap the insns.  Can't we enhance the code just below 
which chooses the order of the insns after splitting?

-- 
Eric Botcazou

Reply via email to