Other target-patches exposed this for me. I have on the 4.7-branch an insn:
(jump_insn 245 277 246 (set (pc) (label_ref:SI 312)) whatever.c:511 -1 (nil) -> 187) and two (or more) pattern candidates in the following .md file order: (define_insn "jump" [(set (pc) (label_ref (match_operand 0 "" "")))] "" "ba %l0%#" [(set_attr "slottable" "has_slot")]) (define_insn "*indirect_jump_non_v32" [(set (pc) (match_operand:SI 0 "nonimmediate_operand" "rm"))] "!TARGET_V32" "jump %0") As you know (or may want to dispute for some reason, so let's settle that first), operands without specified modes on matching patterns are wild-card matches; not VOIDmode matches or a kind of lesser-order matches. (ISTR some change, at least some discussion, that label_refs now should have modes, but if the change happened, the documentation wasn't sufficiently updated. If so, the mode on the "jump"-pattern above should be :SI, but when it's not specified, it's a wild-card, so should still *match*. It could also be that the :SI is put there in error, but still the pattern recognition order observation is valid.) It seems that since 4.3, some change now causes the generated pattern-matching tree in insn-recog.c:recog to try the pattern *with the specified mode* before (eventually, seemingly last) the one with the unspecified-mode label_ref. What I'll do next depends. Is there a reason to keep that change (and document it) or should the bug just be fixed? brgds, H-P