JDK-6731641 : assert(m->adr_type() == mach->adr_type(),"matcher should not change adr type")
Type:Bug
Component:hotspot
Sub-Component:compiler
Affected Version:hs14
Priority:P4
Status:Resolved
Resolution:Fixed
OS:generic
CPU:generic
Submitted:2008-07-30
Updated:2010-04-03
Resolved:2008-09-12
The Version table provides details related to the release that this issue/RFE will be addressed.
Unresolved : Release in which this issue/RFE will be addressed. Resolved: Release in which this issue/RFE has been resolved. Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.
CTW runs trigger new assert. Failure observed on sparc -d32 with at least two different jar files:
cloudscape_classes.jar
jmf.jar
Comments
EVALUATION
AddPNode::bottom_type() and AddPNode::mach_bottom_type() produce
different result since the type of in(Address) edge is more
precise (TypPtr::NotNull) then the type of in(Base) edge.
The split_thru_phi code in loopopt.cpp and in memory.cpp
sets igvn.type(x) but does not reset bottom_type for TypeNode* x.
As result TypeNode::_type is not reset.
Missing bottom_type() method for mach node CMoveN.
In ConnectionGraph::split_AddP() the type 't' could be subclass of 'base_t'.
As result t->offset() could be large then base_t's size and it will
cause the failure in add_offset() with narrow oops since TypeOopPtr()
constructor verifies correctness of the offset.
It could happend on subclass's branch (from the type profiling
inlining) which was not eliminated during parsing since the exactness
of the allocation type was not propagated to the subclass type check.
Do nothing for such AddP node and don't process its users since
this code branch will go away.
01-08-2008
SUGGESTED FIX
- Fix AddPNode::mach_bottom_type() to use more precise type for bailout.
- Reset bottom_type for TypeNode in the split_thru_phi code.
- Add missing bottom_type() method for mach node CMoveN (copied from CMoveP).
- Don't generate CMove nodes when a phi has DecodeN/EncodeP users since
they could be candidates for split_thru_phi optimization.
- Add missing checks for LoadN, LoadNKlass.
- Fix TypeNarrowOop::xmeet() - return BOTTOM when meet with pointer types
instead of error. And add missing NarrowOop cases.
- Fix ConnectionGraph::split_AddP().
- Add early cut in PredictedCallGenerator::generate() to prevent parsing
a subclass method call if the subclass type check failed.