On Wed, Feb 15, 2012 at 10:04:15AM +0000, Paulo J. Matos wrote: > It doesn't look like you can actually do that because, according to > the internals manual: > "For a named pattern, the condition (if present) may not depend on > the data in the insn being matched, but only the target-machine-type > flags. The compiler needs to test these conditions during > initialization in order to learn exactly which named instructions > are available in a particular run." > > And GCC complains with: > insn-opinit.c: In function 'init_all_optabs': > insn-opinit.c:24: error: 'operands' undeclared (first use in this function) > insn-opinit.c:24: error: (Each undeclared identifier is reported only once > insn-opinit.c:24: error: for each function it appears in.) > > Did I miss something in the example?
In define_expand (or define_insn of a standard named pattern) you can't use operands, those conditions are used to select whether the given insn is available at all. But you can use it in define_insn conditions for other insn patterns. So you can have (define_expand "iorqi3" ... "") (define_insn "*iorqi3" ... "register_operand (operands[1], QImode) || register_operand (operands[2], QImode)" ... ) See config/i386/i386.md for thousands of examples. Jakub