http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53433
--- Comment #23 from Uros Bizjak <ubizjak at gmail dot com> 2012-07-04 10:58:03
UTC ---
Compiling testcase from comment 0, -O0:
(gdb) b builtins.c:3830
Breakpoint 1 at 0x522c91: file ../../gcc-svn/trunk/gcc/builtins.c, line 3830.
(gdb) r
Starting program: /home/uros/gcc-build-xxx/gcc/cc1 -O0 ttt.c
d_unqualified_name
Analyzing compilation unit
Performing interprocedural optimizations
<*free_lang_data> <visibility> <early_local_cleanups>
<whole-program>Assembling functions:
d_unqualified_name
Breakpoint 1, expand_builtin_strcmp (exp=0x7ffff19a5b88, target=0x7ffff1ace360)
at ../../gcc-svn/trunk/gcc/builtins.c:3830
3830 if (len1)
(gdb) li
3827 tree len1 = c_strlen (arg1, 1);
3828 tree len2 = c_strlen (arg2, 1);
3829
3830 if (len1)
(gdb) p insn_mode
$1 = VOIDmode
(gdb) p insn_data[2829]
$2 = {name = 0xdc80ab "cmpstrnsi", output = {single = 0x0, multi = 0x0,
function = 0},
genfun = 0x623d95 <gen_cmpstrnsi(rtx_def*, rtx_def*, rtx_def*, rtx_def*,
rtx_def*)>,
operand = 0xe09e98, n_generator_args = 5 '\005', n_operands = 5 '\005',
n_dups = 0 '\000',
n_alternatives = 0 '\000', output_format = 0 '\000'}
(gdb) p insn_data[2829].operand[0].mode
$3 = SImode
But...
enum machine_mode insn_mode
= insn_data[(int) CODE_FOR_cmpstrnsi].operand[0].mode;
tree len1 = c_strlen (arg1, 1);
tree len2 = c_strlen (arg2, 1);
Something is seriously broken here. insn_mode should get SImode, not VOIDmode.