shrink-wrap leads to ICE at dwarf2cfi.c
Zhenqiang Chen
zhenqiang.chen@linaro.org
Mon Sep 10 08:41:00 GMT 2012
Hi,
I am enabling shrink-wrap for ARM. But get lots of ICE during make
check for THUMB2:
internal compiler error: in maybe_record_trace_start, at dwarf2cfi.c:2227.
Shrink-wrap allows jumps in epilogues. It will generate a common
simple_return block as the destination for multi-branches. More
details at http://old.nabble.com/Shrink-wrapping%3A-Introduction-to31220423.html
With this optimization, it might generate code segment like:
...
bpl .L9
...
push {r4}
...
//NOTE_INSN_EPILOGUE_BEG
ldr r4, [sp], #4
.L9:
bx lr
In function maybe_record_trace_start, there is a check:
/* We ought to have the same state incoming to a given trace no
matter how we arrive at the trace. Anything else means we've
got some kind of optimization error. */
gcc_checking_assert (cfi_row_equal_p (cur_row, ti->beg_row));
The check will fail. Here are the results for cur_row and ti->beg_row
{cfa = {offset = 0, base_offset = 0, reg = 13, indirect = 0, in_use =
0}, cfa_cfi = 0x0, reg_save = 0x0}
{cfa = {offset = 4, base_offset = 0, reg = 13, indirect = 0, in_use =
0}, cfa_cfi = 0x0, reg_save = 0x7ffff726ab70}
The fix mentioned in http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50833
is just to skip the optimization for -O0. It does not help on -O2/-O3.
All the cases pass if I disable the gcc_checking_assert.
1) Is the code segment the expected result of shrink-wrap? If not,
what's the correct one look like?
2) If the code is expected, does the gcc_checking_assert make sense?
Thanks!
-Zhenqiang
More information about the Gcc
mailing list