[PATCH v2] S/390: Allow LARL of literal pool entries
Ilya Leoshkevich
iii@linux.ibm.com
Tue Oct 30 19:07:00 GMT 2018
> Am 30.10.2018 um 18:22 schrieb Ulrich Weigand <uweigand@de.ibm.com>:
>
> Ilya Leoshkevich wrote:
>
>> @@ -8223,6 +8237,18 @@ find_constant_pool_ref (rtx x, rtx *ref)
>> && XINT (x, 1) == UNSPECV_POOL_ENTRY)
>> return;
>>
>> + if (SYMBOL_REF_P (x)
>> + && CONSTANT_POOL_ADDRESS_P (x)
>> + && s390_symbol_larl_p (x))
>> + {
>> + if (*ref == NULL_RTX)
>> + *ref = x;
>> + else
>> + gcc_assert (*ref == x);
>> +
>> + return;
>> + }
>
> This definitely looks wrong. If we haven't annotated the address,
> it should *not* be found by find_constant_pool_ref, since we are
> not going to replace it! That was the whole point of not annotating
> it in the first place …
There are two use cases for find_constant_pool_ref (). One is indeed
replacing annotated references. The other (in s390_mainpool_start ()
and s390_chunkify_start ()) is creating pool entries. So I've decided
to let it find unannotated references for the second use case.
This impacts the first use case as well, that's why I have also changed
replace_constant_pool_ref () to ignore unannotated references.
More information about the Gcc-patches
mailing list