[PATCH] PR target/70439: Properly check conflict between DRAP register and __builtin_eh_return

Uros Bizjak ubizjak@gmail.com
Wed Mar 30 11:30:00 GMT 2016


On Wed, Mar 30, 2016 at 1:00 PM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Wed, Mar 30, 2016 at 12:47 AM, Uros Bizjak <ubizjak@gmail.com> wrote:
>> On Tue, Mar 29, 2016 at 8:56 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
>>> Since %ecx can't be used for both DRAP register and __builtin_eh_return,
>>> we need to check if crtl->drap_reg uses %ecx before using %ecx for
>>> __builtin_eh_return.
>>>
>>> Testing on x86-64.  OK for trunk if there are no regressions?
>>>
>>>
>>> H.J.
>>> ---
>>>         PR target/70439
>>>         * config/i386/i386.c (ix86_expand_epilogue): Properly check
>>>         conflict between DRAP register and __builtin_eh_return.
>>> ---
>>>  gcc/config/i386/i386.c | 5 +++--
>>>  1 file changed, 3 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
>>> index 1639704..aafe171 100644
>>> --- a/gcc/config/i386/i386.c
>>> +++ b/gcc/config/i386/i386.c
>>> @@ -13463,8 +13463,9 @@ ix86_expand_epilogue (int style)
>>>           rtx sa = EH_RETURN_STACKADJ_RTX;
>>>           rtx_insn *insn;
>>>
>>> -         /* Stack align doesn't work with eh_return.  */
>>> -         gcc_assert (!stack_realign_drap);
>>> +         /* %ecx can't be used for both DRAP register and eh_return.  */
>>> +         gcc_assert (!crtl->drap_reg
>>> +                     || REGNO (crtl->drap_reg) != CX_REG);
>>
>> How about:
>>
>>         if (crtl->drap_reg)
>>           gcc_assert (REGNO (crtl->drap_reg) != CX_REG));
>>
>> ?
>>
>>>           /* Neither does regparm nested functions.  */
>>>           gcc_assert (!ix86_static_chain_on_stack);
>>
>> This comment needs to be updated, too.
>>
>> Uros.
>
> Like this?

Yes.

Thanks,
Uros.



More information about the Gcc-patches mailing list