[shrink-wrap] should not sink instructions which may cause trap ?
Jiong Wang
jiong.wang@arm.com
Mon Sep 29 18:07:00 GMT 2014
On 26/09/14 17:12, Jeff Law wrote:
> On 09/26/14 08:50, Jiong Wang wrote:
>
>>>>> if (may_trap_p (x))
>>>>> don't sink this instruction.
>>>>>
>>>>> any comments?
>>>> Should be checking if x may throw internally instead.
>>> Richard, thanks for the suggestion, have used insn_could_throw_p to do
>>> the check,
>>> which will only do the check when flag_exception and
>>> flag_non_call_exception be true,
>>> so those instruction could still be sink for normal c/c++ program.
>>>
>>> Jeff,
>>>
>>> below is the fix for pr49847.C regression on aarch64. I re-run
>>> full test on
>>> aarch64-none-elf bare metal, no regression.
>>>
>>> bootstrap ok on x86, no regression on check-gcc/g++.
>>>
>>> ok for trunk?
>> (re-sent with changelog entry)
>>
>> gcc/
>>
>> 2014-09-26 Jiong Wang<jiong.wang@arm.com>
>>
>> * shrink-wrap.c (move_insn_for_shrink_wrap): Check
>> "insn_could_throw_p" before
>> sinking insn.
> I think can_throw_internal, per Richi's recommendation is better.
>
> Note that can_throw_internal keys off the existence of the EH landing
> pads for the particular insn.
>
> If flag_exceptions is false (for example), then would not expect those
> landing pads to exist and the insn would not be considered as
> potentially throwing.
>
> Can you test with can_throw_internal to verify it's behaviour and resubmit
thanks for pointing this out, patch updated.
re-tested, pass x86-64 bootstrap and no regression on check-gcc/g++.
pass aarch64-none-elf cross check also.
ok for trunk?
BTW, another bug exposed by linux x86-64 kernel build, and it's at
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63404
the problem is caused by we missed clobber/use check. I will send
a seperate patch for review. really sorry for causing the trouble,
the insn move in generic code is actually not that generic, related
with some backend features...
2014-09-26 Jiong Wang <jiong.wang@arm.com>
* shrink-wrap.c (move_insn_for_shrink_wrap): Check "can_throw_internal" before
sinking insn.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 1.patch
Type: text/x-patch
Size: 575 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-patches/attachments/20140929/390a4f47/attachment.bin>
More information about the Gcc-patches
mailing list