[9] RFR: 8044538: assert(which != imm_operand) failed: instruction is not a movq reg, imm64

Tobias Hartmann tobias.hartmann at oracle.com
Tue Jun 10 06:11:17 UTC 2014


Hi Chris,

okay, thanks for the review.

Best,
Tobias

On 06.06.2014 22:22, Christian Thalinger wrote:
>
> On Jun 6, 2014, at 12:34 AM, Tobias Hartmann 
> <tobias.hartmann at oracle.com <mailto:tobias.hartmann at oracle.com>> wrote:
>
>>>>>> Hi Dean,
>>>>>>
>>>>>>> Would it make sense to refactor fix_relocation_after_move() to 
>>>>>>> call target() now?
>>>>>>
>>>>>> Yes, good point. I refactored it.
>>>>>>
>>>>>> New webrev:http://cr.openjdk.java.net/~thartmann/8044538/webrev.01/
>>>>>
>>>>> You can also get rid of:
>>>>>      address target = _target;
>>>>>      if (target == NULL) {
>>>>> in internal_word_Relocation::fix_relocation_after_move.
>>>>
>>>> But then we always execute new_addr_for(..). Isn't this a problem?
>>>
>>> It will get inlined anyway.
>>
>> Sure, but my point is that currently new_addr_for(..) is only 
>> executed if target == NULL. With the changes you suggested it would 
>> always be executed and target is always set to a new value. I don't 
>> think this would be correct, right?
>
> Of course you’re right.  Sorry.
>
>>
>> Thanks,
>> Tobias
>>
>>>
>>>>
>>>> Thanks,
>>>> Tobias
>>>>
>>>>
>>>>>
>>>>>>
>>>>>> Thanks,
>>>>>> Tobias
>>>>>>
>>>>>>>
>>>>>>> dl
>>>>>>>
>>>>>>> On 6/4/2014 1:30 AM, Tobias Hartmann wrote:
>>>>>>>> Hi,
>>>>>>>>
>>>>>>>> please review the following patch for bug 8044538.
>>>>>>>>
>>>>>>>> *Problem*
>>>>>>>> Executing a debug build of HotSpot withthe flags 
>>>>>>>> -XX:+PrintRelocations -Xcomp hits a ShouldNotReachHere() or an 
>>>>>>>> assert in Assembler::locate_operand(..) stating that the 
>>>>>>>> instruction for which we try to find the operand is not valid.
>>>>>>>>
>>>>>>>> The problem occurs while printing the relocation entries for a 
>>>>>>>> C2 compiled function. The C2 compiler adds internal_word_type 
>>>>>>>> relocations for the jump table entries in the constant section 
>>>>>>>> of a method (see Compile::ConstantTable::fill_jump_table(...)). 
>>>>>>>> These relocations are processed by 
>>>>>>>> RelocIterator::print_current(...) and 
>>>>>>>> internal_word_Relocation::target(). 
>>>>>>>> Relocation::pd_get_address_from_code() then tries to retrieve 
>>>>>>>> the address from an instruction but fails because the 
>>>>>>>> relocation points into the constant section only containing the 
>>>>>>>> target address.
>>>>>>>>
>>>>>>>> Bug:https://bugs.openjdk.java.net/browse/JDK-8044538
>>>>>>>>
>>>>>>>> *Solution*
>>>>>>>> The implementation of internal_word_Relocation::target() is 
>>>>>>>> changed to check if the relocation points into the constant 
>>>>>>>> section and if so directly returns the target address instead 
>>>>>>>> of trying to retrieve it from an instruction. The same is 
>>>>>>>> already done in 
>>>>>>>> internal_word_Relocation::fix_relocation_after_move(..).
>>>>>>>>
>>>>>>>> Webrev:http://cr.openjdk.java.net/~thartmann/8044538/webrev.00/
>>>>>>>>
>>>>>>>> *Tests*
>>>>>>>> Failing configuration, JPRT
>>>>>>>>
>>>>>>>> Apparently this did not show up for any of our tests. Do we 
>>>>>>>> need an additional test for this?
>>>>>>>> Since it already fails for JDK 7 and 8. Should we backport the 
>>>>>>>> patch?
>>>>>>>>
>>>>>>>> Thanks,
>>>>>>>> Tobias
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/attachments/20140610/05ad9689/attachment.html>


More information about the hotspot-compiler-dev mailing list