distribute_links tries to place a log_link for whatever the destination of the modified instruction is. It shouldn't do that when that dest is pc_rtx, which isn't actually a register.
Committing to trunk. Segher 2018-03-14 Segher Boessenkool <seg...@kernel.crashing.org> * combine.c (distribute_links): Don't make a link based on pc_rtx. --- gcc/combine.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/gcc/combine.c b/gcc/combine.c index 0a447b9..eaebe65 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -14812,6 +14812,9 @@ distribute_links (struct insn_link *links) || GET_CODE (reg) == SUBREG) reg = XEXP (reg, 0); + if (reg == pc_rtx) + continue; + /* A LOG_LINK is defined as being placed on the first insn that uses a register and points to the insn that sets the register. Start searching at the next insn after the target of the link and stop -- 1.8.3.1