------- Additional Comments From steven at gcc dot gnu dot org 2005-08-14 12:55 ------- This patch is a bit paradoxical: There is an insn that we want to expand in the unroller, so we know that have_insn_for *should* return true if the MD is sane. But the MD can't be sane for an insane ISA combination like x87/mmx. So indeed, the insn that src comes from is valid but the insn does not exist according to have_insn_for. This happens because have_insn_for checks that there is an optab for this combination of operation and mode. The patch is obviously suboptimal (Uros' patch would fix the problem for real, someone review it please! :-) but probably this kind of precaution is a good idea anyway... Index: loop-unroll.c =================================================================== RCS file: /cvs/gcc/gcc/gcc/loop-unroll.c,v retrieving revision 1.37 diff -u -3 -p -r1.37 loop-unroll.c --- loop-unroll.c 3 Aug 2005 13:34:35 -0000 1.37 +++ loop-unroll.c 14 Aug 2005 12:51:16 -0000 @@ -1574,6 +1574,9 @@ analyze_insn_to_expand_var (struct loop && GET_CODE (src) != MINUS && GET_CODE (src) != MULT) return NULL; + + if (!have_insn_for (GET_CODE (src), GET_MODE (src))) + return NULL; if (!XEXP (src, 0)) return NULL;
-- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=23376