On Fri, Oct 10, 2008 at 11:14 AM, Andrew Haley <[EMAIL PROTECTED]> wrote:
> Richard Guenther wrote:
>> On Fri, Oct 10, 2008 at 7:55 PM, Andrew Haley <[EMAIL PROTECTED]> wrote:
>>> I have some broken code, compiled from Java source.
>>>
>>> It looks like:
>>>
>>>    D.843 = &java.text.Collator.class$$;
>>>    _Jv_InitClass (D.843);
>>>    D.845 = &_CD_java_text_Collator;
>>>
>>> is being turned into:
>>>
>>>    D.843 = &java.text.Collator.class$$;
>>>    D.845 = &_CD_java_text_Collator;
>>>    _Jv_InitClass (D.843);
>>
>> This is always a valid transformation.
>>
>>> i.e. the memory reference is moved to before the call to _Jv_InitClass.
>>
>> There is no memory reference in the above case, it seems just the address
>> of _CD_java_text_Collator is taken.
>>
>> Or maybe I'm missing sth?
>
> In the RTL code it moves the mem ref, not just the address:
>
> (call (mem:QI (symbol_ref:DI ("_Jv_InitClass") [flags 0x41]
>
> (set (reg/f:DI 95 [ #ref#8#1 ])
>        (mem/s/u/f/j:DI (const:DI (plus:DI (symbol_ref:DI 
> ("_CD_java_text_Collator")
>                    (const_int 16 [0x10])))
>
> is turned to:
>
> (set (reg/f:DI 162 [ #ref#8#1 ])
>        (mem/s/u/f/j:DI (const:DI (plus:DI (symbol_ref:DI 
> ("_CD_java_text_Collator")
>                    (const_int 16 [0x10])))
>
> ...
>
> (call (mem:QI (symbol_ref:DI ("_Jv_InitClass")

Well the mem has a /u on it so it is being marked as MEM_READONLY_P so
it is valid optimization.  Why it is being marked with MEM_READONLY_P,
I don't know.

Thanks,
Andrew Pinski

Reply via email to