Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 6460907
Votes 0
Synopsis generate meaningful match rules names
Category hotspot:compiler2
Reported Against
Release Fixed hs10(b03), 6u4(b03) (Bug ID:2171813) , 7(b03) (Bug ID:2176748)
State 10-Fix Delivered, bug
Priority: 5-Very Low
Related Bugs
Submit Date 16-AUG-2006
Description
Modify ADLC to generate meaningful match rules names.
For example, for the next match rule:

instruct addI_rReg_mem(rRegI dst, memory src, rFlagsReg cr)
%{
  match(Set dst (AddI dst (LoadI src)));

instead of the current name:

  __intop25_rule

generate this one:

  _AddI_rRegI__LoadI_memory__rule
Posted Date : 2006-08-16 22:33:34.0
Work Around
N/A
Evaluation
See Description.
Posted Date : 2006-08-17 00:15:04.0
Comments
  
  Include a link with my name & email   

Submitted On 09-MAY-2007
I'm not sure if this bug was filed because it was the cause of the following problem mentioned in the .ad files (e.g. sparc.ad):

// Due to a shortcoming in the ADLC, it mixes up expressions like:
// (foo (CmpI (CmpL X Y) 0)) and (bar (CmpI (CmpL X 0L) 0)).  Note the 
// difference between 'Y' and '0L'.  The tree-matches for the CmpI sections 
// are collapsed internally in the ADLC's dfa-gen code.  The match for 
// (CmpI (CmpL X Y) 0) is silently replaced with (CmpI (CmpL X 0L) 0) and the 
// foo match ends up with the wrong leaf.  One fix is to not match both 
// reg-reg and reg-zero forms of long-compare.  This is unfortunate because 
// both forms beat the trinary form of long-compare and both are very useful 
// on Intel which has so few registers.

At least the above mentioned comment is still present in the .ad files although the fix for this bug also fixes the problem mentioned in that comment.

The problem was caused by the old match rule name generator that only took into account the opcode of a node and the names of its left and right operand. That's why the two match rules in the example above '(CmpI (CmpL X Y) 0)' and '(CmpI (CmpL X 0L) 0)' where both maped to "CmpI CmpL immL0" (if we assume that the operand type o '0' is 'immL0') before they where hashed to the same generated name (e.g. '__intop25'). Thats why the two instructions with the specialized match rules where finally folded into one rule.

Notice that this bug may also have caused other problems with deeply nested match rules.
 



PLEASE NOTE: JDK6 is formerly known as Project Mustang