http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53433
--- Comment #24 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-07-04
11:16:20 UTC ---
The hint in comment #5 together with your analysis points at the initializer
in insn-output.c:
const struct insn_data_d insn_data[] =
{
...
/* /space/rguenther/src/svn/trunk/gcc/config/i386/i386.md:16008 */
{
"cmpstrnsi",
#if HAVE_DESIGNATED_UNION_INITIALIZERS
{ 0 },
#else
{ 0, 0, 0 },
#endif
(insn_gen_fn) gen_cmpstrnsi,
&operand_data[5173],
5,
5,
0,
0,
0
},
and operand_data in
static const struct insn_operand_data operand_data[] =
{
...
{
0,
"",
VOIDmode,
0,
0,
1,
0
},
{ <--- should be this
register_operand,
"",
SImode,
0,
0,
1,
0
},
{
general_operand,
"",
BLKmode,
0,
0,
1,
1
},
so maybe there is an off-by-one error somewhere in constant folding from
initializers?