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
Index: ../gcc-4_3-branch/gcc/config/bfin/bfin.md =================================================================== --- ../gcc-4_3-branch/gcc/config/bfin/bfin.md (revision 147761) +++ ../gcc-4_3-branch/gcc/config/bfin/bfin.md (working copy) @@ -1611,6 +1611,11 @@ (define_expand "rotlsi3" (match_operand:SI 2 "immediate_operand" "")))] "" { + if (GET_CODE (operands[2]) != CONST_INT) + { + debug_rtx (operands[2]); + abort (); + } if (INTVAL (operands[2]) != 16) FAIL; }) @@ -1621,6 +1626,11 @@ (define_expand "rotrsi3" (match_operand:SI 2 "immediate_operand" "")))] "" { + if (GET_CODE (operands[2]) != CONST_INT) + { + debug_rtx (operands[2]); + abort (); + } if (INTVAL (operands[2]) != 16) FAIL; emit_insn (gen_rotl16 (operands[0], operands[1]));