Yep, I'm seeing this behaviour (getting the error using your patch). But I'm confused as to why the define_expand is being considered when the predicate doesn't match. Apologies if this is a dim question, I'm still learning.
-----Original Message----- From: Bernd Schmidt [mailto:ber...@codesourcery.com] Sent: 31 March 2011 17:02 To: Richard Henderson Cc: Henderson, Stuart; gcc-patches@gcc.gnu.org Subject: Re: [Patch] Bfin: Ensure rotrsi and rotlsi don't accept non-const INTVALS On 03/31/2011 05:42 PM, Richard Henderson wrote: >> (rotate:SI (match_operand:SI 1 "register_operand" "") >> - (match_operand:SI 2 "immediate_operand" "")))] >> + (match_operand:SI 2 "const_int_operand" "")))] >> "" >> { >> - if (INTVAL (operands[2]) != 16) >> + if (GET_CODE (operands[2]) != CONST_INT || INTVAL (operands[2]) != 16) >> FAIL; > > The point was, that you'd not need the CONST_INT check anymore, > because it's handled by the predicate. I have a dim memory of the problem being that something didn't check the predicate. Sure enough, with the patch below applied to a 4.3 tree, I get /local/src/egcs/gcc-4_3-branch/gcc/testsuite/gcc.c-torture/execute/20020226-1.c:43: internal compiler error: in gen_rotrsi3, at config/bfin/bfin.md:1632 Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. compiler exited with status 1 output is: (reg:SI 193) Stuart, try to identify whether it still happens. If so, a better fix would be to change the expanders to honour the predicate. Bernd