RFR (XS): 8036667: "assert(adr->is_AddP() && adr->in(AddPNode::Offset)->is_Con()) failed: offset is a constant" with FoldStableValues on
vladimir.x.ivanov at oracle.com
Thu Mar 6 09:40:20 PST 2014
Unfortunately, replacing tp->offset() with
AddPNode::Ideal_base_and_offset doesn't work for other cases in
LoadNode::Value. I have to revert to using tp->offset().
Updated webrev: http://cr.openjdk.java.net/~vlivanov/8036667/webrev.02/
I did some testing and haven't found any problems with the adr being
PhiNode, but I'm not sure I understand all aspects of this code. So I
decided to skip phi case by adding adr->is_AddP() case. Some other cases
in LoadNode::Value have similar check.
On 3/6/14 6:01 AM, Vladimir Ivanov wrote:
>> Why you did changes in extract_uncommon_trap_request()? How we can get
>> phi there?
> It's a fix for a crash w/ -XX:+TraceIterGVN.
> Will file a separate bug to track it, as you suggested.
>> What is 'off' value in this case? How you can get constant value from C2
>> type system (tp->offset()) but not from looking on ideal nodes?
> Good point! My fix isn't correct in some cases.
> In case only 1 phi input has non-top type, it should be safe to use
> offset. But when at least 2 inputs are live, it's not correct (same
> offset, but different address).
> So, I need to ignore phi case completely.
> Updated fix: http://cr.openjdk.java.net/~vlivanov/8036667/webrev.01/
> Best regards,
> Vladimir Ivanov
>> On 3/5/14 4:26 PM, Vladimir Ivanov wrote:
>>> 10 lines changed: 8 ins; 0 del; 2 mod
>>> The assert is too strong. It doesn't take into account the case when
>>> constant offset comes from phi node.
>>> The fix is to relax the assertion by skipping phi node case. I decided
>>> to keep it simple and avoided doing deep verification of the graph.
>>> Also, fixed a crash w/ -XX:+TraceIterGVN (see callnode.cpp).
>>> Testing: failing tests.
>>> Best regards,
>>> Vladimir Ivanov
More information about the hotspot-compiler-dev