On Sun, Oct 29, 2017 at 10:28 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
> On Sun, Oct 29, 2017 at 6:25 PM, Uros Bizjak <ubiz...@gmail.com> wrote:
>> On Sun, Oct 29, 2017 at 5:55 PM, H.J. Lu <hjl.to...@gmail.com> wrote:
>>> On Sun, Oct 29, 2017 at 12:38 AM, Uros Bizjak <ubiz...@gmail.com> wrote:
>>>> Hello!
>>>>
>>>> split_double_mode tries to split TImode address:
>>>>
>>>> (insn 10 2 11 2 (set (reg/i:TI 0 ax)
>>>>         (mem/u/c:TI (const:DI (unspec:DI [
>>>>                         (symbol_ref:DI ("_ZZ7tempDirvE5cache") [flags 
>>>> 0x2a])
>>>>                     ] UNSPEC_NTPOFF)) [1 cache+0 S16 A64 AS1]))
>>>> to:
>>>>
>>>> (const:DI (unspec:DI [
>>>>                 (symbol_ref:DI ("_ZZ7tempDirvE5cache") [flags 0x2a])
>>>>             ] UNSPEC_NTPOFF))
>>>>
>>>> and
>>>>
>>>> (const:DI (plus:DI (unspec:DI [
>>>>                 (symbol_ref:DI ("_ZZ7tempDirvE5cache") [flags 0x2a])
>>>>             ] UNSPEC_NTPOFF)
>>>>         (const_int 8 [0x8])))
>>>>
>>>> but the later RTX is not recognized as a valid address.
>>>>
>>>> Attached patch allows offsetted UNSPEC_DTPOFF/UNSPEC_NTPOFF
>>>> relocations in legitimate_pic_address_disp_p. In fact, these are
>>>> already allowed in x86_64_immediate_operand, with the immediate
>>>> limited to SImode values.
>>>>
>>>> 2017-10-29  Uros Bizjak  <ubiz...@gmail.com>
>>>>
>>>>     PR target/82725
>>>>     * config/i386/i386.c (legitimate_pic_address_disp_p): Allow
>>>>     UNSPEC_DTPOFF and UNSPEC_NTPOFF with SImode immediate offset.
>>>>
>>>> testsuite/ChangeLog:
>>>>
>>>> 2017-10-29  Uros Bizjak  <ubiz...@gmail.com>
>>>>
>>>>     PR target/82725
>>>>     * g++.dg/pr82725.C: New test.
>>>>
>>>> Bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.
>>>>
>>>> Jakub, HJ, do you have any comments on the patch?
>>>>
>>>> Uros.
>>>
>>> 2 questions:
>>>
>>> 1.  Why isn't legitimate_pic_address_disp_p a static function?
>>
>> Looks like it was used from .md files in the past (it still has a
>> prototype in i386-protos.h). It can be made static, but I don't want
>> to mix cleanups and bugfixes in the same patch.

Make sense.

>>> 2.  Should we add a legitimate_address_disp_p function to
>>> handle both PIC and non-PIC displacement which is also
>>> used by x86_64_immediate_operand?
>>
>> There are opportunities in x86 PIC code for a considerable cleanup.
>> The code looks like x86_64 part was bolted on the i386 code, with some
>> parts of TARGET_64BIT code duplicating generic x86 code.
>
> That is, "... opportunities in x86 relocation handling code ...".
>

I think x86 displacement check should be put in a function and used by
both x86_64_immediate_operand and legitimate_pic_address_disp_p.


-- 
H.J.

Reply via email to