David Livshin <[EMAIL PROTECTED]> writes:

> >> x.c: In function ‘bar’:
> >> x.c:13: error: unrecognizable insn:
> >> (jump_insn 26 25 27 2 (set (pc)
> >>         (reg:SI 52)) -1 (nil)
> >>     (nil))
> >> x.c:13: internal compiler error: in extract_insn, at recog.c:2084
> >>
> >>
> >> The .md file defines ( mandatory ) "indirect_jump" which allows ( a 
> >> certain kind of ) register as parameter.
> >> What is missing?
> >>
> >
> > Either the pattern doesn't match indirect_jump, or the instruction
> > predicate returns zero, or the operand predicate returns zero.
> >
> > Beyond that we don't have enough information to say.
> >
> > Ian
> >
> Is there a way to find out what was the pattern?

There is no automatic way to find the pattern.  But for this simple
pattern you should hopefully just be able to look into the MD file to
see which one looks like (set (pc) (match_operand ...)).

> And if the operand
> predicate fails, shouldn't gcc attempt to reassign the ( register ,
> "(reg:SI 52)" ) operand in order to satisfy the predicate?

No.  The operand predicate must match or the insn won't match.  Then,
for any operand for which the predicate matches, there must be a
constraint which reload can use for the operand.  That is, given that
the operand predicate matches, reload will modify the operand to
satisfy the constraints.

Ian

Reply via email to