http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48835
Mikael Pettersson <mikpe at it dot uu.se> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rsandifo at gcc dot gnu.org --- Comment #33 from Mikael Pettersson <mikpe at it dot uu.se> 2011-10-12 17:20:46 UTC --- (In reply to comment #32) > (In reply to comment #31) > > * expmed.c > > (store_bit_field_1): Use the new interfaces. > > > > I'll continue trying to minimize the changeset. > > Of the three translation paths in store_bit_field_1 that were updated in that > revision, vec_set, movstrict, and insv, only the insv path update matters for > GNAT/m68k. Progress. The minimal fragment of r171341 that allows r171340 to bootstrap GNAT/m68k is the following: --- gcc-4.7-r171340/gcc/expmed.c.~1~ 2011-03-04 11:31:33.000000000 +0100 +++ gcc-4.7-r171340/gcc/expmed.c 2011-10-11 09:31:31.000000000 +0200 @@ -656,7 +656,8 @@ store_bit_field_1 (rtx str_rtx, unsigned && (bitsize + bitpos > GET_MODE_BITSIZE (op_mode))) && insn_data[CODE_FOR_insv].operand[1].predicate (GEN_INT (bitsize), VOIDmode) - && check_predicate_volatile_ok (CODE_FOR_insv, 0, op0, VOIDmode)) + && check_predicate_volatile_ok (CODE_FOR_insv, 0, op0, + insn_data[CODE_FOR_insv].operand[0].mode)) { int xbitpos = bitpos; rtx value1; That is, when checking insv opnd 0 use the mode from insn_data[] not VOIDmode. (The code looks different in r171341 due new APIs and moving the operand checking to a later point. The essential _functional_ difference wrt opnd 0 is however just the different mode value used in the check.) I'm currently trying to bootstrap GNAT/m68k with gcc-4.6.1 and the above patch. Adding Richard Sandiford to CC: list. Richard, do you have any idea why the above mode change might have unbroken m68k?