Summary: * Test shrink-wrap code
Details: 1. Add simple_return support in function thumb2_expand_return for shrink-wrap. Here is the make check status * One new fail is due to code size increase. We'd disable it when optimizing function for size on THUMB2. * Other new fails is due to dwarf info. Root cause is ICE at function maybe_record_trace_start
gcc_checking_assert (cfi_row_equal_p (cur_row, ti->beg_row));
Here is the failed code segment:
tst ... L1 push {r4} ... ldr r4, ... L1: bx lr // common simple return from two branches.
Here are the results for cur_row and ti->beg_row of trace starting at L1:
{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}
Try gcc-linaro-4.5-2011.03. It does not generate the common bx lr.
test L1 push {r4} ... pop {r4} bx lr L1: bx lr
There is similar bug about it. But the fix is useless for us: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50833
Plans: * Continue shrink-wrap task.
Best regards! -Zhenqiang
On 10 September 2012 18:47, Zhenqiang Chen zhenqiang.chen@linaro.org wrote:
Summary:
- Test shrink-wrap code
Details:
- Add simple_return support in function thumb2_expand_return for
shrink-wrap. Here is the make check status
- One new fail is due to code size increase. We'd disable it when
optimizing function for size on THUMB2.
- Other new fails is due to dwarf info. Root cause is ICE at function
maybe_record_trace_start
gcc_checking_assert (cfi_row_equal_p (cur_row, ti->beg_row));
Here is the failed code segment:
tst ... L1 push {r4} ... ldr r4, ... L1: bx lr // common simple return from two branches.
Hmm, any chance of a conditional return instead in the future?
Here are the results for cur_row and ti->beg_row of trace starting at L1:
{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}
Try gcc-linaro-4.5-2011.03. It does not generate the common bx lr.
test L1 push {r4} ... pop {r4} bx lr L1: bx lr
There is similar bug about it. But the fix is useless for us: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50833
Plans:
- Continue shrink-wrap task.
Best regards! -Zhenqiang
linaro-toolchain mailing list linaro-toolchain@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-toolchain
On 11 September 2012 09:46, Michael Hope michael.hope@linaro.org wrote:
On 10 September 2012 18:47, Zhenqiang Chen zhenqiang.chen@linaro.org wrote:
Summary:
- Test shrink-wrap code
Details:
- Add simple_return support in function thumb2_expand_return for
shrink-wrap. Here is the make check status
- One new fail is due to code size increase. We'd disable it when
optimizing function for size on THUMB2.
- Other new fails is due to dwarf info. Root cause is ICE at function
maybe_record_trace_start
gcc_checking_assert (cfi_row_equal_p (cur_row, ti->beg_row));
Here is the failed code segment:
tst ... L1 push {r4} ... ldr r4, ... L1: bx lr // common simple return from two branches.
Hmm, any chance of a conditional return instead in the future?
ARM mode had supported conditional return. We can update current patterns or add new instruction patterns to support it for THUMB mode. I will work on it later.
Thanks! -Zhenqiang
On 11 September 2012 10:34, Zhenqiang Chen zhenqiang.chen@linaro.org wrote:
On 11 September 2012 09:46, Michael Hope michael.hope@linaro.org wrote:
On 10 September 2012 18:47, Zhenqiang Chen zhenqiang.chen@linaro.org wrote:
Summary:
- Test shrink-wrap code
Details:
- Add simple_return support in function thumb2_expand_return for
shrink-wrap. Here is the make check status
- One new fail is due to code size increase. We'd disable it when
optimizing function for size on THUMB2.
- Other new fails is due to dwarf info. Root cause is ICE at function
maybe_record_trace_start
gcc_checking_assert (cfi_row_equal_p (cur_row, ti->beg_row));
Here is the failed code segment:
tst ... L1 push {r4} ... ldr r4, ... L1: bx lr // common simple return from two branches.
Hmm, any chance of a conditional return instead in the future?
ARM mode had supported conditional return. We can update current patterns or add new instruction patterns to support it for THUMB mode. I will work on it later.
Just have a try. In THUMB mode, conditional instruction should be in IT block. To support conditional return, we have to generate an IT block. In this case, one more instruction is added for the fall through path.
Thanks! -Zhenqiang
linaro-toolchain@lists.linaro.org