This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
insn matching problem
- To: egcs at cygnus dot com
- Subject: insn matching problem
- From: Bill Currie <bcurrie at tssc dot co dot nz>
- Date: Thu, 05 Nov 1998 10:32:33 +1300
- Organization: NZ Telecommincations Systems Support Center
I'm having problems getting a complicated insn to match and I'm not sure
what I've done wrong.
Here is the error message.
foo.c:74: internal error--unrecognizable insn:
(insn 33 31 34 (set (reg:SI 74)
(ior:SI (const_int 0)
(zero_extract:SI (const_int 1)
(const_int:SI 16)
(const_int 0)))) -1 (nil)
(nil))
The insn is generated by this code:
emit_insn (gen_rtx_SET(VOIDmode,
operands[0],
gen_rtx_IOR(SImode,const0_rtx,
gen_rtx_ZERO_EXTRACT(SImode,operands[1],
gen_rtx_raw_CONST_INT(SImode,16),const0_rtx))));
This is what I thought the insn should match against.
(define_insn ""
[(set (match_operand:SI 0 "register_operand" "=r")
(ior:SI (const_int 0)
(zero_extract:SI (match_operand:SI 1 "immediate_operand" "i")
(const_int:SI 16)
(const_int 0))))]
""
"orh %H1,%?r0,%0")
What am I doing wrong? I'll continue trying to figure it out in the
mean time, but any help will be appreciated. Would getting rid of the
SImodes for the const_ints help?
BTW, this is for the i860 (big endian).
Bill
--
Leave others their otherness