United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-6731641 assert(m->adr_type() == mach->adr_type(),"matcher should not change adr type")
JDK-6731641 : assert(m->adr_type() == mach->adr_type(),"matcher should not change adr type")

Details
Type:
Bug
Submit Date:
2008-07-30
Status:
Resolved
Updated Date:
2010-04-03
Project Name:
JDK
Resolved Date:
2008-09-12
Component:
hotspot
OS:
generic
Sub-Component:
compiler
CPU:
generic
Priority:
P4
Resolution:
Fixed
Affected Versions:
hs14
Fixed Versions:
hs14 (b04)

Related Reports
Backport:
Backport:
Relates:

Sub Tasks

Description
CTW runs trigger new assert.  Failure observed on sparc -d32 with at least two different jar files:

cloudscape_classes.jar
jmf.jar

                                    

Comments
EVALUATION

http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/c3e045194476
                                     
2008-08-01
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.
                                     
2008-08-01
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.
                                     
2008-08-01



Hardware and Software, Engineered to Work Together