1 /*
   2  * Copyright (c) 1998, 2016, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 // FORMS.CPP - Definitions for ADL Parser Forms Classes
  26 #include "adlc.hpp"
  27 
  28 //==============================Instructions===================================
  29 //------------------------------InstructForm-----------------------------------
  30 InstructForm::InstructForm(const char *id, bool ideal_only)
  31   : _ident(id), _ideal_only(ideal_only),
  32     _localNames(cmpstr, hashstr, Form::arena),
  33     _effects(cmpstr, hashstr, Form::arena),
  34     _is_mach_constant(false),
  35     _needs_constant_base(false),
  36     _has_call(false)
  37 {
  38       _ftype = Form::INS;
  39 
  40       _matrule              = NULL;
  41       _insencode            = NULL;
  42       _constant             = NULL;
  43       _is_postalloc_expand  = false;
  44       _opcode               = NULL;
  45       _size                 = NULL;
  46       _attribs              = NULL;
  47       _predicate            = NULL;
  48       _exprule              = NULL;
  49       _rewrule              = NULL;
  50       _format               = NULL;
  51       _peephole             = NULL;
  52       _ins_pipe             = NULL;
  53       _uniq_idx             = NULL;
  54       _num_uniq             = 0;
  55       _cisc_spill_operand   = Not_cisc_spillable;// Which operand may cisc-spill
  56       _cisc_spill_alternate = NULL;            // possible cisc replacement
  57       _cisc_reg_mask_name   = NULL;
  58       _is_cisc_alternate    = false;
  59       _is_short_branch      = false;
  60       _short_branch_form    = NULL;
  61       _alignment            = 1;
  62 }
  63 
  64 InstructForm::InstructForm(const char *id, InstructForm *instr, MatchRule *rule)
  65   : _ident(id), _ideal_only(false),
  66     _localNames(instr->_localNames),
  67     _effects(instr->_effects),
  68     _is_mach_constant(false),
  69     _needs_constant_base(false),
  70     _has_call(false)
  71 {
  72       _ftype = Form::INS;
  73 
  74       _matrule               = rule;
  75       _insencode             = instr->_insencode;
  76       _constant              = instr->_constant;
  77       _is_postalloc_expand   = instr->_is_postalloc_expand;
  78       _opcode                = instr->_opcode;
  79       _size                  = instr->_size;
  80       _attribs               = instr->_attribs;
  81       _predicate             = instr->_predicate;
  82       _exprule               = instr->_exprule;
  83       _rewrule               = instr->_rewrule;
  84       _format                = instr->_format;
  85       _peephole              = instr->_peephole;
  86       _ins_pipe              = instr->_ins_pipe;
  87       _uniq_idx              = instr->_uniq_idx;
  88       _num_uniq              = instr->_num_uniq;
  89       _cisc_spill_operand    = Not_cisc_spillable; // Which operand may cisc-spill
  90       _cisc_spill_alternate  = NULL;               // possible cisc replacement
  91       _cisc_reg_mask_name    = NULL;
  92       _is_cisc_alternate     = false;
  93       _is_short_branch       = false;
  94       _short_branch_form     = NULL;
  95       _alignment             = 1;
  96      // Copy parameters
  97      const char *name;
  98      instr->_parameters.reset();
  99      for (; (name = instr->_parameters.iter()) != NULL;)
 100        _parameters.addName(name);
 101 }
 102 
 103 InstructForm::~InstructForm() {
 104 }
 105 
 106 InstructForm *InstructForm::is_instruction() const {
 107   return (InstructForm*)this;
 108 }
 109 
 110 bool InstructForm::ideal_only() const {
 111   return _ideal_only;
 112 }
 113 
 114 bool InstructForm::sets_result() const {
 115   return (_matrule != NULL && _matrule->sets_result());
 116 }
 117 
 118 bool InstructForm::needs_projections() {
 119   _components.reset();
 120   for( Component *comp; (comp = _components.iter()) != NULL; ) {
 121     if (comp->isa(Component::KILL)) {
 122       return true;
 123     }
 124   }
 125   return false;
 126 }
 127 
 128 
 129 bool InstructForm::has_temps() {
 130   if (_matrule) {
 131     // Examine each component to see if it is a TEMP
 132     _components.reset();
 133     // Skip the first component, if already handled as (SET dst (...))
 134     Component *comp = NULL;
 135     if (sets_result())  comp = _components.iter();
 136     while ((comp = _components.iter()) != NULL) {
 137       if (comp->isa(Component::TEMP)) {
 138         return true;
 139       }
 140     }
 141   }
 142 
 143   return false;
 144 }
 145 
 146 uint InstructForm::num_defs_or_kills() {
 147   uint   defs_or_kills = 0;
 148 
 149   _components.reset();
 150   for( Component *comp; (comp = _components.iter()) != NULL; ) {
 151     if( comp->isa(Component::DEF) || comp->isa(Component::KILL) ) {
 152       ++defs_or_kills;
 153     }
 154   }
 155 
 156   return  defs_or_kills;
 157 }
 158 
 159 // This instruction has an expand rule?
 160 bool InstructForm::expands() const {
 161   return ( _exprule != NULL );
 162 }
 163 
 164 // This instruction has a late expand rule?
 165 bool InstructForm::postalloc_expands() const {
 166   return _is_postalloc_expand;
 167 }
 168 
 169 // This instruction has a peephole rule?
 170 Peephole *InstructForm::peepholes() const {
 171   return _peephole;
 172 }
 173 
 174 // This instruction has a peephole rule?
 175 void InstructForm::append_peephole(Peephole *peephole) {
 176   if( _peephole == NULL ) {
 177     _peephole = peephole;
 178   } else {
 179     _peephole->append_peephole(peephole);
 180   }
 181 }
 182 
 183 
 184 // ideal opcode enumeration
 185 const char *InstructForm::ideal_Opcode( FormDict &globalNames )  const {
 186   if( !_matrule ) return "Node"; // Something weird
 187   // Chain rules do not really have ideal Opcodes; use their source
 188   // operand ideal Opcode instead.
 189   if( is_simple_chain_rule(globalNames) ) {
 190     const char *src = _matrule->_rChild->_opType;
 191     OperandForm *src_op = globalNames[src]->is_operand();
 192     assert( src_op, "Not operand class of chain rule" );
 193     if( !src_op->_matrule ) return "Node";
 194     return src_op->_matrule->_opType;
 195   }
 196   // Operand chain rules do not really have ideal Opcodes
 197   if( _matrule->is_chain_rule(globalNames) )
 198     return "Node";
 199   return strcmp(_matrule->_opType,"Set")
 200     ? _matrule->_opType
 201     : _matrule->_rChild->_opType;
 202 }
 203 
 204 // Recursive check on all operands' match rules in my match rule
 205 bool InstructForm::is_pinned(FormDict &globals) {
 206   if ( ! _matrule)  return false;
 207 
 208   int  index   = 0;
 209   if (_matrule->find_type("Goto",          index)) return true;
 210   if (_matrule->find_type("If",            index)) return true;
 211   if (_matrule->find_type("CountedLoopEnd",index)) return true;
 212   if (_matrule->find_type("Return",        index)) return true;
 213   if (_matrule->find_type("Rethrow",       index)) return true;
 214   if (_matrule->find_type("TailCall",      index)) return true;
 215   if (_matrule->find_type("TailJump",      index)) return true;
 216   if (_matrule->find_type("Halt",          index)) return true;
 217   if (_matrule->find_type("Jump",          index)) return true;
 218 
 219   return is_parm(globals);
 220 }
 221 
 222 // Recursive check on all operands' match rules in my match rule
 223 bool InstructForm::is_projection(FormDict &globals) {
 224   if ( ! _matrule)  return false;
 225 
 226   int  index   = 0;
 227   if (_matrule->find_type("Goto",    index)) return true;
 228   if (_matrule->find_type("Return",  index)) return true;
 229   if (_matrule->find_type("Rethrow", index)) return true;
 230   if (_matrule->find_type("TailCall",index)) return true;
 231   if (_matrule->find_type("TailJump",index)) return true;
 232   if (_matrule->find_type("Halt",    index)) return true;
 233 
 234   return false;
 235 }
 236 
 237 // Recursive check on all operands' match rules in my match rule
 238 bool InstructForm::is_parm(FormDict &globals) {
 239   if ( ! _matrule)  return false;
 240 
 241   int  index   = 0;
 242   if (_matrule->find_type("Parm",index)) return true;
 243 
 244   return false;
 245 }
 246 
 247 bool InstructForm::is_ideal_negD() const {
 248   return (_matrule && _matrule->_rChild && strcmp(_matrule->_rChild->_opType, "NegD") == 0);
 249 }
 250 
 251 // Return 'true' if this instruction matches an ideal 'Copy*' node
 252 int InstructForm::is_ideal_copy() const {
 253   return _matrule ? _matrule->is_ideal_copy() : 0;
 254 }
 255 
 256 // Return 'true' if this instruction is too complex to rematerialize.
 257 int InstructForm::is_expensive() const {
 258   // We can prove it is cheap if it has an empty encoding.
 259   // This helps with platform-specific nops like ThreadLocal and RoundFloat.
 260   if (is_empty_encoding())
 261     return 0;
 262 
 263   if (is_tls_instruction())
 264     return 1;
 265 
 266   if (_matrule == NULL)  return 0;
 267 
 268   return _matrule->is_expensive();
 269 }
 270 
 271 // Has an empty encoding if _size is a constant zero or there
 272 // are no ins_encode tokens.
 273 int InstructForm::is_empty_encoding() const {
 274   if (_insencode != NULL) {
 275     _insencode->reset();
 276     if (_insencode->encode_class_iter() == NULL) {
 277       return 1;
 278     }
 279   }
 280   if (_size != NULL && strcmp(_size, "0") == 0) {
 281     return 1;
 282   }
 283   return 0;
 284 }
 285 
 286 int InstructForm::is_tls_instruction() const {
 287   if (_ident != NULL &&
 288       ( ! strcmp( _ident,"tlsLoadP") ||
 289         ! strncmp(_ident,"tlsLoadP_",9)) ) {
 290     return 1;
 291   }
 292 
 293   if (_matrule != NULL && _insencode != NULL) {
 294     const char* opType = _matrule->_opType;
 295     if (strcmp(opType, "Set")==0)
 296       opType = _matrule->_rChild->_opType;
 297     if (strcmp(opType,"ThreadLocal")==0) {
 298       fprintf(stderr, "Warning: ThreadLocal instruction %s should be named 'tlsLoadP_*'\n",
 299               (_ident == NULL ? "NULL" : _ident));
 300       return 1;
 301     }
 302   }
 303 
 304   return 0;
 305 }
 306 
 307 
 308 // Return 'true' if this instruction matches an ideal 'If' node
 309 bool InstructForm::is_ideal_if() const {
 310   if( _matrule == NULL ) return false;
 311 
 312   return _matrule->is_ideal_if();
 313 }
 314 
 315 // Return 'true' if this instruction matches an ideal 'FastLock' node
 316 bool InstructForm::is_ideal_fastlock() const {
 317   if( _matrule == NULL ) return false;
 318 
 319   return _matrule->is_ideal_fastlock();
 320 }
 321 
 322 // Return 'true' if this instruction matches an ideal 'MemBarXXX' node
 323 bool InstructForm::is_ideal_membar() const {
 324   if( _matrule == NULL ) return false;
 325 
 326   return _matrule->is_ideal_membar();
 327 }
 328 
 329 // Return 'true' if this instruction matches an ideal 'LoadPC' node
 330 bool InstructForm::is_ideal_loadPC() const {
 331   if( _matrule == NULL ) return false;
 332 
 333   return _matrule->is_ideal_loadPC();
 334 }
 335 
 336 // Return 'true' if this instruction matches an ideal 'Box' node
 337 bool InstructForm::is_ideal_box() const {
 338   if( _matrule == NULL ) return false;
 339 
 340   return _matrule->is_ideal_box();
 341 }
 342 
 343 // Return 'true' if this instruction matches an ideal 'Goto' node
 344 bool InstructForm::is_ideal_goto() const {
 345   if( _matrule == NULL ) return false;
 346 
 347   return _matrule->is_ideal_goto();
 348 }
 349 
 350 // Return 'true' if this instruction matches an ideal 'Jump' node
 351 bool InstructForm::is_ideal_jump() const {
 352   if( _matrule == NULL ) return false;
 353 
 354   return _matrule->is_ideal_jump();
 355 }
 356 
 357 // Return 'true' if instruction matches ideal 'If' | 'Goto' | 'CountedLoopEnd'
 358 bool InstructForm::is_ideal_branch() const {
 359   if( _matrule == NULL ) return false;
 360 
 361   return _matrule->is_ideal_if() || _matrule->is_ideal_goto();
 362 }
 363 
 364 
 365 // Return 'true' if this instruction matches an ideal 'Return' node
 366 bool InstructForm::is_ideal_return() const {
 367   if( _matrule == NULL ) return false;
 368 
 369   // Check MatchRule to see if the first entry is the ideal "Return" node
 370   int  index   = 0;
 371   if (_matrule->find_type("Return",index)) return true;
 372   if (_matrule->find_type("Rethrow",index)) return true;
 373   if (_matrule->find_type("TailCall",index)) return true;
 374   if (_matrule->find_type("TailJump",index)) return true;
 375 
 376   return false;
 377 }
 378 
 379 // Return 'true' if this instruction matches an ideal 'Halt' node
 380 bool InstructForm::is_ideal_halt() const {
 381   int  index   = 0;
 382   return _matrule && _matrule->find_type("Halt",index);
 383 }
 384 
 385 // Return 'true' if this instruction matches an ideal 'SafePoint' node
 386 bool InstructForm::is_ideal_safepoint() const {
 387   int  index   = 0;
 388   return _matrule && _matrule->find_type("SafePoint",index);
 389 }
 390 
 391 // Return 'true' if this instruction matches an ideal 'Nop' node
 392 bool InstructForm::is_ideal_nop() const {
 393   return _ident && _ident[0] == 'N' && _ident[1] == 'o' && _ident[2] == 'p' && _ident[3] == '_';
 394 }
 395 
 396 bool InstructForm::is_ideal_control() const {
 397   if ( ! _matrule)  return false;
 398 
 399   return is_ideal_return() || is_ideal_branch() || _matrule->is_ideal_jump() || is_ideal_halt();
 400 }
 401 
 402 // Return 'true' if this instruction matches an ideal 'Call' node
 403 Form::CallType InstructForm::is_ideal_call() const {
 404   if( _matrule == NULL ) return Form::invalid_type;
 405 
 406   // Check MatchRule to see if the first entry is the ideal "Call" node
 407   int  idx   = 0;
 408   if(_matrule->find_type("CallStaticJava",idx))   return Form::JAVA_STATIC;
 409   idx = 0;
 410   if(_matrule->find_type("Lock",idx))             return Form::JAVA_STATIC;
 411   idx = 0;
 412   if(_matrule->find_type("Unlock",idx))           return Form::JAVA_STATIC;
 413   idx = 0;
 414   if(_matrule->find_type("CallDynamicJava",idx))  return Form::JAVA_DYNAMIC;
 415   idx = 0;
 416   if(_matrule->find_type("CallRuntime",idx))      return Form::JAVA_RUNTIME;
 417   idx = 0;
 418   if(_matrule->find_type("CallLeaf",idx))         return Form::JAVA_LEAF;
 419   idx = 0;
 420   if(_matrule->find_type("CallLeafNoFP",idx))     return Form::JAVA_LEAF;
 421   idx = 0;
 422 
 423   return Form::invalid_type;
 424 }
 425 
 426 // Return 'true' if this instruction matches an ideal 'Load?' node
 427 Form::DataType InstructForm::is_ideal_load() const {
 428   if( _matrule == NULL ) return Form::none;
 429 
 430   return  _matrule->is_ideal_load();
 431 }
 432 
 433 // Return 'true' if this instruction matches an ideal 'LoadKlass' node
 434 bool InstructForm::skip_antidep_check() const {
 435   if( _matrule == NULL ) return false;
 436 
 437   return  _matrule->skip_antidep_check();
 438 }
 439 
 440 // Return 'true' if this instruction matches an ideal 'Load?' node
 441 Form::DataType InstructForm::is_ideal_store() const {
 442   if( _matrule == NULL ) return Form::none;
 443 
 444   return  _matrule->is_ideal_store();
 445 }
 446 
 447 // Return 'true' if this instruction matches an ideal vector node
 448 bool InstructForm::is_vector() const {
 449   if( _matrule == NULL ) return false;
 450 
 451   return _matrule->is_vector();
 452 }
 453 
 454 
 455 // Return the input register that must match the output register
 456 // If this is not required, return 0
 457 uint InstructForm::two_address(FormDict &globals) {
 458   uint  matching_input = 0;
 459   if(_components.count() == 0) return 0;
 460 
 461   _components.reset();
 462   Component *comp = _components.iter();
 463   // Check if there is a DEF
 464   if( comp->isa(Component::DEF) ) {
 465     // Check that this is a register
 466     const char  *def_type = comp->_type;
 467     const Form  *form     = globals[def_type];
 468     OperandForm *op       = form->is_operand();
 469     if( op ) {
 470       if( op->constrained_reg_class() != NULL &&
 471           op->interface_type(globals) == Form::register_interface ) {
 472         // Remember the local name for equality test later
 473         const char *def_name = comp->_name;
 474         // Check if a component has the same name and is a USE
 475         do {
 476           if( comp->isa(Component::USE) && strcmp(comp->_name,def_name)==0 ) {
 477             return operand_position_format(def_name);
 478           }
 479         } while( (comp = _components.iter()) != NULL);
 480       }
 481     }
 482   }
 483 
 484   return 0;
 485 }
 486 
 487 
 488 // when chaining a constant to an instruction, returns 'true' and sets opType
 489 Form::DataType InstructForm::is_chain_of_constant(FormDict &globals) {
 490   const char *dummy  = NULL;
 491   const char *dummy2 = NULL;
 492   return is_chain_of_constant(globals, dummy, dummy2);
 493 }
 494 Form::DataType InstructForm::is_chain_of_constant(FormDict &globals,
 495                 const char * &opTypeParam) {
 496   const char *result = NULL;
 497 
 498   return is_chain_of_constant(globals, opTypeParam, result);
 499 }
 500 
 501 Form::DataType InstructForm::is_chain_of_constant(FormDict &globals,
 502                 const char * &opTypeParam, const char * &resultParam) {
 503   Form::DataType  data_type = Form::none;
 504   if ( ! _matrule)  return data_type;
 505 
 506   // !!!!!
 507   // The source of the chain rule is 'position = 1'
 508   uint         position = 1;
 509   const char  *result   = NULL;
 510   const char  *name     = NULL;
 511   const char  *opType   = NULL;
 512   // Here base_operand is looking for an ideal type to be returned (opType).
 513   if ( _matrule->is_chain_rule(globals)
 514        && _matrule->base_operand(position, globals, result, name, opType) ) {
 515     data_type = ideal_to_const_type(opType);
 516 
 517     // if it isn't an ideal constant type, just return
 518     if ( data_type == Form::none ) return data_type;
 519 
 520     // Ideal constant types also adjust the opType parameter.
 521     resultParam = result;
 522     opTypeParam = opType;
 523     return data_type;
 524   }
 525 
 526   return data_type;
 527 }
 528 
 529 // Check if a simple chain rule
 530 bool InstructForm::is_simple_chain_rule(FormDict &globals) const {
 531   if( _matrule && _matrule->sets_result()
 532       && _matrule->_rChild->_lChild == NULL
 533       && globals[_matrule->_rChild->_opType]
 534       && globals[_matrule->_rChild->_opType]->is_opclass() ) {
 535     return true;
 536   }
 537   return false;
 538 }
 539 
 540 // check for structural rematerialization
 541 bool InstructForm::rematerialize(FormDict &globals, RegisterForm *registers ) {
 542   bool   rematerialize = false;
 543 
 544   Form::DataType data_type = is_chain_of_constant(globals);
 545   if( data_type != Form::none )
 546     rematerialize = true;
 547 
 548   // Constants
 549   if( _components.count() == 1 && _components[0]->is(Component::USE_DEF) )
 550     rematerialize = true;
 551 
 552   // Pseudo-constants (values easily available to the runtime)
 553   if (is_empty_encoding() && is_tls_instruction())
 554     rematerialize = true;
 555 
 556   // 1-input, 1-output, such as copies or increments.
 557   if( _components.count() == 2 &&
 558       _components[0]->is(Component::DEF) &&
 559       _components[1]->isa(Component::USE) )
 560     rematerialize = true;
 561 
 562   // Check for an ideal 'Load?' and eliminate rematerialize option
 563   if ( is_ideal_load() != Form::none || // Ideal load?  Do not rematerialize
 564        is_ideal_copy() != Form::none || // Ideal copy?  Do not rematerialize
 565        is_expensive()  != Form::none) { // Expensive?   Do not rematerialize
 566     rematerialize = false;
 567   }
 568 
 569   // Always rematerialize the flags.  They are more expensive to save &
 570   // restore than to recompute (and possibly spill the compare's inputs).
 571   if( _components.count() >= 1 ) {
 572     Component *c = _components[0];
 573     const Form *form = globals[c->_type];
 574     OperandForm *opform = form->is_operand();
 575     if( opform ) {
 576       // Avoid the special stack_slots register classes
 577       const char *rc_name = opform->constrained_reg_class();
 578       if( rc_name ) {
 579         if( strcmp(rc_name,"stack_slots") ) {
 580           // Check for ideal_type of RegFlags
 581           const char *type = opform->ideal_type( globals, registers );
 582           if( (type != NULL) && !strcmp(type, "RegFlags") )
 583             rematerialize = true;
 584         } else
 585           rematerialize = false; // Do not rematerialize things target stk
 586       }
 587     }
 588   }
 589 
 590   return rematerialize;
 591 }
 592 
 593 // loads from memory, so must check for anti-dependence
 594 bool InstructForm::needs_anti_dependence_check(FormDict &globals) const {
 595   if ( skip_antidep_check() ) return false;
 596 
 597   // Machine independent loads must be checked for anti-dependences
 598   if( is_ideal_load() != Form::none )  return true;
 599 
 600   // !!!!! !!!!! !!!!!
 601   // TEMPORARY
 602   // if( is_simple_chain_rule(globals) )  return false;
 603 
 604   // String.(compareTo/equals/indexOf) and Arrays.equals use many memorys edges,
 605   // but writes none
 606   if( _matrule && _matrule->_rChild &&
 607       ( strcmp(_matrule->_rChild->_opType,"StrComp"    )==0 ||
 608         strcmp(_matrule->_rChild->_opType,"StrEquals"  )==0 ||
 609         strcmp(_matrule->_rChild->_opType,"StrIndexOf" )==0 ||
 610         strcmp(_matrule->_rChild->_opType,"StrIndexOfChar" )==0 ||
 611         strcmp(_matrule->_rChild->_opType,"HasNegatives" )==0 ||
 612         strcmp(_matrule->_rChild->_opType,"AryEq"      )==0 ))
 613     return true;
 614 
 615   // Check if instruction has a USE of a memory operand class, but no defs
 616   bool USE_of_memory  = false;
 617   bool DEF_of_memory  = false;
 618   Component     *comp = NULL;
 619   ComponentList &components = (ComponentList &)_components;
 620 
 621   components.reset();
 622   while( (comp = components.iter()) != NULL ) {
 623     const Form  *form = globals[comp->_type];
 624     if( !form ) continue;
 625     OpClassForm *op   = form->is_opclass();
 626     if( !op ) continue;
 627     if( form->interface_type(globals) == Form::memory_interface ) {
 628       if( comp->isa(Component::USE) ) USE_of_memory = true;
 629       if( comp->isa(Component::DEF) ) {
 630         OperandForm *oper = form->is_operand();
 631         if( oper && oper->is_user_name_for_sReg() ) {
 632           // Stack slots are unaliased memory handled by allocator
 633           oper = oper;  // debug stopping point !!!!!
 634         } else {
 635           DEF_of_memory = true;
 636         }
 637       }
 638     }
 639   }
 640   return (USE_of_memory && !DEF_of_memory);
 641 }
 642 
 643 
 644 bool InstructForm::is_wide_memory_kill(FormDict &globals) const {
 645   if( _matrule == NULL ) return false;
 646   if( !_matrule->_opType ) return false;
 647 
 648   if( strcmp(_matrule->_opType,"MemBarRelease") == 0 ) return true;
 649   if( strcmp(_matrule->_opType,"MemBarAcquire") == 0 ) return true;
 650   if( strcmp(_matrule->_opType,"MemBarReleaseLock") == 0 ) return true;
 651   if( strcmp(_matrule->_opType,"MemBarAcquireLock") == 0 ) return true;
 652   if( strcmp(_matrule->_opType,"MemBarStoreStore") == 0 ) return true;
 653   if( strcmp(_matrule->_opType,"StoreFence") == 0 ) return true;
 654   if( strcmp(_matrule->_opType,"LoadFence") == 0 ) return true;
 655 
 656   return false;
 657 }
 658 
 659 int InstructForm::memory_operand(FormDict &globals) const {
 660   // Machine independent loads must be checked for anti-dependences
 661   // Check if instruction has a USE of a memory operand class, or a def.
 662   int USE_of_memory  = 0;
 663   int DEF_of_memory  = 0;
 664   const char*    last_memory_DEF = NULL; // to test DEF/USE pairing in asserts
 665   const char*    last_memory_USE = NULL;
 666   Component     *unique          = NULL;
 667   Component     *comp            = NULL;
 668   ComponentList &components      = (ComponentList &)_components;
 669 
 670   components.reset();
 671   while( (comp = components.iter()) != NULL ) {
 672     const Form  *form = globals[comp->_type];
 673     if( !form ) continue;
 674     OpClassForm *op   = form->is_opclass();
 675     if( !op ) continue;
 676     if( op->stack_slots_only(globals) )  continue;
 677     if( form->interface_type(globals) == Form::memory_interface ) {
 678       if( comp->isa(Component::DEF) ) {
 679         last_memory_DEF = comp->_name;
 680         DEF_of_memory++;
 681         unique = comp;
 682       } else if( comp->isa(Component::USE) ) {
 683         if( last_memory_DEF != NULL ) {
 684           assert(0 == strcmp(last_memory_DEF, comp->_name), "every memory DEF is followed by a USE of the same name");
 685           last_memory_DEF = NULL;
 686         }
 687         // Handles same memory being used multiple times in the case of BMI1 instructions.
 688         if (last_memory_USE != NULL) {
 689           if (strcmp(comp->_name, last_memory_USE) != 0) {
 690             USE_of_memory++;
 691           }
 692         } else {
 693           USE_of_memory++;
 694         }
 695         last_memory_USE = comp->_name;
 696 
 697         if (DEF_of_memory == 0)  // defs take precedence
 698           unique = comp;
 699       } else {
 700         assert(last_memory_DEF == NULL, "unpaired memory DEF");
 701       }
 702     }
 703   }
 704   assert(last_memory_DEF == NULL, "unpaired memory DEF");
 705   assert(USE_of_memory >= DEF_of_memory, "unpaired memory DEF");
 706   USE_of_memory -= DEF_of_memory;   // treat paired DEF/USE as one occurrence
 707   if( (USE_of_memory + DEF_of_memory) > 0 ) {
 708     if( is_simple_chain_rule(globals) ) {
 709       //fprintf(stderr, "Warning: chain rule is not really a memory user.\n");
 710       //((InstructForm*)this)->dump();
 711       // Preceding code prints nothing on sparc and these insns on intel:
 712       // leaP8 leaP32 leaPIdxOff leaPIdxScale leaPIdxScaleOff leaP8 leaP32
 713       // leaPIdxOff leaPIdxScale leaPIdxScaleOff
 714       return NO_MEMORY_OPERAND;
 715     }
 716 
 717     if( DEF_of_memory == 1 ) {
 718       assert(unique != NULL, "");
 719       if( USE_of_memory == 0 ) {
 720         // unique def, no uses
 721       } else {
 722         // // unique def, some uses
 723         // // must return bottom unless all uses match def
 724         // unique = NULL;
 725 #ifdef S390
 726         // This case is important for move instructions on s390x.
 727         // On other platforms (e.g. x86), all uses always match the def.
 728         unique = NULL;
 729 #endif
 730       }
 731     } else if( DEF_of_memory > 0 ) {
 732       // multiple defs, don't care about uses
 733       unique = NULL;
 734     } else if( USE_of_memory == 1) {
 735       // unique use, no defs
 736       assert(unique != NULL, "");
 737     } else if( USE_of_memory > 0 ) {
 738       // multiple uses, no defs
 739       unique = NULL;
 740     } else {
 741       assert(false, "bad case analysis");
 742     }
 743     // process the unique DEF or USE, if there is one
 744     if( unique == NULL ) {
 745       return MANY_MEMORY_OPERANDS;
 746     } else {
 747       int pos = components.operand_position(unique->_name);
 748       if( unique->isa(Component::DEF) ) {
 749         pos += 1;                // get corresponding USE from DEF
 750       }
 751       assert(pos >= 1, "I was just looking at it!");
 752       return pos;
 753     }
 754   }
 755 
 756   // missed the memory op??
 757   if( true ) {  // %%% should not be necessary
 758     if( is_ideal_store() != Form::none ) {
 759       fprintf(stderr, "Warning: cannot find memory opnd in instr.\n");
 760       ((InstructForm*)this)->dump();
 761       // pretend it has multiple defs and uses
 762       return MANY_MEMORY_OPERANDS;
 763     }
 764     if( is_ideal_load()  != Form::none ) {
 765       fprintf(stderr, "Warning: cannot find memory opnd in instr.\n");
 766       ((InstructForm*)this)->dump();
 767       // pretend it has multiple uses and no defs
 768       return MANY_MEMORY_OPERANDS;
 769     }
 770   }
 771 
 772   return NO_MEMORY_OPERAND;
 773 }
 774 
 775 
 776 // This instruction captures the machine-independent bottom_type
 777 // Expected use is for pointer vs oop determination for LoadP
 778 bool InstructForm::captures_bottom_type(FormDict &globals) const {
 779   if (_matrule && _matrule->_rChild &&
 780       (!strcmp(_matrule->_rChild->_opType,"CastPP")       ||  // new result type
 781        !strcmp(_matrule->_rChild->_opType,"CastX2P")      ||  // new result type
 782        !strcmp(_matrule->_rChild->_opType,"DecodeN")      ||
 783        !strcmp(_matrule->_rChild->_opType,"EncodeP")      ||
 784        !strcmp(_matrule->_rChild->_opType,"DecodeNKlass") ||
 785        !strcmp(_matrule->_rChild->_opType,"EncodePKlass") ||
 786        !strcmp(_matrule->_rChild->_opType,"LoadN")        ||
 787        !strcmp(_matrule->_rChild->_opType,"LoadNKlass")   ||
 788        !strcmp(_matrule->_rChild->_opType,"CreateEx")     ||  // type of exception
 789        !strcmp(_matrule->_rChild->_opType,"CheckCastPP")  ||
 790        !strcmp(_matrule->_rChild->_opType,"GetAndSetP")   ||
 791        !strcmp(_matrule->_rChild->_opType,"GetAndSetN")   ||
 792        !strcmp(_matrule->_rChild->_opType,"CompareAndExchangeP") ||
 793        !strcmp(_matrule->_rChild->_opType,"CompareAndExchangeN")))  return true;
 794   else if ( is_ideal_load() == Form::idealP )                return true;
 795   else if ( is_ideal_store() != Form::none  )                return true;
 796 
 797   if (needs_base_oop_edge(globals)) return true;
 798 
 799   if (is_vector()) return true;
 800   if (is_mach_constant()) return true;
 801 
 802   return  false;
 803 }
 804 
 805 
 806 // Access instr_cost attribute or return NULL.
 807 const char* InstructForm::cost() {
 808   for (Attribute* cur = _attribs; cur != NULL; cur = (Attribute*)cur->_next) {
 809     if( strcmp(cur->_ident,AttributeForm::_ins_cost) == 0 ) {
 810       return cur->_val;
 811     }
 812   }
 813   return NULL;
 814 }
 815 
 816 // Return count of top-level operands.
 817 uint InstructForm::num_opnds() {
 818   int  num_opnds = _components.num_operands();
 819 
 820   // Need special handling for matching some ideal nodes
 821   // i.e. Matching a return node
 822   /*
 823   if( _matrule ) {
 824     if( strcmp(_matrule->_opType,"Return"   )==0 ||
 825         strcmp(_matrule->_opType,"Halt"     )==0 )
 826       return 3;
 827   }
 828     */
 829   return num_opnds;
 830 }
 831 
 832 const char* InstructForm::opnd_ident(int idx) {
 833   return _components.at(idx)->_name;
 834 }
 835 
 836 const char* InstructForm::unique_opnd_ident(uint idx) {
 837   uint i;
 838   for (i = 1; i < num_opnds(); ++i) {
 839     if (unique_opnds_idx(i) == idx) {
 840       break;
 841     }
 842   }
 843   return (_components.at(i) != NULL) ? _components.at(i)->_name : "";
 844 }
 845 
 846 // Return count of unmatched operands.
 847 uint InstructForm::num_post_match_opnds() {
 848   uint  num_post_match_opnds = _components.count();
 849   uint  num_match_opnds = _components.match_count();
 850   num_post_match_opnds = num_post_match_opnds - num_match_opnds;
 851 
 852   return num_post_match_opnds;
 853 }
 854 
 855 // Return the number of leaves below this complex operand
 856 uint InstructForm::num_consts(FormDict &globals) const {
 857   if ( ! _matrule) return 0;
 858 
 859   // This is a recursive invocation on all operands in the matchrule
 860   return _matrule->num_consts(globals);
 861 }
 862 
 863 // Constants in match rule with specified type
 864 uint InstructForm::num_consts(FormDict &globals, Form::DataType type) const {
 865   if ( ! _matrule) return 0;
 866 
 867   // This is a recursive invocation on all operands in the matchrule
 868   return _matrule->num_consts(globals, type);
 869 }
 870 
 871 
 872 // Return the register class associated with 'leaf'.
 873 const char *InstructForm::out_reg_class(FormDict &globals) {
 874   assert( false, "InstructForm::out_reg_class(FormDict &globals); Not Implemented");
 875 
 876   return NULL;
 877 }
 878 
 879 
 880 
 881 // Lookup the starting position of inputs we are interested in wrt. ideal nodes
 882 uint InstructForm::oper_input_base(FormDict &globals) {
 883   if( !_matrule ) return 1;     // Skip control for most nodes
 884 
 885   // Need special handling for matching some ideal nodes
 886   // i.e. Matching a return node
 887   if( strcmp(_matrule->_opType,"Return"    )==0 ||
 888       strcmp(_matrule->_opType,"Rethrow"   )==0 ||
 889       strcmp(_matrule->_opType,"TailCall"  )==0 ||
 890       strcmp(_matrule->_opType,"TailJump"  )==0 ||
 891       strcmp(_matrule->_opType,"SafePoint" )==0 ||
 892       strcmp(_matrule->_opType,"Halt"      )==0 )
 893     return AdlcVMDeps::Parms;   // Skip the machine-state edges
 894 
 895   if( _matrule->_rChild &&
 896       ( strcmp(_matrule->_rChild->_opType,"AryEq"     )==0 ||
 897         strcmp(_matrule->_rChild->_opType,"StrComp"   )==0 ||
 898         strcmp(_matrule->_rChild->_opType,"StrEquals" )==0 ||
 899         strcmp(_matrule->_rChild->_opType,"StrInflatedCopy"   )==0 ||
 900         strcmp(_matrule->_rChild->_opType,"StrCompressedCopy" )==0 ||
 901         strcmp(_matrule->_rChild->_opType,"StrIndexOf")==0 ||
 902         strcmp(_matrule->_rChild->_opType,"StrIndexOfChar")==0 ||
 903         strcmp(_matrule->_rChild->_opType,"HasNegatives")==0 ||
 904         strcmp(_matrule->_rChild->_opType,"EncodeISOArray")==0)) {
 905         // String.(compareTo/equals/indexOf) and Arrays.equals
 906         // and sun.nio.cs.iso8859_1$Encoder.EncodeISOArray
 907         // take 1 control and 1 memory edges.
 908         // Also String.(compressedCopy/inflatedCopy).
 909     return 2;
 910   }
 911 
 912   // Check for handling of 'Memory' input/edge in the ideal world.
 913   // The AD file writer is shielded from knowledge of these edges.
 914   int base = 1;                 // Skip control
 915   base += _matrule->needs_ideal_memory_edge(globals);
 916 
 917   // Also skip the base-oop value for uses of derived oops.
 918   // The AD file writer is shielded from knowledge of these edges.
 919   base += needs_base_oop_edge(globals);
 920 
 921   return base;
 922 }
 923 
 924 // This function determines the order of the MachOper in _opnds[]
 925 // by writing the operand names into the _components list.
 926 //
 927 // Implementation does not modify state of internal structures
 928 void InstructForm::build_components() {
 929   // Add top-level operands to the components
 930   if (_matrule)  _matrule->append_components(_localNames, _components);
 931 
 932   // Add parameters that "do not appear in match rule".
 933   bool has_temp = false;
 934   const char *name;
 935   const char *kill_name = NULL;
 936   for (_parameters.reset(); (name = _parameters.iter()) != NULL;) {
 937     OperandForm *opForm = (OperandForm*)_localNames[name];
 938 
 939     Effect* e = NULL;
 940     {
 941       const Form* form = _effects[name];
 942       e = form ? form->is_effect() : NULL;
 943     }
 944 
 945     if (e != NULL) {
 946       has_temp |= e->is(Component::TEMP);
 947 
 948       // KILLs must be declared after any TEMPs because TEMPs are real
 949       // uses so their operand numbering must directly follow the real
 950       // inputs from the match rule.  Fixing the numbering seems
 951       // complex so simply enforce the restriction during parse.
 952       if (kill_name != NULL &&
 953           e->isa(Component::TEMP) && !e->isa(Component::DEF)) {
 954         OperandForm* kill = (OperandForm*)_localNames[kill_name];
 955         globalAD->syntax_err(_linenum, "%s: %s %s must be at the end of the argument list\n",
 956                              _ident, kill->_ident, kill_name);
 957       } else if (e->isa(Component::KILL) && !e->isa(Component::USE)) {
 958         kill_name = name;
 959       }
 960     }
 961 
 962     const Component *component  = _components.search(name);
 963     if ( component  == NULL ) {
 964       if (e) {
 965         _components.insert(name, opForm->_ident, e->_use_def, false);
 966         component = _components.search(name);
 967         if (component->isa(Component::USE) && !component->isa(Component::TEMP) && _matrule) {
 968           const Form *form = globalAD->globalNames()[component->_type];
 969           assert( form, "component type must be a defined form");
 970           OperandForm *op   = form->is_operand();
 971           if (op->_interface && op->_interface->is_RegInterface()) {
 972             globalAD->syntax_err(_linenum, "%s: illegal USE of non-input: %s %s\n",
 973                                  _ident, opForm->_ident, name);
 974           }
 975         }
 976       } else {
 977         // This would be a nice warning but it triggers in a few places in a benign way
 978         // if (_matrule != NULL && !expands()) {
 979         //   globalAD->syntax_err(_linenum, "%s: %s %s not mentioned in effect or match rule\n",
 980         //                        _ident, opForm->_ident, name);
 981         // }
 982         _components.insert(name, opForm->_ident, Component::INVALID, false);
 983       }
 984     }
 985     else if (e) {
 986       // Component was found in the list
 987       // Check if there is a new effect that requires an extra component.
 988       // This happens when adding 'USE' to a component that is not yet one.
 989       if ((!component->isa( Component::USE) && ((e->_use_def & Component::USE) != 0))) {
 990         if (component->isa(Component::USE) && _matrule) {
 991           const Form *form = globalAD->globalNames()[component->_type];
 992           assert( form, "component type must be a defined form");
 993           OperandForm *op   = form->is_operand();
 994           if (op->_interface && op->_interface->is_RegInterface()) {
 995             globalAD->syntax_err(_linenum, "%s: illegal USE of non-input: %s %s\n",
 996                                  _ident, opForm->_ident, name);
 997           }
 998         }
 999         _components.insert(name, opForm->_ident, e->_use_def, false);
1000       } else {
1001         Component  *comp = (Component*)component;
1002         comp->promote_use_def_info(e->_use_def);
1003       }
1004       // Component positions are zero based.
1005       int  pos  = _components.operand_position(name);
1006       assert( ! (component->isa(Component::DEF) && (pos >= 1)),
1007               "Component::DEF can only occur in the first position");
1008     }
1009   }
1010 
1011   // Resolving the interactions between expand rules and TEMPs would
1012   // be complex so simply disallow it.
1013   if (_matrule == NULL && has_temp) {
1014     globalAD->syntax_err(_linenum, "%s: TEMPs without match rule isn't supported\n", _ident);
1015   }
1016 
1017   return;
1018 }
1019 
1020 // Return zero-based position in component list;  -1 if not in list.
1021 int   InstructForm::operand_position(const char *name, int usedef) {
1022   return unique_opnds_idx(_components.operand_position(name, usedef, this));
1023 }
1024 
1025 int   InstructForm::operand_position_format(const char *name) {
1026   return unique_opnds_idx(_components.operand_position_format(name, this));
1027 }
1028 
1029 // Return zero-based position in component list; -1 if not in list.
1030 int   InstructForm::label_position() {
1031   return unique_opnds_idx(_components.label_position());
1032 }
1033 
1034 int   InstructForm::method_position() {
1035   return unique_opnds_idx(_components.method_position());
1036 }
1037 
1038 // Return number of relocation entries needed for this instruction.
1039 uint  InstructForm::reloc(FormDict &globals) {
1040   uint reloc_entries  = 0;
1041   // Check for "Call" nodes
1042   if ( is_ideal_call() )      ++reloc_entries;
1043   if ( is_ideal_return() )    ++reloc_entries;
1044   if ( is_ideal_safepoint() ) ++reloc_entries;
1045 
1046 
1047   // Check if operands MAYBE oop pointers, by checking for ConP elements
1048   // Proceed through the leaves of the match-tree and check for ConPs
1049   if ( _matrule != NULL ) {
1050     uint         position = 0;
1051     const char  *result   = NULL;
1052     const char  *name     = NULL;
1053     const char  *opType   = NULL;
1054     while (_matrule->base_operand(position, globals, result, name, opType)) {
1055       if ( strcmp(opType,"ConP") == 0 ) {
1056 #ifdef SPARC
1057         reloc_entries += 2; // 1 for sethi + 1 for setlo
1058 #else
1059         ++reloc_entries;
1060 #endif
1061       }
1062       ++position;
1063     }
1064   }
1065 
1066   // Above is only a conservative estimate
1067   // because it did not check contents of operand classes.
1068   // !!!!! !!!!!
1069   // Add 1 to reloc info for each operand class in the component list.
1070   Component  *comp;
1071   _components.reset();
1072   while ( (comp = _components.iter()) != NULL ) {
1073     const Form        *form = globals[comp->_type];
1074     assert( form, "Did not find component's type in global names");
1075     const OpClassForm *opc  = form->is_opclass();
1076     const OperandForm *oper = form->is_operand();
1077     if ( opc && (oper == NULL) ) {
1078       ++reloc_entries;
1079     } else if ( oper ) {
1080       // floats and doubles loaded out of method's constant pool require reloc info
1081       Form::DataType type = oper->is_base_constant(globals);
1082       if ( (type == Form::idealF) || (type == Form::idealD) ) {
1083         ++reloc_entries;
1084       }
1085     }
1086   }
1087 
1088   // Float and Double constants may come from the CodeBuffer table
1089   // and require relocatable addresses for access
1090   // !!!!!
1091   // Check for any component being an immediate float or double.
1092   Form::DataType data_type = is_chain_of_constant(globals);
1093   if( data_type==idealD || data_type==idealF ) {
1094 #ifdef SPARC
1095     // sparc required more relocation entries for floating constants
1096     // (expires 9/98)
1097     reloc_entries += 6;
1098 #else
1099     reloc_entries++;
1100 #endif
1101   }
1102 
1103   return reloc_entries;
1104 }
1105 
1106 // Utility function defined in archDesc.cpp
1107 extern bool is_def(int usedef);
1108 
1109 // Return the result of reducing an instruction
1110 const char *InstructForm::reduce_result() {
1111   const char* result = "Universe";  // default
1112   _components.reset();
1113   Component *comp = _components.iter();
1114   if (comp != NULL && comp->isa(Component::DEF)) {
1115     result = comp->_type;
1116     // Override this if the rule is a store operation:
1117     if (_matrule && _matrule->_rChild &&
1118         is_store_to_memory(_matrule->_rChild->_opType))
1119       result = "Universe";
1120   }
1121   return result;
1122 }
1123 
1124 // Return the name of the operand on the right hand side of the binary match
1125 // Return NULL if there is no right hand side
1126 const char *InstructForm::reduce_right(FormDict &globals)  const {
1127   if( _matrule == NULL ) return NULL;
1128   return  _matrule->reduce_right(globals);
1129 }
1130 
1131 // Similar for left
1132 const char *InstructForm::reduce_left(FormDict &globals)   const {
1133   if( _matrule == NULL ) return NULL;
1134   return  _matrule->reduce_left(globals);
1135 }
1136 
1137 
1138 // Base class for this instruction, MachNode except for calls
1139 const char *InstructForm::mach_base_class(FormDict &globals)  const {
1140   if( is_ideal_call() == Form::JAVA_STATIC ) {
1141     return "MachCallStaticJavaNode";
1142   }
1143   else if( is_ideal_call() == Form::JAVA_DYNAMIC ) {
1144     return "MachCallDynamicJavaNode";
1145   }
1146   else if( is_ideal_call() == Form::JAVA_RUNTIME ) {
1147     return "MachCallRuntimeNode";
1148   }
1149   else if( is_ideal_call() == Form::JAVA_LEAF ) {
1150     return "MachCallLeafNode";
1151   }
1152   else if (is_ideal_return()) {
1153     return "MachReturnNode";
1154   }
1155   else if (is_ideal_halt()) {
1156     return "MachHaltNode";
1157   }
1158   else if (is_ideal_safepoint()) {
1159     return "MachSafePointNode";
1160   }
1161   else if (is_ideal_if()) {
1162     return "MachIfNode";
1163   }
1164   else if (is_ideal_goto()) {
1165     return "MachGotoNode";
1166   }
1167   else if (is_ideal_fastlock()) {
1168     return "MachFastLockNode";
1169   }
1170   else if (is_ideal_nop()) {
1171     return "MachNopNode";
1172   }
1173   else if (is_mach_constant()) {
1174     return "MachConstantNode";
1175   }
1176   else if (captures_bottom_type(globals)) {
1177     return "MachTypeNode";
1178   } else {
1179     return "MachNode";
1180   }
1181   assert( false, "ShouldNotReachHere()");
1182   return NULL;
1183 }
1184 
1185 // Compare the instruction predicates for textual equality
1186 bool equivalent_predicates( const InstructForm *instr1, const InstructForm *instr2 ) {
1187   const Predicate *pred1  = instr1->_predicate;
1188   const Predicate *pred2  = instr2->_predicate;
1189   if( pred1 == NULL && pred2 == NULL ) {
1190     // no predicates means they are identical
1191     return true;
1192   }
1193   if( pred1 != NULL && pred2 != NULL ) {
1194     // compare the predicates
1195     if (ADLParser::equivalent_expressions(pred1->_pred, pred2->_pred)) {
1196       return true;
1197     }
1198   }
1199 
1200   return false;
1201 }
1202 
1203 // Check if this instruction can cisc-spill to 'alternate'
1204 bool InstructForm::cisc_spills_to(ArchDesc &AD, InstructForm *instr) {
1205   assert( _matrule != NULL && instr->_matrule != NULL, "must have match rules");
1206   // Do not replace if a cisc-version has been found.
1207   if( cisc_spill_operand() != Not_cisc_spillable ) return false;
1208 
1209   int         cisc_spill_operand = Maybe_cisc_spillable;
1210   char       *result             = NULL;
1211   char       *result2            = NULL;
1212   const char *op_name            = NULL;
1213   const char *reg_type           = NULL;
1214   FormDict   &globals            = AD.globalNames();
1215   cisc_spill_operand = _matrule->matchrule_cisc_spill_match(globals, AD.get_registers(), instr->_matrule, op_name, reg_type);
1216   if( (cisc_spill_operand != Not_cisc_spillable) && (op_name != NULL) && equivalent_predicates(this, instr) ) {
1217     cisc_spill_operand = operand_position(op_name, Component::USE);
1218     int def_oper  = operand_position(op_name, Component::DEF);
1219     if( def_oper == NameList::Not_in_list && instr->num_opnds() == num_opnds()) {
1220       // Do not support cisc-spilling for destination operands and
1221       // make sure they have the same number of operands.
1222       _cisc_spill_alternate = instr;
1223       instr->set_cisc_alternate(true);
1224       if( AD._cisc_spill_debug ) {
1225         fprintf(stderr, "Instruction %s cisc-spills-to %s\n", _ident, instr->_ident);
1226         fprintf(stderr, "   using operand %s %s at index %d\n", reg_type, op_name, cisc_spill_operand);
1227       }
1228       // Record that a stack-version of the reg_mask is needed
1229       // !!!!!
1230       OperandForm *oper = (OperandForm*)(globals[reg_type]->is_operand());
1231       assert( oper != NULL, "cisc-spilling non operand");
1232       const char *reg_class_name = oper->constrained_reg_class();
1233       AD.set_stack_or_reg(reg_class_name);
1234       const char *reg_mask_name  = AD.reg_mask(*oper);
1235       set_cisc_reg_mask_name(reg_mask_name);
1236       const char *stack_or_reg_mask_name = AD.stack_or_reg_mask(*oper);
1237     } else {
1238       cisc_spill_operand = Not_cisc_spillable;
1239     }
1240   } else {
1241     cisc_spill_operand = Not_cisc_spillable;
1242   }
1243 
1244   set_cisc_spill_operand(cisc_spill_operand);
1245   return (cisc_spill_operand != Not_cisc_spillable);
1246 }
1247 
1248 // Check to see if this instruction can be replaced with the short branch
1249 // instruction `short-branch'
1250 bool InstructForm::check_branch_variant(ArchDesc &AD, InstructForm *short_branch) {
1251   if (_matrule != NULL &&
1252       this != short_branch &&   // Don't match myself
1253       !is_short_branch() &&     // Don't match another short branch variant
1254       reduce_result() != NULL &&
1255       strstr(_ident, "restoreMask") == NULL && // Don't match side effects
1256       strcmp(reduce_result(), short_branch->reduce_result()) == 0 &&
1257       _matrule->equivalent(AD.globalNames(), short_branch->_matrule)) {
1258     // The instructions are equivalent.
1259 
1260     // Now verify that both instructions have the same parameters and
1261     // the same effects. Both branch forms should have the same inputs
1262     // and resulting projections to correctly replace a long branch node
1263     // with corresponding short branch node during code generation.
1264 
1265     bool different = false;
1266     if (short_branch->_components.count() != _components.count()) {
1267        different = true;
1268     } else if (_components.count() > 0) {
1269       short_branch->_components.reset();
1270       _components.reset();
1271       Component *comp;
1272       while ((comp = _components.iter()) != NULL) {
1273         Component *short_comp = short_branch->_components.iter();
1274         if (short_comp == NULL ||
1275             short_comp->_type != comp->_type ||
1276             short_comp->_usedef != comp->_usedef) {
1277           different = true;
1278           break;
1279         }
1280       }
1281       if (short_branch->_components.iter() != NULL)
1282         different = true;
1283     }
1284     if (different) {
1285       globalAD->syntax_err(short_branch->_linenum, "Instruction %s and its short form %s have different parameters\n", _ident, short_branch->_ident);
1286     }
1287     if (AD._adl_debug > 1 || AD._short_branch_debug) {
1288       fprintf(stderr, "Instruction %s has short form %s\n", _ident, short_branch->_ident);
1289     }
1290     _short_branch_form = short_branch;
1291     return true;
1292   }
1293   return false;
1294 }
1295 
1296 
1297 // --------------------------- FILE *output_routines
1298 //
1299 // Generate the format call for the replacement variable
1300 void InstructForm::rep_var_format(FILE *fp, const char *rep_var) {
1301   // Handle special constant table variables.
1302   if (strcmp(rep_var, "constanttablebase") == 0) {
1303     fprintf(fp, "char reg[128];  ra->dump_register(in(mach_constant_base_node_input()), reg);\n");
1304     fprintf(fp, "    st->print(\"%%s\", reg);\n");
1305     return;
1306   }
1307   if (strcmp(rep_var, "constantoffset") == 0) {
1308     fprintf(fp, "st->print(\"#%%d\", constant_offset_unchecked());\n");
1309     return;
1310   }
1311   if (strcmp(rep_var, "constantaddress") == 0) {
1312     fprintf(fp, "st->print(\"constant table base + #%%d\", constant_offset_unchecked());\n");
1313     return;
1314   }
1315 
1316   // Find replacement variable's type
1317   const Form *form   = _localNames[rep_var];
1318   if (form == NULL) {
1319     globalAD->syntax_err(_linenum, "Unknown replacement variable %s in format statement of %s.",
1320                          rep_var, _ident);
1321     return;
1322   }
1323   OpClassForm *opc   = form->is_opclass();
1324   assert( opc, "replacement variable was not found in local names");
1325   // Lookup the index position of the replacement variable
1326   int idx  = operand_position_format(rep_var);
1327   if ( idx == -1 ) {
1328     globalAD->syntax_err(_linenum, "Could not find replacement variable %s in format statement of %s.\n",
1329                          rep_var, _ident);
1330     assert(strcmp(opc->_ident, "label") == 0, "Unimplemented");
1331     return;
1332   }
1333 
1334   if (is_noninput_operand(idx)) {
1335     // This component isn't in the input array.  Print out the static
1336     // name of the register.
1337     OperandForm* oper = form->is_operand();
1338     if (oper != NULL && oper->is_bound_register()) {
1339       const RegDef* first = oper->get_RegClass()->find_first_elem();
1340       fprintf(fp, "    st->print_raw(\"%s\");\n", first->_regname);
1341     } else {
1342       globalAD->syntax_err(_linenum, "In %s can't find format for %s %s", _ident, opc->_ident, rep_var);
1343     }
1344   } else {
1345     // Output the format call for this operand
1346     fprintf(fp,"opnd_array(%d)->",idx);
1347     if (idx == 0)
1348       fprintf(fp,"int_format(ra, this, st); // %s\n", rep_var);
1349     else
1350       fprintf(fp,"ext_format(ra, this,idx%d, st); // %s\n", idx, rep_var );
1351   }
1352 }
1353 
1354 // Seach through operands to determine parameters unique positions.
1355 void InstructForm::set_unique_opnds() {
1356   uint* uniq_idx = NULL;
1357   uint  nopnds = num_opnds();
1358   uint  num_uniq = nopnds;
1359   uint i;
1360   _uniq_idx_length = 0;
1361   if (nopnds > 0) {
1362     // Allocate index array.  Worst case we're mapping from each
1363     // component back to an index and any DEF always goes at 0 so the
1364     // length of the array has to be the number of components + 1.
1365     _uniq_idx_length = _components.count() + 1;
1366     uniq_idx = (uint*) malloc(sizeof(uint) * _uniq_idx_length);
1367     for (i = 0; i < _uniq_idx_length; i++) {
1368       uniq_idx[i] = i;
1369     }
1370   }
1371   // Do it only if there is a match rule and no expand rule.  With an
1372   // expand rule it is done by creating new mach node in Expand()
1373   // method.
1374   if (nopnds > 0 && _matrule != NULL && _exprule == NULL) {
1375     const char *name;
1376     uint count;
1377     bool has_dupl_use = false;
1378 
1379     _parameters.reset();
1380     while ((name = _parameters.iter()) != NULL) {
1381       count = 0;
1382       uint position = 0;
1383       uint uniq_position = 0;
1384       _components.reset();
1385       Component *comp = NULL;
1386       if (sets_result()) {
1387         comp = _components.iter();
1388         position++;
1389       }
1390       // The next code is copied from the method operand_position().
1391       for (; (comp = _components.iter()) != NULL; ++position) {
1392         // When the first component is not a DEF,
1393         // leave space for the result operand!
1394         if (position==0 && (!comp->isa(Component::DEF))) {
1395           ++position;
1396         }
1397         if (strcmp(name, comp->_name) == 0) {
1398           if (++count > 1) {
1399             assert(position < _uniq_idx_length, "out of bounds");
1400             uniq_idx[position] = uniq_position;
1401             has_dupl_use = true;
1402           } else {
1403             uniq_position = position;
1404           }
1405         }
1406         if (comp->isa(Component::DEF) && comp->isa(Component::USE)) {
1407           ++position;
1408           if (position != 1)
1409             --position;   // only use two slots for the 1st USE_DEF
1410         }
1411       }
1412     }
1413     if (has_dupl_use) {
1414       for (i = 1; i < nopnds; i++) {
1415         if (i != uniq_idx[i]) {
1416           break;
1417         }
1418       }
1419       uint j = i;
1420       for (; i < nopnds; i++) {
1421         if (i == uniq_idx[i]) {
1422           uniq_idx[i] = j++;
1423         }
1424       }
1425       num_uniq = j;
1426     }
1427   }
1428   _uniq_idx = uniq_idx;
1429   _num_uniq = num_uniq;
1430 }
1431 
1432 // Generate index values needed for determining the operand position
1433 void InstructForm::index_temps(FILE *fp, FormDict &globals, const char *prefix, const char *receiver) {
1434   uint  idx = 0;                  // position of operand in match rule
1435   int   cur_num_opnds = num_opnds();
1436 
1437   // Compute the index into vector of operand pointers:
1438   // idx0=0 is used to indicate that info comes from this same node, not from input edge.
1439   // idx1 starts at oper_input_base()
1440   if ( cur_num_opnds >= 1 ) {
1441     fprintf(fp,"  // Start at oper_input_base() and count operands\n");
1442     fprintf(fp,"  unsigned %sidx0 = %d;\n", prefix, oper_input_base(globals));
1443     fprintf(fp,"  unsigned %sidx1 = %d;", prefix, oper_input_base(globals));
1444     fprintf(fp," \t// %s\n", unique_opnd_ident(1));
1445 
1446     // Generate starting points for other unique operands if they exist
1447     for ( idx = 2; idx < num_unique_opnds(); ++idx ) {
1448       if( *receiver == 0 ) {
1449         fprintf(fp,"  unsigned %sidx%d = %sidx%d + opnd_array(%d)->num_edges();",
1450                 prefix, idx, prefix, idx-1, idx-1 );
1451       } else {
1452         fprintf(fp,"  unsigned %sidx%d = %sidx%d + %s_opnds[%d]->num_edges();",
1453                 prefix, idx, prefix, idx-1, receiver, idx-1 );
1454       }
1455       fprintf(fp," \t// %s\n", unique_opnd_ident(idx));
1456     }
1457   }
1458   if( *receiver != 0 ) {
1459     // This value is used by generate_peepreplace when copying a node.
1460     // Don't emit it in other cases since it can hide bugs with the
1461     // use invalid idx's.
1462     fprintf(fp,"  unsigned %sidx%d = %sreq(); \n", prefix, idx, receiver);
1463   }
1464 
1465 }
1466 
1467 // ---------------------------
1468 bool InstructForm::verify() {
1469   // !!!!! !!!!!
1470   // Check that a "label" operand occurs last in the operand list, if present
1471   return true;
1472 }
1473 
1474 void InstructForm::dump() {
1475   output(stderr);
1476 }
1477 
1478 void InstructForm::output(FILE *fp) {
1479   fprintf(fp,"\nInstruction: %s\n", (_ident?_ident:""));
1480   if (_matrule)   _matrule->output(fp);
1481   if (_insencode) _insencode->output(fp);
1482   if (_constant)  _constant->output(fp);
1483   if (_opcode)    _opcode->output(fp);
1484   if (_attribs)   _attribs->output(fp);
1485   if (_predicate) _predicate->output(fp);
1486   if (_effects.Size()) {
1487     fprintf(fp,"Effects\n");
1488     _effects.dump();
1489   }
1490   if (_exprule)   _exprule->output(fp);
1491   if (_rewrule)   _rewrule->output(fp);
1492   if (_format)    _format->output(fp);
1493   if (_peephole)  _peephole->output(fp);
1494 }
1495 
1496 void MachNodeForm::dump() {
1497   output(stderr);
1498 }
1499 
1500 void MachNodeForm::output(FILE *fp) {
1501   fprintf(fp,"\nMachNode: %s\n", (_ident?_ident:""));
1502 }
1503 
1504 //------------------------------build_predicate--------------------------------
1505 // Build instruction predicates.  If the user uses the same operand name
1506 // twice, we need to check that the operands are pointer-eequivalent in
1507 // the DFA during the labeling process.
1508 Predicate *InstructForm::build_predicate() {
1509   const int buflen = 1024;
1510   char buf[buflen], *s=buf;
1511   Dict names(cmpstr,hashstr,Form::arena);       // Map Names to counts
1512 
1513   MatchNode *mnode =
1514     strcmp(_matrule->_opType, "Set") ? _matrule : _matrule->_rChild;
1515   mnode->count_instr_names(names);
1516 
1517   uint first = 1;
1518   // Start with the predicate supplied in the .ad file.
1519   if (_predicate) {
1520     if (first) first = 0;
1521     strcpy(s, "("); s += strlen(s);
1522     strncpy(s, _predicate->_pred, buflen - strlen(s) - 1);
1523     s += strlen(s);
1524     strcpy(s, ")"); s += strlen(s);
1525   }
1526   for( DictI i(&names); i.test(); ++i ) {
1527     uintptr_t cnt = (uintptr_t)i._value;
1528     if( cnt > 1 ) {             // Need a predicate at all?
1529       assert( cnt == 2, "Unimplemented" );
1530       // Handle many pairs
1531       if( first ) first=0;
1532       else {                    // All tests must pass, so use '&&'
1533         strcpy(s," && ");
1534         s += strlen(s);
1535       }
1536       // Add predicate to working buffer
1537       sprintf(s,"/*%s*/(",(char*)i._key);
1538       s += strlen(s);
1539       mnode->build_instr_pred(s,(char*)i._key,0);
1540       s += strlen(s);
1541       strcpy(s," == "); s += strlen(s);
1542       mnode->build_instr_pred(s,(char*)i._key,1);
1543       s += strlen(s);
1544       strcpy(s,")"); s += strlen(s);
1545     }
1546   }
1547   if( s == buf ) s = NULL;
1548   else {
1549     assert( strlen(buf) < sizeof(buf), "String buffer overflow" );
1550     s = strdup(buf);
1551   }
1552   return new Predicate(s);
1553 }
1554 
1555 //------------------------------EncodeForm-------------------------------------
1556 // Constructor
1557 EncodeForm::EncodeForm()
1558   : _encClass(cmpstr,hashstr, Form::arena) {
1559 }
1560 EncodeForm::~EncodeForm() {
1561 }
1562 
1563 // record a new register class
1564 EncClass *EncodeForm::add_EncClass(const char *className) {
1565   EncClass *encClass = new EncClass(className);
1566   _eclasses.addName(className);
1567   _encClass.Insert(className,encClass);
1568   return encClass;
1569 }
1570 
1571 // Lookup the function body for an encoding class
1572 EncClass  *EncodeForm::encClass(const char *className) {
1573   assert( className != NULL, "Must provide a defined encoding name");
1574 
1575   EncClass *encClass = (EncClass*)_encClass[className];
1576   return encClass;
1577 }
1578 
1579 // Lookup the function body for an encoding class
1580 const char *EncodeForm::encClassBody(const char *className) {
1581   if( className == NULL ) return NULL;
1582 
1583   EncClass *encClass = (EncClass*)_encClass[className];
1584   assert( encClass != NULL, "Encode Class is missing.");
1585   encClass->_code.reset();
1586   const char *code = (const char*)encClass->_code.iter();
1587   assert( code != NULL, "Found an empty encode class body.");
1588 
1589   return code;
1590 }
1591 
1592 // Lookup the function body for an encoding class
1593 const char *EncodeForm::encClassPrototype(const char *className) {
1594   assert( className != NULL, "Encode class name must be non NULL.");
1595 
1596   return className;
1597 }
1598 
1599 void EncodeForm::dump() {                  // Debug printer
1600   output(stderr);
1601 }
1602 
1603 void EncodeForm::output(FILE *fp) {          // Write info to output files
1604   const char *name;
1605   fprintf(fp,"\n");
1606   fprintf(fp,"-------------------- Dump EncodeForm --------------------\n");
1607   for (_eclasses.reset(); (name = _eclasses.iter()) != NULL;) {
1608     ((EncClass*)_encClass[name])->output(fp);
1609   }
1610   fprintf(fp,"-------------------- end  EncodeForm --------------------\n");
1611 }
1612 //------------------------------EncClass---------------------------------------
1613 EncClass::EncClass(const char *name)
1614   : _localNames(cmpstr,hashstr, Form::arena), _name(name) {
1615 }
1616 EncClass::~EncClass() {
1617 }
1618 
1619 // Add a parameter <type,name> pair
1620 void EncClass::add_parameter(const char *parameter_type, const char *parameter_name) {
1621   _parameter_type.addName( parameter_type );
1622   _parameter_name.addName( parameter_name );
1623 }
1624 
1625 // Verify operand types in parameter list
1626 bool EncClass::check_parameter_types(FormDict &globals) {
1627   // !!!!!
1628   return false;
1629 }
1630 
1631 // Add the decomposed "code" sections of an encoding's code-block
1632 void EncClass::add_code(const char *code) {
1633   _code.addName(code);
1634 }
1635 
1636 // Add the decomposed "replacement variables" of an encoding's code-block
1637 void EncClass::add_rep_var(char *replacement_var) {
1638   _code.addName(NameList::_signal);
1639   _rep_vars.addName(replacement_var);
1640 }
1641 
1642 // Lookup the function body for an encoding class
1643 int EncClass::rep_var_index(const char *rep_var) {
1644   uint        position = 0;
1645   const char *name     = NULL;
1646 
1647   _parameter_name.reset();
1648   while ( (name = _parameter_name.iter()) != NULL ) {
1649     if ( strcmp(rep_var,name) == 0 ) return position;
1650     ++position;
1651   }
1652 
1653   return -1;
1654 }
1655 
1656 // Check after parsing
1657 bool EncClass::verify() {
1658   // 1!!!!
1659   // Check that each replacement variable, '$name' in architecture description
1660   // is actually a local variable for this encode class, or a reserved name
1661   // "primary, secondary, tertiary"
1662   return true;
1663 }
1664 
1665 void EncClass::dump() {
1666   output(stderr);
1667 }
1668 
1669 // Write info to output files
1670 void EncClass::output(FILE *fp) {
1671   fprintf(fp,"EncClass: %s", (_name ? _name : ""));
1672 
1673   // Output the parameter list
1674   _parameter_type.reset();
1675   _parameter_name.reset();
1676   const char *type = _parameter_type.iter();
1677   const char *name = _parameter_name.iter();
1678   fprintf(fp, " ( ");
1679   for ( ; (type != NULL) && (name != NULL);
1680         (type = _parameter_type.iter()), (name = _parameter_name.iter()) ) {
1681     fprintf(fp, " %s %s,", type, name);
1682   }
1683   fprintf(fp, " ) ");
1684 
1685   // Output the code block
1686   _code.reset();
1687   _rep_vars.reset();
1688   const char *code;
1689   while ( (code = _code.iter()) != NULL ) {
1690     if ( _code.is_signal(code) ) {
1691       // A replacement variable
1692       const char *rep_var = _rep_vars.iter();
1693       fprintf(fp,"($%s)", rep_var);
1694     } else {
1695       // A section of code
1696       fprintf(fp,"%s", code);
1697     }
1698   }
1699 
1700 }
1701 
1702 //------------------------------Opcode-----------------------------------------
1703 Opcode::Opcode(char *primary, char *secondary, char *tertiary)
1704   : _primary(primary), _secondary(secondary), _tertiary(tertiary) {
1705 }
1706 
1707 Opcode::~Opcode() {
1708 }
1709 
1710 Opcode::opcode_type Opcode::as_opcode_type(const char *param) {
1711   if( strcmp(param,"primary") == 0 ) {
1712     return Opcode::PRIMARY;
1713   }
1714   else if( strcmp(param,"secondary") == 0 ) {
1715     return Opcode::SECONDARY;
1716   }
1717   else if( strcmp(param,"tertiary") == 0 ) {
1718     return Opcode::TERTIARY;
1719   }
1720   return Opcode::NOT_AN_OPCODE;
1721 }
1722 
1723 bool Opcode::print_opcode(FILE *fp, Opcode::opcode_type desired_opcode) {
1724   // Default values previously provided by MachNode::primary()...
1725   const char *description = NULL;
1726   const char *value       = NULL;
1727   // Check if user provided any opcode definitions
1728   if( this != NULL ) {
1729     // Update 'value' if user provided a definition in the instruction
1730     switch (desired_opcode) {
1731     case PRIMARY:
1732       description = "primary()";
1733       if( _primary   != NULL)  { value = _primary;     }
1734       break;
1735     case SECONDARY:
1736       description = "secondary()";
1737       if( _secondary != NULL ) { value = _secondary;   }
1738       break;
1739     case TERTIARY:
1740       description = "tertiary()";
1741       if( _tertiary  != NULL ) { value = _tertiary;    }
1742       break;
1743     default:
1744       assert( false, "ShouldNotReachHere();");
1745       break;
1746     }
1747   }
1748   if (value != NULL) {
1749     fprintf(fp, "(%s /*%s*/)", value, description);
1750   }
1751   return value != NULL;
1752 }
1753 
1754 void Opcode::dump() {
1755   output(stderr);
1756 }
1757 
1758 // Write info to output files
1759 void Opcode::output(FILE *fp) {
1760   if (_primary   != NULL) fprintf(fp,"Primary   opcode: %s\n", _primary);
1761   if (_secondary != NULL) fprintf(fp,"Secondary opcode: %s\n", _secondary);
1762   if (_tertiary  != NULL) fprintf(fp,"Tertiary  opcode: %s\n", _tertiary);
1763 }
1764 
1765 //------------------------------InsEncode--------------------------------------
1766 InsEncode::InsEncode() {
1767 }
1768 InsEncode::~InsEncode() {
1769 }
1770 
1771 // Add "encode class name" and its parameters
1772 NameAndList *InsEncode::add_encode(char *encoding) {
1773   assert( encoding != NULL, "Must provide name for encoding");
1774 
1775   // add_parameter(NameList::_signal);
1776   NameAndList *encode = new NameAndList(encoding);
1777   _encoding.addName((char*)encode);
1778 
1779   return encode;
1780 }
1781 
1782 // Access the list of encodings
1783 void InsEncode::reset() {
1784   _encoding.reset();
1785   // _parameter.reset();
1786 }
1787 const char* InsEncode::encode_class_iter() {
1788   NameAndList  *encode_class = (NameAndList*)_encoding.iter();
1789   return  ( encode_class != NULL ? encode_class->name() : NULL );
1790 }
1791 // Obtain parameter name from zero based index
1792 const char *InsEncode::rep_var_name(InstructForm &inst, uint param_no) {
1793   NameAndList *params = (NameAndList*)_encoding.current();
1794   assert( params != NULL, "Internal Error");
1795   const char *param = (*params)[param_no];
1796 
1797   // Remove '$' if parser placed it there.
1798   return ( param != NULL && *param == '$') ? (param+1) : param;
1799 }
1800 
1801 void InsEncode::dump() {
1802   output(stderr);
1803 }
1804 
1805 // Write info to output files
1806 void InsEncode::output(FILE *fp) {
1807   NameAndList *encoding  = NULL;
1808   const char  *parameter = NULL;
1809 
1810   fprintf(fp,"InsEncode: ");
1811   _encoding.reset();
1812 
1813   while ( (encoding = (NameAndList*)_encoding.iter()) != 0 ) {
1814     // Output the encoding being used
1815     fprintf(fp,"%s(", encoding->name() );
1816 
1817     // Output its parameter list, if any
1818     bool first_param = true;
1819     encoding->reset();
1820     while (  (parameter = encoding->iter()) != 0 ) {
1821       // Output the ',' between parameters
1822       if ( ! first_param )  fprintf(fp,", ");
1823       first_param = false;
1824       // Output the parameter
1825       fprintf(fp,"%s", parameter);
1826     } // done with parameters
1827     fprintf(fp,")  ");
1828   } // done with encodings
1829 
1830   fprintf(fp,"\n");
1831 }
1832 
1833 //------------------------------Effect-----------------------------------------
1834 static int effect_lookup(const char *name) {
1835   if (!strcmp(name, "USE")) return Component::USE;
1836   if (!strcmp(name, "DEF")) return Component::DEF;
1837   if (!strcmp(name, "USE_DEF")) return Component::USE_DEF;
1838   if (!strcmp(name, "KILL")) return Component::KILL;
1839   if (!strcmp(name, "USE_KILL")) return Component::USE_KILL;
1840   if (!strcmp(name, "TEMP")) return Component::TEMP;
1841   if (!strcmp(name, "TEMP_DEF")) return Component::TEMP_DEF;
1842   if (!strcmp(name, "INVALID")) return Component::INVALID;
1843   if (!strcmp(name, "CALL")) return Component::CALL;
1844   assert(false,"Invalid effect name specified\n");
1845   return Component::INVALID;
1846 }
1847 
1848 const char *Component::getUsedefName() {
1849   switch (_usedef) {
1850     case Component::INVALID:  return "INVALID";  break;
1851     case Component::USE:      return "USE";      break;
1852     case Component::USE_DEF:  return "USE_DEF";  break;
1853     case Component::USE_KILL: return "USE_KILL"; break;
1854     case Component::KILL:     return "KILL";     break;
1855     case Component::TEMP:     return "TEMP";     break;
1856     case Component::TEMP_DEF: return "TEMP_DEF"; break;
1857     case Component::DEF:      return "DEF";      break;
1858     case Component::CALL:     return "CALL";     break;
1859     default: assert(false, "unknown effect");
1860   }
1861   return "Undefined Use/Def info";
1862 }
1863 
1864 Effect::Effect(const char *name) : _name(name), _use_def(effect_lookup(name)) {
1865   _ftype = Form::EFF;
1866 }
1867 
1868 Effect::~Effect() {
1869 }
1870 
1871 // Dynamic type check
1872 Effect *Effect::is_effect() const {
1873   return (Effect*)this;
1874 }
1875 
1876 
1877 // True if this component is equal to the parameter.
1878 bool Effect::is(int use_def_kill_enum) const {
1879   return (_use_def == use_def_kill_enum ? true : false);
1880 }
1881 // True if this component is used/def'd/kill'd as the parameter suggests.
1882 bool Effect::isa(int use_def_kill_enum) const {
1883   return (_use_def & use_def_kill_enum) == use_def_kill_enum;
1884 }
1885 
1886 void Effect::dump() {
1887   output(stderr);
1888 }
1889 
1890 void Effect::output(FILE *fp) {          // Write info to output files
1891   fprintf(fp,"Effect: %s\n", (_name?_name:""));
1892 }
1893 
1894 //------------------------------ExpandRule-------------------------------------
1895 ExpandRule::ExpandRule() : _expand_instrs(),
1896                            _newopconst(cmpstr, hashstr, Form::arena) {
1897   _ftype = Form::EXP;
1898 }
1899 
1900 ExpandRule::~ExpandRule() {                  // Destructor
1901 }
1902 
1903 void ExpandRule::add_instruction(NameAndList *instruction_name_and_operand_list) {
1904   _expand_instrs.addName((char*)instruction_name_and_operand_list);
1905 }
1906 
1907 void ExpandRule::reset_instructions() {
1908   _expand_instrs.reset();
1909 }
1910 
1911 NameAndList* ExpandRule::iter_instructions() {
1912   return (NameAndList*)_expand_instrs.iter();
1913 }
1914 
1915 
1916 void ExpandRule::dump() {
1917   output(stderr);
1918 }
1919 
1920 void ExpandRule::output(FILE *fp) {         // Write info to output files
1921   NameAndList *expand_instr = NULL;
1922   const char *opid = NULL;
1923 
1924   fprintf(fp,"\nExpand Rule:\n");
1925 
1926   // Iterate over the instructions 'node' expands into
1927   for(reset_instructions(); (expand_instr = iter_instructions()) != NULL; ) {
1928     fprintf(fp,"%s(", expand_instr->name());
1929 
1930     // iterate over the operand list
1931     for( expand_instr->reset(); (opid = expand_instr->iter()) != NULL; ) {
1932       fprintf(fp,"%s ", opid);
1933     }
1934     fprintf(fp,");\n");
1935   }
1936 }
1937 
1938 //------------------------------RewriteRule------------------------------------
1939 RewriteRule::RewriteRule(char* params, char* block)
1940   : _tempParams(params), _tempBlock(block) { };  // Constructor
1941 RewriteRule::~RewriteRule() {                 // Destructor
1942 }
1943 
1944 void RewriteRule::dump() {
1945   output(stderr);
1946 }
1947 
1948 void RewriteRule::output(FILE *fp) {         // Write info to output files
1949   fprintf(fp,"\nRewrite Rule:\n%s\n%s\n",
1950           (_tempParams?_tempParams:""),
1951           (_tempBlock?_tempBlock:""));
1952 }
1953 
1954 
1955 //==============================MachNodes======================================
1956 //------------------------------MachNodeForm-----------------------------------
1957 MachNodeForm::MachNodeForm(char *id)
1958   : _ident(id) {
1959 }
1960 
1961 MachNodeForm::~MachNodeForm() {
1962 }
1963 
1964 MachNodeForm *MachNodeForm::is_machnode() const {
1965   return (MachNodeForm*)this;
1966 }
1967 
1968 //==============================Operand Classes================================
1969 //------------------------------OpClassForm------------------------------------
1970 OpClassForm::OpClassForm(const char* id) : _ident(id) {
1971   _ftype = Form::OPCLASS;
1972 }
1973 
1974 OpClassForm::~OpClassForm() {
1975 }
1976 
1977 bool OpClassForm::ideal_only() const { return 0; }
1978 
1979 OpClassForm *OpClassForm::is_opclass() const {
1980   return (OpClassForm*)this;
1981 }
1982 
1983 Form::InterfaceType OpClassForm::interface_type(FormDict &globals) const {
1984   if( _oplst.count() == 0 ) return Form::no_interface;
1985 
1986   // Check that my operands have the same interface type
1987   Form::InterfaceType  interface;
1988   bool  first = true;
1989   NameList &op_list = (NameList &)_oplst;
1990   op_list.reset();
1991   const char *op_name;
1992   while( (op_name = op_list.iter()) != NULL ) {
1993     const Form  *form    = globals[op_name];
1994     OperandForm *operand = form->is_operand();
1995     assert( operand, "Entry in operand class that is not an operand");
1996     if( first ) {
1997       first     = false;
1998       interface = operand->interface_type(globals);
1999     } else {
2000       interface = (interface == operand->interface_type(globals) ? interface : Form::no_interface);
2001     }
2002   }
2003   return interface;
2004 }
2005 
2006 bool OpClassForm::stack_slots_only(FormDict &globals) const {
2007   if( _oplst.count() == 0 ) return false;  // how?
2008 
2009   NameList &op_list = (NameList &)_oplst;
2010   op_list.reset();
2011   const char *op_name;
2012   while( (op_name = op_list.iter()) != NULL ) {
2013     const Form  *form    = globals[op_name];
2014     OperandForm *operand = form->is_operand();
2015     assert( operand, "Entry in operand class that is not an operand");
2016     if( !operand->stack_slots_only(globals) )  return false;
2017   }
2018   return true;
2019 }
2020 
2021 
2022 void OpClassForm::dump() {
2023   output(stderr);
2024 }
2025 
2026 void OpClassForm::output(FILE *fp) {
2027   const char *name;
2028   fprintf(fp,"\nOperand Class: %s\n", (_ident?_ident:""));
2029   fprintf(fp,"\nCount = %d\n", _oplst.count());
2030   for(_oplst.reset(); (name = _oplst.iter()) != NULL;) {
2031     fprintf(fp,"%s, ",name);
2032   }
2033   fprintf(fp,"\n");
2034 }
2035 
2036 
2037 //==============================Operands=======================================
2038 //------------------------------OperandForm------------------------------------
2039 OperandForm::OperandForm(const char* id)
2040   : OpClassForm(id), _ideal_only(false),
2041     _localNames(cmpstr, hashstr, Form::arena) {
2042       _ftype = Form::OPER;
2043 
2044       _matrule   = NULL;
2045       _interface = NULL;
2046       _attribs   = NULL;
2047       _predicate = NULL;
2048       _constraint= NULL;
2049       _construct = NULL;
2050       _format    = NULL;
2051 }
2052 OperandForm::OperandForm(const char* id, bool ideal_only)
2053   : OpClassForm(id), _ideal_only(ideal_only),
2054     _localNames(cmpstr, hashstr, Form::arena) {
2055       _ftype = Form::OPER;
2056 
2057       _matrule   = NULL;
2058       _interface = NULL;
2059       _attribs   = NULL;
2060       _predicate = NULL;
2061       _constraint= NULL;
2062       _construct = NULL;
2063       _format    = NULL;
2064 }
2065 OperandForm::~OperandForm() {
2066 }
2067 
2068 
2069 OperandForm *OperandForm::is_operand() const {
2070   return (OperandForm*)this;
2071 }
2072 
2073 bool OperandForm::ideal_only() const {
2074   return _ideal_only;
2075 }
2076 
2077 Form::InterfaceType OperandForm::interface_type(FormDict &globals) const {
2078   if( _interface == NULL )  return Form::no_interface;
2079 
2080   return _interface->interface_type(globals);
2081 }
2082 
2083 
2084 bool OperandForm::stack_slots_only(FormDict &globals) const {
2085   if( _constraint == NULL )  return false;
2086   return _constraint->stack_slots_only();
2087 }
2088 
2089 
2090 // Access op_cost attribute or return NULL.
2091 const char* OperandForm::cost() {
2092   for (Attribute* cur = _attribs; cur != NULL; cur = (Attribute*)cur->_next) {
2093     if( strcmp(cur->_ident,AttributeForm::_op_cost) == 0 ) {
2094       return cur->_val;
2095     }
2096   }
2097   return NULL;
2098 }
2099 
2100 // Return the number of leaves below this complex operand
2101 uint OperandForm::num_leaves() const {
2102   if ( ! _matrule) return 0;
2103 
2104   int num_leaves = _matrule->_numleaves;
2105   return num_leaves;
2106 }
2107 
2108 // Return the number of constants contained within this complex operand
2109 uint OperandForm::num_consts(FormDict &globals) const {
2110   if ( ! _matrule) return 0;
2111 
2112   // This is a recursive invocation on all operands in the matchrule
2113   return _matrule->num_consts(globals);
2114 }
2115 
2116 // Return the number of constants in match rule with specified type
2117 uint OperandForm::num_consts(FormDict &globals, Form::DataType type) const {
2118   if ( ! _matrule) return 0;
2119 
2120   // This is a recursive invocation on all operands in the matchrule
2121   return _matrule->num_consts(globals, type);
2122 }
2123 
2124 // Return the number of pointer constants contained within this complex operand
2125 uint OperandForm::num_const_ptrs(FormDict &globals) const {
2126   if ( ! _matrule) return 0;
2127 
2128   // This is a recursive invocation on all operands in the matchrule
2129   return _matrule->num_const_ptrs(globals);
2130 }
2131 
2132 uint OperandForm::num_edges(FormDict &globals) const {
2133   uint edges  = 0;
2134   uint leaves = num_leaves();
2135   uint consts = num_consts(globals);
2136 
2137   // If we are matching a constant directly, there are no leaves.
2138   edges = ( leaves > consts ) ? leaves - consts : 0;
2139 
2140   // !!!!!
2141   // Special case operands that do not have a corresponding ideal node.
2142   if( (edges == 0) && (consts == 0) ) {
2143     if( constrained_reg_class() != NULL ) {
2144       edges = 1;
2145     } else {
2146       if( _matrule
2147           && (_matrule->_lChild == NULL) && (_matrule->_rChild == NULL) ) {
2148         const Form *form = globals[_matrule->_opType];
2149         OperandForm *oper = form ? form->is_operand() : NULL;
2150         if( oper ) {
2151           return oper->num_edges(globals);
2152         }
2153       }
2154     }
2155   }
2156 
2157   return edges;
2158 }
2159 
2160 
2161 // Check if this operand is usable for cisc-spilling
2162 bool  OperandForm::is_cisc_reg(FormDict &globals) const {
2163   const char *ideal = ideal_type(globals);
2164   bool is_cisc_reg = (ideal && (ideal_to_Reg_type(ideal) != none));
2165   return is_cisc_reg;
2166 }
2167 
2168 bool  OpClassForm::is_cisc_mem(FormDict &globals) const {
2169   Form::InterfaceType my_interface = interface_type(globals);
2170   return (my_interface == memory_interface);
2171 }
2172 
2173 
2174 // node matches ideal 'Bool'
2175 bool OperandForm::is_ideal_bool() const {
2176   if( _matrule == NULL ) return false;
2177 
2178   return _matrule->is_ideal_bool();
2179 }
2180 
2181 // Require user's name for an sRegX to be stackSlotX
2182 Form::DataType OperandForm::is_user_name_for_sReg() const {
2183   DataType data_type = none;
2184   if( _ident != NULL ) {
2185     if(      strcmp(_ident,"stackSlotI") == 0 ) data_type = Form::idealI;
2186     else if( strcmp(_ident,"stackSlotP") == 0 ) data_type = Form::idealP;
2187     else if( strcmp(_ident,"stackSlotD") == 0 ) data_type = Form::idealD;
2188     else if( strcmp(_ident,"stackSlotF") == 0 ) data_type = Form::idealF;
2189     else if( strcmp(_ident,"stackSlotL") == 0 ) data_type = Form::idealL;
2190   }
2191   assert((data_type == none) || (_matrule == NULL), "No match-rule for stackSlotX");
2192 
2193   return data_type;
2194 }
2195 
2196 
2197 // Return ideal type, if there is a single ideal type for this operand
2198 const char *OperandForm::ideal_type(FormDict &globals, RegisterForm *registers) const {
2199   const char *type = NULL;
2200   if (ideal_only()) type = _ident;
2201   else if( _matrule == NULL ) {
2202     // Check for condition code register
2203     const char *rc_name = constrained_reg_class();
2204     // !!!!!
2205     if (rc_name == NULL) return NULL;
2206     // !!!!! !!!!!
2207     // Check constraints on result's register class
2208     if( registers ) {
2209       RegClass *reg_class  = registers->getRegClass(rc_name);
2210       assert( reg_class != NULL, "Register class is not defined");
2211 
2212       // Check for ideal type of entries in register class, all are the same type
2213       reg_class->reset();
2214       RegDef *reg_def = reg_class->RegDef_iter();
2215       assert( reg_def != NULL, "No entries in register class");
2216       assert( reg_def->_idealtype != NULL, "Did not define ideal type for register");
2217       // Return substring that names the register's ideal type
2218       type = reg_def->_idealtype + 3;
2219       assert( *(reg_def->_idealtype + 0) == 'O', "Expect Op_ prefix");
2220       assert( *(reg_def->_idealtype + 1) == 'p', "Expect Op_ prefix");
2221       assert( *(reg_def->_idealtype + 2) == '_', "Expect Op_ prefix");
2222     }
2223   }
2224   else if( _matrule->_lChild == NULL && _matrule->_rChild == NULL ) {
2225     // This operand matches a single type, at the top level.
2226     // Check for ideal type
2227     type = _matrule->_opType;
2228     if( strcmp(type,"Bool") == 0 )
2229       return "Bool";
2230     // transitive lookup
2231     const Form *frm = globals[type];
2232     OperandForm *op = frm->is_operand();
2233     type = op->ideal_type(globals, registers);
2234   }
2235   return type;
2236 }
2237 
2238 
2239 // If there is a single ideal type for this interface field, return it.
2240 const char *OperandForm::interface_ideal_type(FormDict &globals,
2241                                               const char *field) const {
2242   const char  *ideal_type = NULL;
2243   const char  *value      = NULL;
2244 
2245   // Check if "field" is valid for this operand's interface
2246   if ( ! is_interface_field(field, value) )   return ideal_type;
2247 
2248   // !!!!! !!!!! !!!!!
2249   // If a valid field has a constant value, identify "ConI" or "ConP" or ...
2250 
2251   // Else, lookup type of field's replacement variable
2252 
2253   return ideal_type;
2254 }
2255 
2256 
2257 RegClass* OperandForm::get_RegClass() const {
2258   if (_interface && !_interface->is_RegInterface()) return NULL;
2259   return globalAD->get_registers()->getRegClass(constrained_reg_class());
2260 }
2261 
2262 
2263 bool OperandForm::is_bound_register() const {
2264   RegClass* reg_class = get_RegClass();
2265   if (reg_class == NULL) {
2266     return false;
2267   }
2268 
2269   const char* name = ideal_type(globalAD->globalNames());
2270   if (name == NULL) {
2271     return false;
2272   }
2273 
2274   uint size = 0;
2275   if (strcmp(name, "RegFlags") == 0) size = 1;
2276   if (strcmp(name, "RegI") == 0) size = 1;
2277   if (strcmp(name, "RegF") == 0) size = 1;
2278   if (strcmp(name, "RegD") == 0) size = 2;
2279   if (strcmp(name, "RegL") == 0) size = 2;
2280   if (strcmp(name, "RegN") == 0) size = 1;
2281   if (strcmp(name, "RegP") == 0) size = globalAD->get_preproc_def("_LP64") ? 2 : 1;
2282   if (size == 0) {
2283     return false;
2284   }
2285   return size == reg_class->size();
2286 }
2287 
2288 
2289 // Check if this is a valid field for this operand,
2290 // Return 'true' if valid, and set the value to the string the user provided.
2291 bool  OperandForm::is_interface_field(const char *field,
2292                                       const char * &value) const {
2293   return false;
2294 }
2295 
2296 
2297 // Return register class name if a constraint specifies the register class.
2298 const char *OperandForm::constrained_reg_class() const {
2299   const char *reg_class  = NULL;
2300   if ( _constraint ) {
2301     // !!!!!
2302     Constraint *constraint = _constraint;
2303     if ( strcmp(_constraint->_func,"ALLOC_IN_RC") == 0 ) {
2304       reg_class = _constraint->_arg;
2305     }
2306   }
2307 
2308   return reg_class;
2309 }
2310 
2311 
2312 // Return the register class associated with 'leaf'.
2313 const char *OperandForm::in_reg_class(uint leaf, FormDict &globals) {
2314   const char *reg_class = NULL; // "RegMask::Empty";
2315 
2316   if((_matrule == NULL) || (_matrule->is_chain_rule(globals))) {
2317     reg_class = constrained_reg_class();
2318     return reg_class;
2319   }
2320   const char *result   = NULL;
2321   const char *name     = NULL;
2322   const char *type     = NULL;
2323   // iterate through all base operands
2324   // until we reach the register that corresponds to "leaf"
2325   // This function is not looking for an ideal type.  It needs the first
2326   // level user type associated with the leaf.
2327   for(uint idx = 0;_matrule->base_operand(idx,globals,result,name,type);++idx) {
2328     const Form *form = (_localNames[name] ? _localNames[name] : globals[result]);
2329     OperandForm *oper = form ? form->is_operand() : NULL;
2330     if( oper ) {
2331       reg_class = oper->constrained_reg_class();
2332       if( reg_class ) {
2333         reg_class = reg_class;
2334       } else {
2335         // ShouldNotReachHere();
2336       }
2337     } else {
2338       // ShouldNotReachHere();
2339     }
2340 
2341     // Increment our target leaf position if current leaf is not a candidate.
2342     if( reg_class == NULL)    ++leaf;
2343     // Exit the loop with the value of reg_class when at the correct index
2344     if( idx == leaf )         break;
2345     // May iterate through all base operands if reg_class for 'leaf' is NULL
2346   }
2347   return reg_class;
2348 }
2349 
2350 
2351 // Recursive call to construct list of top-level operands.
2352 // Implementation does not modify state of internal structures
2353 void OperandForm::build_components() {
2354   if (_matrule)  _matrule->append_components(_localNames, _components);
2355 
2356   // Add parameters that "do not appear in match rule".
2357   const char *name;
2358   for (_parameters.reset(); (name = _parameters.iter()) != NULL;) {
2359     OperandForm *opForm = (OperandForm*)_localNames[name];
2360 
2361     if ( _components.operand_position(name) == -1 ) {
2362       _components.insert(name, opForm->_ident, Component::INVALID, false);
2363     }
2364   }
2365 
2366   return;
2367 }
2368 
2369 int OperandForm::operand_position(const char *name, int usedef) {
2370   return _components.operand_position(name, usedef, this);
2371 }
2372 
2373 
2374 // Return zero-based position in component list, only counting constants;
2375 // Return -1 if not in list.
2376 int OperandForm::constant_position(FormDict &globals, const Component *last) {
2377   // Iterate through components and count constants preceding 'constant'
2378   int position = 0;
2379   Component *comp;
2380   _components.reset();
2381   while( (comp = _components.iter()) != NULL  && (comp != last) ) {
2382     // Special case for operands that take a single user-defined operand
2383     // Skip the initial definition in the component list.
2384     if( strcmp(comp->_name,this->_ident) == 0 ) continue;
2385 
2386     const char *type = comp->_type;
2387     // Lookup operand form for replacement variable's type
2388     const Form *form = globals[type];
2389     assert( form != NULL, "Component's type not found");
2390     OperandForm *oper = form ? form->is_operand() : NULL;
2391     if( oper ) {
2392       if( oper->_matrule->is_base_constant(globals) != Form::none ) {
2393         ++position;
2394       }
2395     }
2396   }
2397 
2398   // Check for being passed a component that was not in the list
2399   if( comp != last )  position = -1;
2400 
2401   return position;
2402 }
2403 // Provide position of constant by "name"
2404 int OperandForm::constant_position(FormDict &globals, const char *name) {
2405   const Component *comp = _components.search(name);
2406   int idx = constant_position( globals, comp );
2407 
2408   return idx;
2409 }
2410 
2411 
2412 // Return zero-based position in component list, only counting constants;
2413 // Return -1 if not in list.
2414 int OperandForm::register_position(FormDict &globals, const char *reg_name) {
2415   // Iterate through components and count registers preceding 'last'
2416   uint  position = 0;
2417   Component *comp;
2418   _components.reset();
2419   while( (comp = _components.iter()) != NULL
2420          && (strcmp(comp->_name,reg_name) != 0) ) {
2421     // Special case for operands that take a single user-defined operand
2422     // Skip the initial definition in the component list.
2423     if( strcmp(comp->_name,this->_ident) == 0 ) continue;
2424 
2425     const char *type = comp->_type;
2426     // Lookup operand form for component's type
2427     const Form *form = globals[type];
2428     assert( form != NULL, "Component's type not found");
2429     OperandForm *oper = form ? form->is_operand() : NULL;
2430     if( oper ) {
2431       if( oper->_matrule->is_base_register(globals) ) {
2432         ++position;
2433       }
2434     }
2435   }
2436 
2437   return position;
2438 }
2439 
2440 
2441 const char *OperandForm::reduce_result()  const {
2442   return _ident;
2443 }
2444 // Return the name of the operand on the right hand side of the binary match
2445 // Return NULL if there is no right hand side
2446 const char *OperandForm::reduce_right(FormDict &globals)  const {
2447   return  ( _matrule ? _matrule->reduce_right(globals) : NULL );
2448 }
2449 
2450 // Similar for left
2451 const char *OperandForm::reduce_left(FormDict &globals)   const {
2452   return  ( _matrule ? _matrule->reduce_left(globals) : NULL );
2453 }
2454 
2455 
2456 // --------------------------- FILE *output_routines
2457 //
2458 // Output code for disp_is_oop, if true.
2459 void OperandForm::disp_is_oop(FILE *fp, FormDict &globals) {
2460   //  Check it is a memory interface with a non-user-constant disp field
2461   if ( this->_interface == NULL ) return;
2462   MemInterface *mem_interface = this->_interface->is_MemInterface();
2463   if ( mem_interface == NULL )    return;
2464   const char   *disp  = mem_interface->_disp;
2465   if ( *disp != '$' )             return;
2466 
2467   // Lookup replacement variable in operand's component list
2468   const char   *rep_var = disp + 1;
2469   const Component *comp = this->_components.search(rep_var);
2470   assert( comp != NULL, "Replacement variable not found in components");
2471   // Lookup operand form for replacement variable's type
2472   const char      *type = comp->_type;
2473   Form            *form = (Form*)globals[type];
2474   assert( form != NULL, "Replacement variable's type not found");
2475   OperandForm     *op   = form->is_operand();
2476   assert( op, "Memory Interface 'disp' can only emit an operand form");
2477   // Check if this is a ConP, which may require relocation
2478   if ( op->is_base_constant(globals) == Form::idealP ) {
2479     // Find the constant's index:  _c0, _c1, _c2, ... , _cN
2480     uint idx  = op->constant_position( globals, rep_var);
2481     fprintf(fp,"  virtual relocInfo::relocType disp_reloc() const {");
2482     fprintf(fp,  "  return _c%d->reloc();", idx);
2483     fprintf(fp, " }\n");
2484   }
2485 }
2486 
2487 // Generate code for internal and external format methods
2488 //
2489 // internal access to reg# node->_idx
2490 // access to subsumed constant _c0, _c1,
2491 void  OperandForm::int_format(FILE *fp, FormDict &globals, uint index) {
2492   Form::DataType dtype;
2493   if (_matrule && (_matrule->is_base_register(globals) ||
2494                    strcmp(ideal_type(globalAD->globalNames()), "RegFlags") == 0)) {
2495     // !!!!! !!!!!
2496     fprintf(fp,"  { char reg_str[128];\n");
2497     fprintf(fp,"    ra->dump_register(node,reg_str);\n");
2498     fprintf(fp,"    st->print(\"%cs\",reg_str);\n",'%');
2499     fprintf(fp,"  }\n");
2500   } else if (_matrule && (dtype = _matrule->is_base_constant(globals)) != Form::none) {
2501     format_constant( fp, index, dtype );
2502   } else if (ideal_to_sReg_type(_ident) != Form::none) {
2503     // Special format for Stack Slot Register
2504     fprintf(fp,"  { char reg_str[128];\n");
2505     fprintf(fp,"    ra->dump_register(node,reg_str);\n");
2506     fprintf(fp,"    st->print(\"%cs\",reg_str);\n",'%');
2507     fprintf(fp,"  }\n");
2508   } else {
2509     fprintf(fp,"  st->print(\"No format defined for %s\n\");\n", _ident);
2510     fflush(fp);
2511     fprintf(stderr,"No format defined for %s\n", _ident);
2512     dump();
2513     assert( false,"Internal error:\n  output_internal_operand() attempting to output other than a Register or Constant");
2514   }
2515 }
2516 
2517 // Similar to "int_format" but for cases where data is external to operand
2518 // external access to reg# node->in(idx)->_idx,
2519 void  OperandForm::ext_format(FILE *fp, FormDict &globals, uint index) {
2520   Form::DataType dtype;
2521   if (_matrule && (_matrule->is_base_register(globals) ||
2522                    strcmp(ideal_type(globalAD->globalNames()), "RegFlags") == 0)) {
2523     fprintf(fp,"  { char reg_str[128];\n");
2524     fprintf(fp,"    ra->dump_register(node->in(idx");
2525     if ( index != 0 ) fprintf(fp,              "+%d",index);
2526     fprintf(fp,                                      "),reg_str);\n");
2527     fprintf(fp,"    st->print(\"%cs\",reg_str);\n",'%');
2528     fprintf(fp,"  }\n");
2529   } else if (_matrule && (dtype = _matrule->is_base_constant(globals)) != Form::none) {
2530     format_constant( fp, index, dtype );
2531   } else if (ideal_to_sReg_type(_ident) != Form::none) {
2532     // Special format for Stack Slot Register
2533     fprintf(fp,"  { char reg_str[128];\n");
2534     fprintf(fp,"    ra->dump_register(node->in(idx");
2535     if ( index != 0 ) fprintf(fp,                  "+%d",index);
2536     fprintf(fp,                                       "),reg_str);\n");
2537     fprintf(fp,"    st->print(\"%cs\",reg_str);\n",'%');
2538     fprintf(fp,"  }\n");
2539   } else {
2540     fprintf(fp,"  st->print(\"No format defined for %s\n\");\n", _ident);
2541     assert( false,"Internal error:\n  output_external_operand() attempting to output other than a Register or Constant");
2542   }
2543 }
2544 
2545 void OperandForm::format_constant(FILE *fp, uint const_index, uint const_type) {
2546   switch(const_type) {
2547   case Form::idealI: fprintf(fp,"  st->print(\"#%%d\", _c%d);\n", const_index); break;
2548   case Form::idealP: fprintf(fp,"  if (_c%d) _c%d->dump_on(st);\n", const_index, const_index); break;
2549   case Form::idealNKlass:
2550   case Form::idealN: fprintf(fp,"  if (_c%d) _c%d->dump_on(st);\n", const_index, const_index); break;
2551   case Form::idealL: fprintf(fp,"  st->print(\"#\" INT64_FORMAT, (int64_t)_c%d);\n", const_index); break;
2552   case Form::idealF: fprintf(fp,"  st->print(\"#%%f\", _c%d);\n", const_index); break;
2553   case Form::idealD: fprintf(fp,"  st->print(\"#%%f\", _c%d);\n", const_index); break;
2554   default:
2555     assert( false, "ShouldNotReachHere()");
2556   }
2557 }
2558 
2559 // Return the operand form corresponding to the given index, else NULL.
2560 OperandForm *OperandForm::constant_operand(FormDict &globals,
2561                                            uint      index) {
2562   // !!!!!
2563   // Check behavior on complex operands
2564   uint n_consts = num_consts(globals);
2565   if( n_consts > 0 ) {
2566     uint i = 0;
2567     const char *type;
2568     Component  *comp;
2569     _components.reset();
2570     if ((comp = _components.iter()) == NULL) {
2571       assert(n_consts == 1, "Bad component list detected.\n");
2572       // Current operand is THE operand
2573       if ( index == 0 ) {
2574         return this;
2575       }
2576     } // end if NULL
2577     else {
2578       // Skip the first component, it can not be a DEF of a constant
2579       do {
2580         type = comp->base_type(globals);
2581         // Check that "type" is a 'ConI', 'ConP', ...
2582         if ( ideal_to_const_type(type) != Form::none ) {
2583           // When at correct component, get corresponding Operand
2584           if ( index == 0 ) {
2585             return globals[comp->_type]->is_operand();
2586           }
2587           // Decrement number of constants to go
2588           --index;
2589         }
2590       } while((comp = _components.iter()) != NULL);
2591     }
2592   }
2593 
2594   // Did not find a constant for this index.
2595   return NULL;
2596 }
2597 
2598 // If this operand has a single ideal type, return its type
2599 Form::DataType OperandForm::simple_type(FormDict &globals) const {
2600   const char *type_name = ideal_type(globals);
2601   Form::DataType type   = type_name ? ideal_to_const_type( type_name )
2602                                     : Form::none;
2603   return type;
2604 }
2605 
2606 Form::DataType OperandForm::is_base_constant(FormDict &globals) const {
2607   if ( _matrule == NULL )    return Form::none;
2608 
2609   return _matrule->is_base_constant(globals);
2610 }
2611 
2612 // "true" if this operand is a simple type that is swallowed
2613 bool  OperandForm::swallowed(FormDict &globals) const {
2614   Form::DataType type   = simple_type(globals);
2615   if( type != Form::none ) {
2616     return true;
2617   }
2618 
2619   return false;
2620 }
2621 
2622 // Output code to access the value of the index'th constant
2623 void OperandForm::access_constant(FILE *fp, FormDict &globals,
2624                                   uint const_index) {
2625   OperandForm *oper = constant_operand(globals, const_index);
2626   assert( oper, "Index exceeds number of constants in operand");
2627   Form::DataType dtype = oper->is_base_constant(globals);
2628 
2629   switch(dtype) {
2630   case idealI: fprintf(fp,"_c%d",           const_index); break;
2631   case idealP: fprintf(fp,"_c%d->get_con()",const_index); break;
2632   case idealL: fprintf(fp,"_c%d",           const_index); break;
2633   case idealF: fprintf(fp,"_c%d",           const_index); break;
2634   case idealD: fprintf(fp,"_c%d",           const_index); break;
2635   default:
2636     assert( false, "ShouldNotReachHere()");
2637   }
2638 }
2639 
2640 
2641 void OperandForm::dump() {
2642   output(stderr);
2643 }
2644 
2645 void OperandForm::output(FILE *fp) {
2646   fprintf(fp,"\nOperand: %s\n", (_ident?_ident:""));
2647   if (_matrule)    _matrule->dump();
2648   if (_interface)  _interface->dump();
2649   if (_attribs)    _attribs->dump();
2650   if (_predicate)  _predicate->dump();
2651   if (_constraint) _constraint->dump();
2652   if (_construct)  _construct->dump();
2653   if (_format)     _format->dump();
2654 }
2655 
2656 //------------------------------Constraint-------------------------------------
2657 Constraint::Constraint(const char *func, const char *arg)
2658   : _func(func), _arg(arg) {
2659 }
2660 Constraint::~Constraint() { /* not owner of char* */
2661 }
2662 
2663 bool Constraint::stack_slots_only() const {
2664   return strcmp(_func, "ALLOC_IN_RC") == 0
2665       && strcmp(_arg,  "stack_slots") == 0;
2666 }
2667 
2668 void Constraint::dump() {
2669   output(stderr);
2670 }
2671 
2672 void Constraint::output(FILE *fp) {           // Write info to output files
2673   assert((_func != NULL && _arg != NULL),"missing constraint function or arg");
2674   fprintf(fp,"Constraint: %s ( %s )\n", _func, _arg);
2675 }
2676 
2677 //------------------------------Predicate--------------------------------------
2678 Predicate::Predicate(char *pr)
2679   : _pred(pr) {
2680 }
2681 Predicate::~Predicate() {
2682 }
2683 
2684 void Predicate::dump() {
2685   output(stderr);
2686 }
2687 
2688 void Predicate::output(FILE *fp) {
2689   fprintf(fp,"Predicate");  // Write to output files
2690 }
2691 //------------------------------Interface--------------------------------------
2692 Interface::Interface(const char *name) : _name(name) {
2693 }
2694 Interface::~Interface() {
2695 }
2696 
2697 Form::InterfaceType Interface::interface_type(FormDict &globals) const {
2698   Interface *thsi = (Interface*)this;
2699   if ( thsi->is_RegInterface()   ) return Form::register_interface;
2700   if ( thsi->is_MemInterface()   ) return Form::memory_interface;
2701   if ( thsi->is_ConstInterface() ) return Form::constant_interface;
2702   if ( thsi->is_CondInterface()  ) return Form::conditional_interface;
2703 
2704   return Form::no_interface;
2705 }
2706 
2707 RegInterface   *Interface::is_RegInterface() {
2708   if ( strcmp(_name,"REG_INTER") != 0 )
2709     return NULL;
2710   return (RegInterface*)this;
2711 }
2712 MemInterface   *Interface::is_MemInterface() {
2713   if ( strcmp(_name,"MEMORY_INTER") != 0 )  return NULL;
2714   return (MemInterface*)this;
2715 }
2716 ConstInterface *Interface::is_ConstInterface() {
2717   if ( strcmp(_name,"CONST_INTER") != 0 )  return NULL;
2718   return (ConstInterface*)this;
2719 }
2720 CondInterface  *Interface::is_CondInterface() {
2721   if ( strcmp(_name,"COND_INTER") != 0 )  return NULL;
2722   return (CondInterface*)this;
2723 }
2724 
2725 
2726 void Interface::dump() {
2727   output(stderr);
2728 }
2729 
2730 // Write info to output files
2731 void Interface::output(FILE *fp) {
2732   fprintf(fp,"Interface: %s\n", (_name ? _name : "") );
2733 }
2734 
2735 //------------------------------RegInterface-----------------------------------
2736 RegInterface::RegInterface() : Interface("REG_INTER") {
2737 }
2738 RegInterface::~RegInterface() {
2739 }
2740 
2741 void RegInterface::dump() {
2742   output(stderr);
2743 }
2744 
2745 // Write info to output files
2746 void RegInterface::output(FILE *fp) {
2747   Interface::output(fp);
2748 }
2749 
2750 //------------------------------ConstInterface---------------------------------
2751 ConstInterface::ConstInterface() : Interface("CONST_INTER") {
2752 }
2753 ConstInterface::~ConstInterface() {
2754 }
2755 
2756 void ConstInterface::dump() {
2757   output(stderr);
2758 }
2759 
2760 // Write info to output files
2761 void ConstInterface::output(FILE *fp) {
2762   Interface::output(fp);
2763 }
2764 
2765 //------------------------------MemInterface-----------------------------------
2766 MemInterface::MemInterface(char *base, char *index, char *scale, char *disp)
2767   : Interface("MEMORY_INTER"), _base(base), _index(index), _scale(scale), _disp(disp) {
2768 }
2769 MemInterface::~MemInterface() {
2770   // not owner of any character arrays
2771 }
2772 
2773 void MemInterface::dump() {
2774   output(stderr);
2775 }
2776 
2777 // Write info to output files
2778 void MemInterface::output(FILE *fp) {
2779   Interface::output(fp);
2780   if ( _base  != NULL ) fprintf(fp,"  base  == %s\n", _base);
2781   if ( _index != NULL ) fprintf(fp,"  index == %s\n", _index);
2782   if ( _scale != NULL ) fprintf(fp,"  scale == %s\n", _scale);
2783   if ( _disp  != NULL ) fprintf(fp,"  disp  == %s\n", _disp);
2784   // fprintf(fp,"\n");
2785 }
2786 
2787 //------------------------------CondInterface----------------------------------
2788 CondInterface::CondInterface(const char* equal,         const char* equal_format,
2789                              const char* not_equal,     const char* not_equal_format,
2790                              const char* less,          const char* less_format,
2791                              const char* greater_equal, const char* greater_equal_format,
2792                              const char* less_equal,    const char* less_equal_format,
2793                              const char* greater,       const char* greater_format,
2794                              const char* overflow,      const char* overflow_format,
2795                              const char* no_overflow,   const char* no_overflow_format)
2796   : Interface("COND_INTER"),
2797     _equal(equal),                 _equal_format(equal_format),
2798     _not_equal(not_equal),         _not_equal_format(not_equal_format),
2799     _less(less),                   _less_format(less_format),
2800     _greater_equal(greater_equal), _greater_equal_format(greater_equal_format),
2801     _less_equal(less_equal),       _less_equal_format(less_equal_format),
2802     _greater(greater),             _greater_format(greater_format),
2803     _overflow(overflow),           _overflow_format(overflow_format),
2804     _no_overflow(no_overflow),     _no_overflow_format(no_overflow_format) {
2805 }
2806 CondInterface::~CondInterface() {
2807   // not owner of any character arrays
2808 }
2809 
2810 void CondInterface::dump() {
2811   output(stderr);
2812 }
2813 
2814 // Write info to output files
2815 void CondInterface::output(FILE *fp) {
2816   Interface::output(fp);
2817   if ( _equal  != NULL )     fprintf(fp," equal        == %s\n", _equal);
2818   if ( _not_equal  != NULL ) fprintf(fp," not_equal    == %s\n", _not_equal);
2819   if ( _less  != NULL )      fprintf(fp," less         == %s\n", _less);
2820   if ( _greater_equal  != NULL ) fprintf(fp," greater_equal    == %s\n", _greater_equal);
2821   if ( _less_equal  != NULL ) fprintf(fp," less_equal   == %s\n", _less_equal);
2822   if ( _greater  != NULL )    fprintf(fp," greater      == %s\n", _greater);
2823   if ( _overflow != NULL )    fprintf(fp," overflow     == %s\n", _overflow);
2824   if ( _no_overflow != NULL ) fprintf(fp," no_overflow  == %s\n", _no_overflow);
2825   // fprintf(fp,"\n");
2826 }
2827 
2828 //------------------------------ConstructRule----------------------------------
2829 ConstructRule::ConstructRule(char *cnstr)
2830   : _construct(cnstr) {
2831 }
2832 ConstructRule::~ConstructRule() {
2833 }
2834 
2835 void ConstructRule::dump() {
2836   output(stderr);
2837 }
2838 
2839 void ConstructRule::output(FILE *fp) {
2840   fprintf(fp,"\nConstruct Rule\n");  // Write to output files
2841 }
2842 
2843 
2844 //==============================Shared Forms===================================
2845 //------------------------------AttributeForm----------------------------------
2846 int         AttributeForm::_insId   = 0;           // start counter at 0
2847 int         AttributeForm::_opId    = 0;           // start counter at 0
2848 const char* AttributeForm::_ins_cost = "ins_cost"; // required name
2849 const char* AttributeForm::_op_cost  = "op_cost";  // required name
2850 
2851 AttributeForm::AttributeForm(char *attr, int type, char *attrdef)
2852   : Form(Form::ATTR), _attrname(attr), _atype(type), _attrdef(attrdef) {
2853     if (type==OP_ATTR) {
2854       id = ++_opId;
2855     }
2856     else if (type==INS_ATTR) {
2857       id = ++_insId;
2858     }
2859     else assert( false,"");
2860 }
2861 AttributeForm::~AttributeForm() {
2862 }
2863 
2864 // Dynamic type check
2865 AttributeForm *AttributeForm::is_attribute() const {
2866   return (AttributeForm*)this;
2867 }
2868 
2869 
2870 // inlined  // int  AttributeForm::type() { return id;}
2871 
2872 void AttributeForm::dump() {
2873   output(stderr);
2874 }
2875 
2876 void AttributeForm::output(FILE *fp) {
2877   if( _attrname && _attrdef ) {
2878     fprintf(fp,"\n// AttributeForm \nstatic const int %s = %s;\n",
2879             _attrname, _attrdef);
2880   }
2881   else {
2882     fprintf(fp,"\n// AttributeForm missing name %s or definition %s\n",
2883             (_attrname?_attrname:""), (_attrdef?_attrdef:"") );
2884   }
2885 }
2886 
2887 //------------------------------Component--------------------------------------
2888 Component::Component(const char *name, const char *type, int usedef)
2889   : _name(name), _type(type), _usedef(usedef) {
2890     _ftype = Form::COMP;
2891 }
2892 Component::~Component() {
2893 }
2894 
2895 // True if this component is equal to the parameter.
2896 bool Component::is(int use_def_kill_enum) const {
2897   return (_usedef == use_def_kill_enum ? true : false);
2898 }
2899 // True if this component is used/def'd/kill'd as the parameter suggests.
2900 bool Component::isa(int use_def_kill_enum) const {
2901   return (_usedef & use_def_kill_enum) == use_def_kill_enum;
2902 }
2903 
2904 // Extend this component with additional use/def/kill behavior
2905 int Component::promote_use_def_info(int new_use_def) {
2906   _usedef |= new_use_def;
2907 
2908   return _usedef;
2909 }
2910 
2911 // Check the base type of this component, if it has one
2912 const char *Component::base_type(FormDict &globals) {
2913   const Form *frm = globals[_type];
2914   if (frm == NULL) return NULL;
2915   OperandForm *op = frm->is_operand();
2916   if (op == NULL) return NULL;
2917   if (op->ideal_only()) return op->_ident;
2918   return (char *)op->ideal_type(globals);
2919 }
2920 
2921 void Component::dump() {
2922   output(stderr);
2923 }
2924 
2925 void Component::output(FILE *fp) {
2926   fprintf(fp,"Component:");  // Write to output files
2927   fprintf(fp, "  name = %s", _name);
2928   fprintf(fp, ", type = %s", _type);
2929   assert(_usedef != 0, "unknown effect");
2930   fprintf(fp, ", use/def = %s\n", getUsedefName());
2931 }
2932 
2933 
2934 //------------------------------ComponentList---------------------------------
2935 ComponentList::ComponentList() : NameList(), _matchcnt(0) {
2936 }
2937 ComponentList::~ComponentList() {
2938   // // This list may not own its elements if copied via assignment
2939   // Component *component;
2940   // for (reset(); (component = iter()) != NULL;) {
2941   //   delete component;
2942   // }
2943 }
2944 
2945 void   ComponentList::insert(Component *component, bool mflag) {
2946   NameList::addName((char *)component);
2947   if(mflag) _matchcnt++;
2948 }
2949 void   ComponentList::insert(const char *name, const char *opType, int usedef,
2950                              bool mflag) {
2951   Component * component = new Component(name, opType, usedef);
2952   insert(component, mflag);
2953 }
2954 Component *ComponentList::current() { return (Component*)NameList::current(); }
2955 Component *ComponentList::iter()    { return (Component*)NameList::iter(); }
2956 Component *ComponentList::match_iter() {
2957   if(_iter < _matchcnt) return (Component*)NameList::iter();
2958   return NULL;
2959 }
2960 Component *ComponentList::post_match_iter() {
2961   Component *comp = iter();
2962   // At end of list?
2963   if ( comp == NULL ) {
2964     return comp;
2965   }
2966   // In post-match components?
2967   if (_iter > match_count()-1) {
2968     return comp;
2969   }
2970 
2971   return post_match_iter();
2972 }
2973 
2974 void       ComponentList::reset()   { NameList::reset(); }
2975 int        ComponentList::count()   { return NameList::count(); }
2976 
2977 Component *ComponentList::operator[](int position) {
2978   // Shortcut complete iteration if there are not enough entries
2979   if (position >= count()) return NULL;
2980 
2981   int        index     = 0;
2982   Component *component = NULL;
2983   for (reset(); (component = iter()) != NULL;) {
2984     if (index == position) {
2985       return component;
2986     }
2987     ++index;
2988   }
2989 
2990   return NULL;
2991 }
2992 
2993 const Component *ComponentList::search(const char *name) {
2994   PreserveIter pi(this);
2995   reset();
2996   for( Component *comp = NULL; ((comp = iter()) != NULL); ) {
2997     if( strcmp(comp->_name,name) == 0 ) return comp;
2998   }
2999 
3000   return NULL;
3001 }
3002 
3003 // Return number of USEs + number of DEFs
3004 // When there are no components, or the first component is a USE,
3005 // then we add '1' to hold a space for the 'result' operand.
3006 int ComponentList::num_operands() {
3007   PreserveIter pi(this);
3008   uint       count = 1;           // result operand
3009   uint       position = 0;
3010 
3011   Component *component  = NULL;
3012   for( reset(); (component = iter()) != NULL; ++position ) {
3013     if( component->isa(Component::USE) ||
3014         ( position == 0 && (! component->isa(Component::DEF))) ) {
3015       ++count;
3016     }
3017   }
3018 
3019   return count;
3020 }
3021 
3022 // Return zero-based position of operand 'name' in list;  -1 if not in list.
3023 // if parameter 'usedef' is ::USE, it will match USE, USE_DEF, ...
3024 int ComponentList::operand_position(const char *name, int usedef, Form *fm) {
3025   PreserveIter pi(this);
3026   int position = 0;
3027   int num_opnds = num_operands();
3028   Component *component;
3029   Component* preceding_non_use = NULL;
3030   Component* first_def = NULL;
3031   for (reset(); (component = iter()) != NULL; ++position) {
3032     // When the first component is not a DEF,
3033     // leave space for the result operand!
3034     if ( position==0 && (! component->isa(Component::DEF)) ) {
3035       ++position;
3036       ++num_opnds;
3037     }
3038     if (strcmp(name, component->_name)==0 && (component->isa(usedef))) {
3039       // When the first entry in the component list is a DEF and a USE
3040       // Treat them as being separate, a DEF first, then a USE
3041       if( position==0
3042           && usedef==Component::USE && component->isa(Component::DEF) ) {
3043         assert(position+1 < num_opnds, "advertised index in bounds");
3044         return position+1;
3045       } else {
3046         if( preceding_non_use && strcmp(component->_name, preceding_non_use->_name) ) {
3047           fprintf(stderr, "the name '%s(%s)' should not precede the name '%s(%s)'",
3048                   preceding_non_use->_name, preceding_non_use->getUsedefName(),
3049                   name, component->getUsedefName());
3050           if (fm && fm->is_instruction()) fprintf(stderr,  "in form '%s'", fm->is_instruction()->_ident);
3051           if (fm && fm->is_operand()) fprintf(stderr,  "in form '%s'", fm->is_operand()->_ident);
3052           fprintf(stderr,  "\n");
3053         }
3054         if( position >= num_opnds ) {
3055           fprintf(stderr, "the name '%s' is too late in its name list", name);
3056           if (fm && fm->is_instruction()) fprintf(stderr,  "in form '%s'", fm->is_instruction()->_ident);
3057           if (fm && fm->is_operand()) fprintf(stderr,  "in form '%s'", fm->is_operand()->_ident);
3058           fprintf(stderr,  "\n");
3059         }
3060         assert(position < num_opnds, "advertised index in bounds");
3061         return position;
3062       }
3063     }
3064     if( component->isa(Component::DEF)
3065         && component->isa(Component::USE) ) {
3066       ++position;
3067       if( position != 1 )  --position;   // only use two slots for the 1st USE_DEF
3068     }
3069     if( component->isa(Component::DEF) && !first_def ) {
3070       first_def = component;
3071     }
3072     if( !component->isa(Component::USE) && component != first_def ) {
3073       preceding_non_use = component;
3074     } else if( preceding_non_use && !strcmp(component->_name, preceding_non_use->_name) ) {
3075       preceding_non_use = NULL;
3076     }
3077   }
3078   return Not_in_list;
3079 }
3080 
3081 // Find position for this name, regardless of use/def information
3082 int ComponentList::operand_position(const char *name) {
3083   PreserveIter pi(this);
3084   int position = 0;
3085   Component *component;
3086   for (reset(); (component = iter()) != NULL; ++position) {
3087     // When the first component is not a DEF,
3088     // leave space for the result operand!
3089     if ( position==0 && (! component->isa(Component::DEF)) ) {
3090       ++position;
3091     }
3092     if (strcmp(name, component->_name)==0) {
3093       return position;
3094     }
3095     if( component->isa(Component::DEF)
3096         && component->isa(Component::USE) ) {
3097       ++position;
3098       if( position != 1 )  --position;   // only use two slots for the 1st USE_DEF
3099     }
3100   }
3101   return Not_in_list;
3102 }
3103 
3104 int ComponentList::operand_position_format(const char *name, Form *fm) {
3105   PreserveIter pi(this);
3106   int  first_position = operand_position(name);
3107   int  use_position   = operand_position(name, Component::USE, fm);
3108 
3109   return ((first_position < use_position) ? use_position : first_position);
3110 }
3111 
3112 int ComponentList::label_position() {
3113   PreserveIter pi(this);
3114   int position = 0;
3115   reset();
3116   for( Component *comp; (comp = iter()) != NULL; ++position) {
3117     // When the first component is not a DEF,
3118     // leave space for the result operand!
3119     if ( position==0 && (! comp->isa(Component::DEF)) ) {
3120       ++position;
3121     }
3122     if (strcmp(comp->_type, "label")==0) {
3123       return position;
3124     }
3125     if( comp->isa(Component::DEF)
3126         && comp->isa(Component::USE) ) {
3127       ++position;
3128       if( position != 1 )  --position;   // only use two slots for the 1st USE_DEF
3129     }
3130   }
3131 
3132   return -1;
3133 }
3134 
3135 int ComponentList::method_position() {
3136   PreserveIter pi(this);
3137   int position = 0;
3138   reset();
3139   for( Component *comp; (comp = iter()) != NULL; ++position) {
3140     // When the first component is not a DEF,
3141     // leave space for the result operand!
3142     if ( position==0 && (! comp->isa(Component::DEF)) ) {
3143       ++position;
3144     }
3145     if (strcmp(comp->_type, "method")==0) {
3146       return position;
3147     }
3148     if( comp->isa(Component::DEF)
3149         && comp->isa(Component::USE) ) {
3150       ++position;
3151       if( position != 1 )  --position;   // only use two slots for the 1st USE_DEF
3152     }
3153   }
3154 
3155   return -1;
3156 }
3157 
3158 void ComponentList::dump() { output(stderr); }
3159 
3160 void ComponentList::output(FILE *fp) {
3161   PreserveIter pi(this);
3162   fprintf(fp, "\n");
3163   Component *component;
3164   for (reset(); (component = iter()) != NULL;) {
3165     component->output(fp);
3166   }
3167   fprintf(fp, "\n");
3168 }
3169 
3170 //------------------------------MatchNode--------------------------------------
3171 MatchNode::MatchNode(ArchDesc &ad, const char *result, const char *mexpr,
3172                      const char *opType, MatchNode *lChild, MatchNode *rChild)
3173   : _AD(ad), _result(result), _name(mexpr), _opType(opType),
3174     _lChild(lChild), _rChild(rChild), _internalop(0), _numleaves(0),
3175     _commutative_id(0) {
3176   _numleaves = (lChild ? lChild->_numleaves : 0)
3177                + (rChild ? rChild->_numleaves : 0);
3178 }
3179 
3180 MatchNode::MatchNode(ArchDesc &ad, MatchNode& mnode)
3181   : _AD(ad), _result(mnode._result), _name(mnode._name),
3182     _opType(mnode._opType), _lChild(mnode._lChild), _rChild(mnode._rChild),
3183     _internalop(0), _numleaves(mnode._numleaves),
3184     _commutative_id(mnode._commutative_id) {
3185 }
3186 
3187 MatchNode::MatchNode(ArchDesc &ad, MatchNode& mnode, int clone)
3188   : _AD(ad), _result(mnode._result), _name(mnode._name),
3189     _opType(mnode._opType),
3190     _internalop(0), _numleaves(mnode._numleaves),
3191     _commutative_id(mnode._commutative_id) {
3192   if (mnode._lChild) {
3193     _lChild = new MatchNode(ad, *mnode._lChild, clone);
3194   } else {
3195     _lChild = NULL;
3196   }
3197   if (mnode._rChild) {
3198     _rChild = new MatchNode(ad, *mnode._rChild, clone);
3199   } else {
3200     _rChild = NULL;
3201   }
3202 }
3203 
3204 MatchNode::~MatchNode() {
3205   // // This node may not own its children if copied via assignment
3206   // if( _lChild ) delete _lChild;
3207   // if( _rChild ) delete _rChild;
3208 }
3209 
3210 bool  MatchNode::find_type(const char *type, int &position) const {
3211   if ( (_lChild != NULL) && (_lChild->find_type(type, position)) ) return true;
3212   if ( (_rChild != NULL) && (_rChild->find_type(type, position)) ) return true;
3213 
3214   if (strcmp(type,_opType)==0)  {
3215     return true;
3216   } else {
3217     ++position;
3218   }
3219   return false;
3220 }
3221 
3222 // Recursive call collecting info on top-level operands, not transitive.
3223 // Implementation does not modify state of internal structures.
3224 void MatchNode::append_components(FormDict& locals, ComponentList& components,
3225                                   bool def_flag) const {
3226   int usedef = def_flag ? Component::DEF : Component::USE;
3227   FormDict &globals = _AD.globalNames();
3228 
3229   assert (_name != NULL, "MatchNode::build_components encountered empty node\n");
3230   // Base case
3231   if (_lChild==NULL && _rChild==NULL) {
3232     // If _opType is not an operation, do not build a component for it #####
3233     const Form *f = globals[_opType];
3234     if( f != NULL ) {
3235       // Add non-ideals that are operands, operand-classes,
3236       if( ! f->ideal_only()
3237           && (f->is_opclass() || f->is_operand()) ) {
3238         components.insert(_name, _opType, usedef, true);
3239       }
3240     }
3241     return;
3242   }
3243   // Promote results of "Set" to DEF
3244   bool tmpdef_flag = (!strcmp(_opType, "Set")) ? true : false;
3245   if (_lChild) _lChild->append_components(locals, components, tmpdef_flag);
3246   tmpdef_flag = false;   // only applies to component immediately following 'Set'
3247   if (_rChild) _rChild->append_components(locals, components, tmpdef_flag);
3248 }
3249 
3250 // Find the n'th base-operand in the match node,
3251 // recursively investigates match rules of user-defined operands.
3252 //
3253 // Implementation does not modify state of internal structures since they
3254 // can be shared.
3255 bool MatchNode::base_operand(uint &position, FormDict &globals,
3256                              const char * &result, const char * &name,
3257                              const char * &opType) const {
3258   assert (_name != NULL, "MatchNode::base_operand encountered empty node\n");
3259   // Base case
3260   if (_lChild==NULL && _rChild==NULL) {
3261     // Check for special case: "Universe", "label"
3262     if (strcmp(_opType,"Universe") == 0 || strcmp(_opType,"label")==0 ) {
3263       if (position == 0) {
3264         result = _result;
3265         name   = _name;
3266         opType = _opType;
3267         return 1;
3268       } else {
3269         -- position;
3270         return 0;
3271       }
3272     }
3273 
3274     const Form *form = globals[_opType];
3275     MatchNode *matchNode = NULL;
3276     // Check for user-defined type
3277     if (form) {
3278       // User operand or instruction?
3279       OperandForm  *opForm = form->is_operand();
3280       InstructForm *inForm = form->is_instruction();
3281       if ( opForm ) {
3282         matchNode = (MatchNode*)opForm->_matrule;
3283       } else if ( inForm ) {
3284         matchNode = (MatchNode*)inForm->_matrule;
3285       }
3286     }
3287     // if this is user-defined, recurse on match rule
3288     // User-defined operand and instruction forms have a match-rule.
3289     if (matchNode) {
3290       return (matchNode->base_operand(position,globals,result,name,opType));
3291     } else {
3292       // Either not a form, or a system-defined form (no match rule).
3293       if (position==0) {
3294         result = _result;
3295         name   = _name;
3296         opType = _opType;
3297         return 1;
3298       } else {
3299         --position;
3300         return 0;
3301       }
3302     }
3303 
3304   } else {
3305     // Examine the left child and right child as well
3306     if (_lChild) {
3307       if (_lChild->base_operand(position, globals, result, name, opType))
3308         return 1;
3309     }
3310 
3311     if (_rChild) {
3312       if (_rChild->base_operand(position, globals, result, name, opType))
3313         return 1;
3314     }
3315   }
3316 
3317   return 0;
3318 }
3319 
3320 // Recursive call on all operands' match rules in my match rule.
3321 uint  MatchNode::num_consts(FormDict &globals) const {
3322   uint        index      = 0;
3323   uint        num_consts = 0;
3324   const char *result;
3325   const char *name;
3326   const char *opType;
3327 
3328   for (uint position = index;
3329        base_operand(position,globals,result,name,opType); position = index) {
3330     ++index;
3331     if( ideal_to_const_type(opType) )        num_consts++;
3332   }
3333 
3334   return num_consts;
3335 }
3336 
3337 // Recursive call on all operands' match rules in my match rule.
3338 // Constants in match rule subtree with specified type
3339 uint  MatchNode::num_consts(FormDict &globals, Form::DataType type) const {
3340   uint        index      = 0;
3341   uint        num_consts = 0;
3342   const char *result;
3343   const char *name;
3344   const char *opType;
3345 
3346   for (uint position = index;
3347        base_operand(position,globals,result,name,opType); position = index) {
3348     ++index;
3349     if( ideal_to_const_type(opType) == type ) num_consts++;
3350   }
3351 
3352   return num_consts;
3353 }
3354 
3355 // Recursive call on all operands' match rules in my match rule.
3356 uint  MatchNode::num_const_ptrs(FormDict &globals) const {
3357   return  num_consts( globals, Form::idealP );
3358 }
3359 
3360 bool  MatchNode::sets_result() const {
3361   return   ( (strcmp(_name,"Set") == 0) ? true : false );
3362 }
3363 
3364 const char *MatchNode::reduce_right(FormDict &globals) const {
3365   // If there is no right reduction, return NULL.
3366   const char      *rightStr    = NULL;
3367 
3368   // If we are a "Set", start from the right child.
3369   const MatchNode *const mnode = sets_result() ?
3370     (const MatchNode *)this->_rChild :
3371     (const MatchNode *)this;
3372 
3373   // If our right child exists, it is the right reduction
3374   if ( mnode->_rChild ) {
3375     rightStr = mnode->_rChild->_internalop ? mnode->_rChild->_internalop
3376       : mnode->_rChild->_opType;
3377   }
3378   // Else, May be simple chain rule: (Set dst operand_form), rightStr=NULL;
3379   return rightStr;
3380 }
3381 
3382 const char *MatchNode::reduce_left(FormDict &globals) const {
3383   // If there is no left reduction, return NULL.
3384   const char  *leftStr  = NULL;
3385 
3386   // If we are a "Set", start from the right child.
3387   const MatchNode *const mnode = sets_result() ?
3388     (const MatchNode *)this->_rChild :
3389     (const MatchNode *)this;
3390 
3391   // If our left child exists, it is the left reduction
3392   if ( mnode->_lChild ) {
3393     leftStr = mnode->_lChild->_internalop ? mnode->_lChild->_internalop
3394       : mnode->_lChild->_opType;
3395   } else {
3396     // May be simple chain rule: (Set dst operand_form_source)
3397     if ( sets_result() ) {
3398       OperandForm *oper = globals[mnode->_opType]->is_operand();
3399       if( oper ) {
3400         leftStr = mnode->_opType;
3401       }
3402     }
3403   }
3404   return leftStr;
3405 }
3406 
3407 //------------------------------count_instr_names------------------------------
3408 // Count occurrences of operands names in the leaves of the instruction
3409 // match rule.
3410 void MatchNode::count_instr_names( Dict &names ) {
3411   if( this == NULL ) return;
3412   if( _lChild ) _lChild->count_instr_names(names);
3413   if( _rChild ) _rChild->count_instr_names(names);
3414   if( !_lChild && !_rChild ) {
3415     uintptr_t cnt = (uintptr_t)names[_name];
3416     cnt++;                      // One more name found
3417     names.Insert(_name,(void*)cnt);
3418   }
3419 }
3420 
3421 //------------------------------build_instr_pred-------------------------------
3422 // Build a path to 'name' in buf.  Actually only build if cnt is zero, so we
3423 // can skip some leading instances of 'name'.
3424 int MatchNode::build_instr_pred( char *buf, const char *name, int cnt ) {
3425   if( _lChild ) {
3426     if( !cnt ) strcpy( buf, "_kids[0]->" );
3427     cnt = _lChild->build_instr_pred( buf+strlen(buf), name, cnt );
3428     if( cnt < 0 ) return cnt;   // Found it, all done
3429   }
3430   if( _rChild ) {
3431     if( !cnt ) strcpy( buf, "_kids[1]->" );
3432     cnt = _rChild->build_instr_pred( buf+strlen(buf), name, cnt );
3433     if( cnt < 0 ) return cnt;   // Found it, all done
3434   }
3435   if( !_lChild && !_rChild ) {  // Found a leaf
3436     // Wrong name?  Give up...
3437     if( strcmp(name,_name) ) return cnt;
3438     if( !cnt ) strcpy(buf,"_leaf");
3439     return cnt-1;
3440   }
3441   return cnt;
3442 }
3443 
3444 
3445 //------------------------------build_internalop-------------------------------
3446 // Build string representation of subtree
3447 void MatchNode::build_internalop( ) {
3448   char *iop, *subtree;
3449   const char *lstr, *rstr;
3450   // Build string representation of subtree
3451   // Operation lchildType rchildType
3452   int len = (int)strlen(_opType) + 4;
3453   lstr = (_lChild) ? ((_lChild->_internalop) ?
3454                        _lChild->_internalop : _lChild->_opType) : "";
3455   rstr = (_rChild) ? ((_rChild->_internalop) ?
3456                        _rChild->_internalop : _rChild->_opType) : "";
3457   len += (int)strlen(lstr) + (int)strlen(rstr);
3458   subtree = (char *)malloc(len);
3459   sprintf(subtree,"_%s_%s_%s", _opType, lstr, rstr);
3460   // Hash the subtree string in _internalOps; if a name exists, use it
3461   iop = (char *)_AD._internalOps[subtree];
3462   // Else create a unique name, and add it to the hash table
3463   if (iop == NULL) {
3464     iop = subtree;
3465     _AD._internalOps.Insert(subtree, iop);
3466     _AD._internalOpNames.addName(iop);
3467     _AD._internalMatch.Insert(iop, this);
3468   }
3469   // Add the internal operand name to the MatchNode
3470   _internalop = iop;
3471   _result = iop;
3472 }
3473 
3474 
3475 void MatchNode::dump() {
3476   output(stderr);
3477 }
3478 
3479 void MatchNode::output(FILE *fp) {
3480   if (_lChild==0 && _rChild==0) {
3481     fprintf(fp," %s",_name);    // operand
3482   }
3483   else {
3484     fprintf(fp," (%s ",_name);  // " (opcodeName "
3485     if(_lChild) _lChild->output(fp); //               left operand
3486     if(_rChild) _rChild->output(fp); //                    right operand
3487     fprintf(fp,")");                 //                                 ")"
3488   }
3489 }
3490 
3491 int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
3492   static const char *needs_ideal_memory_list[] = {
3493     "StoreI","StoreL","StoreP","StoreN","StoreNKlass","StoreD","StoreF" ,
3494     "StoreB","StoreC","Store" ,"StoreFP",
3495     "LoadI", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF"  ,
3496     "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" ,
3497     "StoreVector", "LoadVector",
3498     "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned",
3499     "LoadPLocked",
3500     "StorePConditional", "StoreIConditional", "StoreLConditional",
3501     "CompareAndSwapB", "CompareAndSwapS", "CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
3502     "WeakCompareAndSwapB", "WeakCompareAndSwapS", "WeakCompareAndSwapI", "WeakCompareAndSwapL", "WeakCompareAndSwapP", "WeakCompareAndSwapN",
3503     "CompareAndExchangeB", "CompareAndExchangeS", "CompareAndExchangeI", "CompareAndExchangeL", "CompareAndExchangeP", "CompareAndExchangeN",
3504     "StoreCM",
3505     "ClearArray",
3506     "GetAndSetB", "GetAndSetS", "GetAndAddI", "GetAndSetI", "GetAndSetP",
3507     "GetAndAddB", "GetAndAddS", "GetAndAddL", "GetAndSetL", "GetAndSetN",
3508   };
3509   int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
3510   if( strcmp(_opType,"PrefetchAllocation")==0 )
3511     return 1;
3512   if( _lChild ) {
3513     const char *opType = _lChild->_opType;
3514     for( int i=0; i<cnt; i++ )
3515       if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3516         return 1;
3517     if( _lChild->needs_ideal_memory_edge(globals) )
3518       return 1;
3519   }
3520   if( _rChild ) {
3521     const char *opType = _rChild->_opType;
3522     for( int i=0; i<cnt; i++ )
3523       if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3524         return 1;
3525     if( _rChild->needs_ideal_memory_edge(globals) )
3526       return 1;
3527   }
3528 
3529   return 0;
3530 }
3531 
3532 // TRUE if defines a derived oop, and so needs a base oop edge present
3533 // post-matching.
3534 int MatchNode::needs_base_oop_edge() const {
3535   if( !strcmp(_opType,"AddP") ) return 1;
3536   if( strcmp(_opType,"Set") ) return 0;
3537   return !strcmp(_rChild->_opType,"AddP");
3538 }
3539 
3540 int InstructForm::needs_base_oop_edge(FormDict &globals) const {
3541   if( is_simple_chain_rule(globals) ) {
3542     const char *src = _matrule->_rChild->_opType;
3543     OperandForm *src_op = globals[src]->is_operand();
3544     assert( src_op, "Not operand class of chain rule" );
3545     return src_op->_matrule ? src_op->_matrule->needs_base_oop_edge() : 0;
3546   }                             // Else check instruction
3547 
3548   return _matrule ? _matrule->needs_base_oop_edge() : 0;
3549 }
3550 
3551 
3552 //-------------------------cisc spilling methods-------------------------------
3553 // helper routines and methods for detecting cisc-spilling instructions
3554 //-------------------------cisc_spill_merge------------------------------------
3555 int MatchNode::cisc_spill_merge(int left_spillable, int right_spillable) {
3556   int cisc_spillable  = Maybe_cisc_spillable;
3557 
3558   // Combine results of left and right checks
3559   if( (left_spillable == Maybe_cisc_spillable) && (right_spillable == Maybe_cisc_spillable) ) {
3560     // neither side is spillable, nor prevents cisc spilling
3561     cisc_spillable = Maybe_cisc_spillable;
3562   }
3563   else if( (left_spillable == Maybe_cisc_spillable) && (right_spillable > Maybe_cisc_spillable) ) {
3564     // right side is spillable
3565     cisc_spillable = right_spillable;
3566   }
3567   else if( (right_spillable == Maybe_cisc_spillable) && (left_spillable > Maybe_cisc_spillable) ) {
3568     // left side is spillable
3569     cisc_spillable = left_spillable;
3570   }
3571   else if( (left_spillable == Not_cisc_spillable) || (right_spillable == Not_cisc_spillable) ) {
3572     // left or right prevents cisc spilling this instruction
3573     cisc_spillable = Not_cisc_spillable;
3574   }
3575   else {
3576     // Only allow one to spill
3577     cisc_spillable = Not_cisc_spillable;
3578   }
3579 
3580   return cisc_spillable;
3581 }
3582 
3583 //-------------------------root_ops_match--------------------------------------
3584 bool static root_ops_match(FormDict &globals, const char *op1, const char *op2) {
3585   // Base Case: check that the current operands/operations match
3586   assert( op1, "Must have op's name");
3587   assert( op2, "Must have op's name");
3588   const Form *form1 = globals[op1];
3589   const Form *form2 = globals[op2];
3590 
3591   return (form1 == form2);
3592 }
3593 
3594 //-------------------------cisc_spill_match_node-------------------------------
3595 // Recursively check two MatchRules for legal conversion via cisc-spilling
3596 int MatchNode::cisc_spill_match(FormDict& globals, RegisterForm* registers, MatchNode* mRule2, const char* &operand, const char* &reg_type) {
3597   int cisc_spillable  = Maybe_cisc_spillable;
3598   int left_spillable  = Maybe_cisc_spillable;
3599   int right_spillable = Maybe_cisc_spillable;
3600 
3601   // Check that each has same number of operands at this level
3602   if( (_lChild && !(mRule2->_lChild)) || (_rChild && !(mRule2->_rChild)) )
3603     return Not_cisc_spillable;
3604 
3605   // Base Case: check that the current operands/operations match
3606   // or are CISC spillable
3607   assert( _opType, "Must have _opType");
3608   assert( mRule2->_opType, "Must have _opType");
3609   const Form *form  = globals[_opType];
3610   const Form *form2 = globals[mRule2->_opType];
3611   if( form == form2 ) {
3612     cisc_spillable = Maybe_cisc_spillable;
3613   } else {
3614     const InstructForm *form2_inst = form2 ? form2->is_instruction() : NULL;
3615     const char *name_left  = mRule2->_lChild ? mRule2->_lChild->_opType : NULL;
3616     const char *name_right = mRule2->_rChild ? mRule2->_rChild->_opType : NULL;
3617     DataType data_type = Form::none;
3618     if (form->is_operand()) {
3619       // Make sure the loadX matches the type of the reg
3620       data_type = form->ideal_to_Reg_type(form->is_operand()->ideal_type(globals));
3621     }
3622     // Detect reg vs (loadX memory)
3623     if( form->is_cisc_reg(globals)
3624         && form2_inst
3625         && data_type != Form::none
3626         && (is_load_from_memory(mRule2->_opType) == data_type) // reg vs. (load memory)
3627         && (name_left != NULL)       // NOT (load)
3628         && (name_right == NULL) ) {  // NOT (load memory foo)
3629       const Form *form2_left = name_left ? globals[name_left] : NULL;
3630       if( form2_left && form2_left->is_cisc_mem(globals) ) {
3631         cisc_spillable = Is_cisc_spillable;
3632         operand        = _name;
3633         reg_type       = _result;
3634         return Is_cisc_spillable;
3635       } else {
3636         cisc_spillable = Not_cisc_spillable;
3637       }
3638     }
3639     // Detect reg vs memory
3640     else if( form->is_cisc_reg(globals) && form2->is_cisc_mem(globals) ) {
3641       cisc_spillable = Is_cisc_spillable;
3642       operand        = _name;
3643       reg_type       = _result;
3644       return Is_cisc_spillable;
3645     } else {
3646       cisc_spillable = Not_cisc_spillable;
3647     }
3648   }
3649 
3650   // If cisc is still possible, check rest of tree
3651   if( cisc_spillable == Maybe_cisc_spillable ) {
3652     // Check that each has same number of operands at this level
3653     if( (_lChild && !(mRule2->_lChild)) || (_rChild && !(mRule2->_rChild)) ) return Not_cisc_spillable;
3654 
3655     // Check left operands
3656     if( (_lChild == NULL) && (mRule2->_lChild == NULL) ) {
3657       left_spillable = Maybe_cisc_spillable;
3658     } else  if (_lChild != NULL) {
3659       left_spillable = _lChild->cisc_spill_match(globals, registers, mRule2->_lChild, operand, reg_type);
3660     }
3661 
3662     // Check right operands
3663     if( (_rChild == NULL) && (mRule2->_rChild == NULL) ) {
3664       right_spillable =  Maybe_cisc_spillable;
3665     } else if (_rChild != NULL) {
3666       right_spillable = _rChild->cisc_spill_match(globals, registers, mRule2->_rChild, operand, reg_type);
3667     }
3668 
3669     // Combine results of left and right checks
3670     cisc_spillable = cisc_spill_merge(left_spillable, right_spillable);
3671   }
3672 
3673   return cisc_spillable;
3674 }
3675 
3676 //---------------------------cisc_spill_match_rule------------------------------
3677 // Recursively check two MatchRules for legal conversion via cisc-spilling
3678 // This method handles the root of Match tree,
3679 // general recursive checks done in MatchNode
3680 int  MatchRule::matchrule_cisc_spill_match(FormDict& globals, RegisterForm* registers,
3681                                            MatchRule* mRule2, const char* &operand,
3682                                            const char* &reg_type) {
3683   int cisc_spillable  = Maybe_cisc_spillable;
3684   int left_spillable  = Maybe_cisc_spillable;
3685   int right_spillable = Maybe_cisc_spillable;
3686 
3687   // Check that each sets a result
3688   if( !(sets_result() && mRule2->sets_result()) ) return Not_cisc_spillable;
3689   // Check that each has same number of operands at this level
3690   if( (_lChild && !(mRule2->_lChild)) || (_rChild && !(mRule2->_rChild)) ) return Not_cisc_spillable;
3691 
3692   // Check left operands: at root, must be target of 'Set'
3693   if( (_lChild == NULL) || (mRule2->_lChild == NULL) ) {
3694     left_spillable = Not_cisc_spillable;
3695   } else {
3696     // Do not support cisc-spilling instruction's target location
3697     if( root_ops_match(globals, _lChild->_opType, mRule2->_lChild->_opType) ) {
3698       left_spillable = Maybe_cisc_spillable;
3699     } else {
3700       left_spillable = Not_cisc_spillable;
3701     }
3702   }
3703 
3704   // Check right operands: recursive walk to identify reg->mem operand
3705   if( (_rChild == NULL) && (mRule2->_rChild == NULL) ) {
3706     right_spillable =  Maybe_cisc_spillable;
3707   } else {
3708     right_spillable = _rChild->cisc_spill_match(globals, registers, mRule2->_rChild, operand, reg_type);
3709   }
3710 
3711   // Combine results of left and right checks
3712   cisc_spillable = cisc_spill_merge(left_spillable, right_spillable);
3713 
3714   return cisc_spillable;
3715 }
3716 
3717 //----------------------------- equivalent ------------------------------------
3718 // Recursively check to see if two match rules are equivalent.
3719 // This rule handles the root.
3720 bool MatchRule::equivalent(FormDict &globals, MatchNode *mRule2) {
3721   // Check that each sets a result
3722   if (sets_result() != mRule2->sets_result()) {
3723     return false;
3724   }
3725 
3726   // Check that the current operands/operations match
3727   assert( _opType, "Must have _opType");
3728   assert( mRule2->_opType, "Must have _opType");
3729   const Form *form  = globals[_opType];
3730   const Form *form2 = globals[mRule2->_opType];
3731   if( form != form2 ) {
3732     return false;
3733   }
3734 
3735   if (_lChild ) {
3736     if( !_lChild->equivalent(globals, mRule2->_lChild) )
3737       return false;
3738   } else if (mRule2->_lChild) {
3739     return false; // I have NULL left child, mRule2 has non-NULL left child.
3740   }
3741 
3742   if (_rChild ) {
3743     if( !_rChild->equivalent(globals, mRule2->_rChild) )
3744       return false;
3745   } else if (mRule2->_rChild) {
3746     return false; // I have NULL right child, mRule2 has non-NULL right child.
3747   }
3748 
3749   // We've made it through the gauntlet.
3750   return true;
3751 }
3752 
3753 //----------------------------- equivalent ------------------------------------
3754 // Recursively check to see if two match rules are equivalent.
3755 // This rule handles the operands.
3756 bool MatchNode::equivalent(FormDict &globals, MatchNode *mNode2) {
3757   if( !mNode2 )
3758     return false;
3759 
3760   // Check that the current operands/operations match
3761   assert( _opType, "Must have _opType");
3762   assert( mNode2->_opType, "Must have _opType");
3763   const Form *form  = globals[_opType];
3764   const Form *form2 = globals[mNode2->_opType];
3765   if( form != form2 ) {
3766     return false;
3767   }
3768 
3769   // Check that their children also match
3770   if (_lChild ) {
3771     if( !_lChild->equivalent(globals, mNode2->_lChild) )
3772       return false;
3773   } else if (mNode2->_lChild) {
3774     return false; // I have NULL left child, mNode2 has non-NULL left child.
3775   }
3776 
3777   if (_rChild ) {
3778     if( !_rChild->equivalent(globals, mNode2->_rChild) )
3779       return false;
3780   } else if (mNode2->_rChild) {
3781     return false; // I have NULL right child, mNode2 has non-NULL right child.
3782   }
3783 
3784   // We've made it through the gauntlet.
3785   return true;
3786 }
3787 
3788 //-------------------------- has_commutative_op -------------------------------
3789 // Recursively check for commutative operations with subtree operands
3790 // which could be swapped.
3791 void MatchNode::count_commutative_op(int& count) {
3792   static const char *commut_op_list[] = {
3793     "AddI","AddL","AddF","AddD",
3794     "AndI","AndL",
3795     "MaxI","MinI",
3796     "MulI","MulL","MulF","MulD",
3797     "OrI" ,"OrL" ,
3798     "XorI","XorL"
3799   };
3800   int cnt = sizeof(commut_op_list)/sizeof(char*);
3801 
3802   if( _lChild && _rChild && (_lChild->_lChild || _rChild->_lChild) ) {
3803     // Don't swap if right operand is an immediate constant.
3804     bool is_const = false;
3805     if( _rChild->_lChild == NULL && _rChild->_rChild == NULL ) {
3806       FormDict &globals = _AD.globalNames();
3807       const Form *form = globals[_rChild->_opType];
3808       if ( form ) {
3809         OperandForm  *oper = form->is_operand();
3810         if( oper && oper->interface_type(globals) == Form::constant_interface )
3811           is_const = true;
3812       }
3813     }
3814     if( !is_const ) {
3815       for( int i=0; i<cnt; i++ ) {
3816         if( strcmp(_opType, commut_op_list[i]) == 0 ) {
3817           count++;
3818           _commutative_id = count; // id should be > 0
3819           break;
3820         }
3821       }
3822     }
3823   }
3824   if( _lChild )
3825     _lChild->count_commutative_op(count);
3826   if( _rChild )
3827     _rChild->count_commutative_op(count);
3828 }
3829 
3830 //-------------------------- swap_commutative_op ------------------------------
3831 // Recursively swap specified commutative operation with subtree operands.
3832 void MatchNode::swap_commutative_op(bool atroot, int id) {
3833   if( _commutative_id == id ) { // id should be > 0
3834     assert(_lChild && _rChild && (_lChild->_lChild || _rChild->_lChild ),
3835             "not swappable operation");
3836     MatchNode* tmp = _lChild;
3837     _lChild = _rChild;
3838     _rChild = tmp;
3839     // Don't exit here since we need to build internalop.
3840   }
3841 
3842   bool is_set = ( strcmp(_opType, "Set") == 0 );
3843   if( _lChild )
3844     _lChild->swap_commutative_op(is_set, id);
3845   if( _rChild )
3846     _rChild->swap_commutative_op(is_set, id);
3847 
3848   // If not the root, reduce this subtree to an internal operand
3849   if( !atroot && (_lChild || _rChild) ) {
3850     build_internalop();
3851   }
3852 }
3853 
3854 //-------------------------- swap_commutative_op ------------------------------
3855 // Recursively swap specified commutative operation with subtree operands.
3856 void MatchRule::matchrule_swap_commutative_op(const char* instr_ident, int count, int& match_rules_cnt) {
3857   assert(match_rules_cnt < 100," too many match rule clones");
3858   // Clone
3859   MatchRule* clone = new MatchRule(_AD, this);
3860   // Swap operands of commutative operation
3861   ((MatchNode*)clone)->swap_commutative_op(true, count);
3862   char* buf = (char*) malloc(strlen(instr_ident) + 4);
3863   sprintf(buf, "%s_%d", instr_ident, match_rules_cnt++);
3864   clone->_result = buf;
3865 
3866   clone->_next = this->_next;
3867   this-> _next = clone;
3868   if( (--count) > 0 ) {
3869     this-> matchrule_swap_commutative_op(instr_ident, count, match_rules_cnt);
3870     clone->matchrule_swap_commutative_op(instr_ident, count, match_rules_cnt);
3871   }
3872 }
3873 
3874 //------------------------------MatchRule--------------------------------------
3875 MatchRule::MatchRule(ArchDesc &ad)
3876   : MatchNode(ad), _depth(0), _construct(NULL), _numchilds(0) {
3877     _next = NULL;
3878 }
3879 
3880 MatchRule::MatchRule(ArchDesc &ad, MatchRule* mRule)
3881   : MatchNode(ad, *mRule, 0), _depth(mRule->_depth),
3882     _construct(mRule->_construct), _numchilds(mRule->_numchilds) {
3883     _next = NULL;
3884 }
3885 
3886 MatchRule::MatchRule(ArchDesc &ad, MatchNode* mroot, int depth, char *cnstr,
3887                      int numleaves)
3888   : MatchNode(ad,*mroot), _depth(depth), _construct(cnstr),
3889     _numchilds(0) {
3890       _next = NULL;
3891       mroot->_lChild = NULL;
3892       mroot->_rChild = NULL;
3893       delete mroot;
3894       _numleaves = numleaves;
3895       _numchilds = (_lChild ? 1 : 0) + (_rChild ? 1 : 0);
3896 }
3897 MatchRule::~MatchRule() {
3898 }
3899 
3900 // Recursive call collecting info on top-level operands, not transitive.
3901 // Implementation does not modify state of internal structures.
3902 void MatchRule::append_components(FormDict& locals, ComponentList& components, bool def_flag) const {
3903   assert (_name != NULL, "MatchNode::build_components encountered empty node\n");
3904 
3905   MatchNode::append_components(locals, components,
3906                                false /* not necessarily a def */);
3907 }
3908 
3909 // Recursive call on all operands' match rules in my match rule.
3910 // Implementation does not modify state of internal structures  since they
3911 // can be shared.
3912 // The MatchNode that is called first treats its
3913 bool MatchRule::base_operand(uint &position0, FormDict &globals,
3914                              const char *&result, const char * &name,
3915                              const char * &opType)const{
3916   uint position = position0;
3917 
3918   return (MatchNode::base_operand( position, globals, result, name, opType));
3919 }
3920 
3921 
3922 bool MatchRule::is_base_register(FormDict &globals) const {
3923   uint   position = 1;
3924   const char  *result   = NULL;
3925   const char  *name     = NULL;
3926   const char  *opType   = NULL;
3927   if (!base_operand(position, globals, result, name, opType)) {
3928     position = 0;
3929     if( base_operand(position, globals, result, name, opType) &&
3930         (strcmp(opType,"RegI")==0 ||
3931          strcmp(opType,"RegP")==0 ||
3932          strcmp(opType,"RegN")==0 ||
3933          strcmp(opType,"RegL")==0 ||
3934          strcmp(opType,"RegF")==0 ||
3935          strcmp(opType,"RegD")==0 ||
3936          strcmp(opType,"VecS")==0 ||
3937          strcmp(opType,"VecD")==0 ||
3938          strcmp(opType,"VecX")==0 ||
3939          strcmp(opType,"VecY")==0 ||
3940          strcmp(opType,"VecZ")==0 ||
3941          strcmp(opType,"Reg" )==0) ) {
3942       return 1;
3943     }
3944   }
3945   return 0;
3946 }
3947 
3948 Form::DataType MatchRule::is_base_constant(FormDict &globals) const {
3949   uint         position = 1;
3950   const char  *result   = NULL;
3951   const char  *name     = NULL;
3952   const char  *opType   = NULL;
3953   if (!base_operand(position, globals, result, name, opType)) {
3954     position = 0;
3955     if (base_operand(position, globals, result, name, opType)) {
3956       return ideal_to_const_type(opType);
3957     }
3958   }
3959   return Form::none;
3960 }
3961 
3962 bool MatchRule::is_chain_rule(FormDict &globals) const {
3963 
3964   // Check for chain rule, and do not generate a match list for it
3965   if ((_lChild == NULL) && (_rChild == NULL) ) {
3966     const Form *form = globals[_opType];
3967     // If this is ideal, then it is a base match, not a chain rule.
3968     if ( form && form->is_operand() && (!form->ideal_only())) {
3969       return true;
3970     }
3971   }
3972   // Check for "Set" form of chain rule, and do not generate a match list
3973   if (_rChild) {
3974     const char *rch = _rChild->_opType;
3975     const Form *form = globals[rch];
3976     if ((!strcmp(_opType,"Set") &&
3977          ((form) && form->is_operand()))) {
3978       return true;
3979     }
3980   }
3981   return false;
3982 }
3983 
3984 int MatchRule::is_ideal_copy() const {
3985   if( _rChild ) {
3986     const char  *opType = _rChild->_opType;
3987 #if 1
3988     if( strcmp(opType,"CastIP")==0 )
3989       return 1;
3990 #else
3991     if( strcmp(opType,"CastII")==0 )
3992       return 1;
3993     // Do not treat *CastPP this way, because it
3994     // may transfer a raw pointer to an oop.
3995     // If the register allocator were to coalesce this
3996     // into a single LRG, the GC maps would be incorrect.
3997     //if( strcmp(opType,"CastPP")==0 )
3998     //  return 1;
3999     //if( strcmp(opType,"CheckCastPP")==0 )
4000     //  return 1;
4001     //
4002     // Do not treat CastX2P or CastP2X this way, because
4003     // raw pointers and int types are treated differently
4004     // when saving local & stack info for safepoints in
4005     // Output().
4006     //if( strcmp(opType,"CastX2P")==0 )
4007     //  return 1;
4008     //if( strcmp(opType,"CastP2X")==0 )
4009     //  return 1;
4010 #endif
4011   }
4012   if( is_chain_rule(_AD.globalNames()) &&
4013       _lChild && strncmp(_lChild->_opType,"stackSlot",9)==0 )
4014     return 1;
4015   return 0;
4016 }
4017 
4018 
4019 int MatchRule::is_expensive() const {
4020   if( _rChild ) {
4021     const char  *opType = _rChild->_opType;
4022     if( strcmp(opType,"AtanD")==0 ||
4023         strcmp(opType,"DivD")==0 ||
4024         strcmp(opType,"DivF")==0 ||
4025         strcmp(opType,"DivI")==0 ||
4026         strcmp(opType,"Log10D")==0 ||
4027         strcmp(opType,"ModD")==0 ||
4028         strcmp(opType,"ModF")==0 ||
4029         strcmp(opType,"ModI")==0 ||
4030         strcmp(opType,"SqrtD")==0 ||
4031         strcmp(opType,"TanD")==0 ||
4032         strcmp(opType,"ConvD2F")==0 ||
4033         strcmp(opType,"ConvD2I")==0 ||
4034         strcmp(opType,"ConvD2L")==0 ||
4035         strcmp(opType,"ConvF2D")==0 ||
4036         strcmp(opType,"ConvF2I")==0 ||
4037         strcmp(opType,"ConvF2L")==0 ||
4038         strcmp(opType,"ConvI2D")==0 ||
4039         strcmp(opType,"ConvI2F")==0 ||
4040         strcmp(opType,"ConvI2L")==0 ||
4041         strcmp(opType,"ConvL2D")==0 ||
4042         strcmp(opType,"ConvL2F")==0 ||
4043         strcmp(opType,"ConvL2I")==0 ||
4044         strcmp(opType,"DecodeN")==0 ||
4045         strcmp(opType,"EncodeP")==0 ||
4046         strcmp(opType,"EncodePKlass")==0 ||
4047         strcmp(opType,"DecodeNKlass")==0 ||
4048         strcmp(opType,"FmaD") == 0 ||
4049         strcmp(opType,"FmaF") == 0 ||
4050         strcmp(opType,"RoundDouble")==0 ||
4051         strcmp(opType,"RoundFloat")==0 ||
4052         strcmp(opType,"ReverseBytesI")==0 ||
4053         strcmp(opType,"ReverseBytesL")==0 ||
4054         strcmp(opType,"ReverseBytesUS")==0 ||
4055         strcmp(opType,"ReverseBytesS")==0 ||
4056         strcmp(opType,"ReplicateB")==0 ||
4057         strcmp(opType,"ReplicateS")==0 ||
4058         strcmp(opType,"ReplicateI")==0 ||
4059         strcmp(opType,"ReplicateL")==0 ||
4060         strcmp(opType,"ReplicateF")==0 ||
4061         strcmp(opType,"ReplicateD")==0 ||
4062         strcmp(opType,"AddReductionVI")==0 ||
4063         strcmp(opType,"AddReductionVL")==0 ||
4064         strcmp(opType,"AddReductionVF")==0 ||
4065         strcmp(opType,"AddReductionVD")==0 ||
4066         strcmp(opType,"MulReductionVI")==0 ||
4067         strcmp(opType,"MulReductionVL")==0 ||
4068         strcmp(opType,"MulReductionVF")==0 ||
4069         strcmp(opType,"MulReductionVD")==0 ||
4070         0 /* 0 to line up columns nicely */ )
4071       return 1;
4072   }
4073   return 0;
4074 }
4075 
4076 bool MatchRule::is_ideal_if() const {
4077   if( !_opType ) return false;
4078   return
4079     !strcmp(_opType,"If"            ) ||
4080     !strcmp(_opType,"CountedLoopEnd");
4081 }
4082 
4083 bool MatchRule::is_ideal_fastlock() const {
4084   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4085     return (strcmp(_rChild->_opType,"FastLock") == 0);
4086   }
4087   return false;
4088 }
4089 
4090 bool MatchRule::is_ideal_membar() const {
4091   if( !_opType ) return false;
4092   return
4093     !strcmp(_opType,"MemBarAcquire") ||
4094     !strcmp(_opType,"MemBarRelease") ||
4095     !strcmp(_opType,"MemBarAcquireLock") ||
4096     !strcmp(_opType,"MemBarReleaseLock") ||
4097     !strcmp(_opType,"LoadFence" ) ||
4098     !strcmp(_opType,"StoreFence") ||
4099     !strcmp(_opType,"MemBarVolatile") ||
4100     !strcmp(_opType,"MemBarCPUOrder") ||
4101     !strcmp(_opType,"MemBarStoreStore");
4102 }
4103 
4104 bool MatchRule::is_ideal_loadPC() const {
4105   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4106     return (strcmp(_rChild->_opType,"LoadPC") == 0);
4107   }
4108   return false;
4109 }
4110 
4111 bool MatchRule::is_ideal_box() const {
4112   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4113     return (strcmp(_rChild->_opType,"Box") == 0);
4114   }
4115   return false;
4116 }
4117 
4118 bool MatchRule::is_ideal_goto() const {
4119   bool   ideal_goto = false;
4120 
4121   if( _opType && (strcmp(_opType,"Goto") == 0) ) {
4122     ideal_goto = true;
4123   }
4124   return ideal_goto;
4125 }
4126 
4127 bool MatchRule::is_ideal_jump() const {
4128   if( _opType ) {
4129     if( !strcmp(_opType,"Jump") )
4130       return true;
4131   }
4132   return false;
4133 }
4134 
4135 bool MatchRule::is_ideal_bool() const {
4136   if( _opType ) {
4137     if( !strcmp(_opType,"Bool") )
4138       return true;
4139   }
4140   return false;
4141 }
4142 
4143 
4144 Form::DataType MatchRule::is_ideal_load() const {
4145   Form::DataType ideal_load = Form::none;
4146 
4147   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4148     const char *opType = _rChild->_opType;
4149     ideal_load = is_load_from_memory(opType);
4150   }
4151 
4152   return ideal_load;
4153 }
4154 
4155 bool MatchRule::is_vector() const {
4156   static const char *vector_list[] = {
4157     "AddVB","AddVS","AddVI","AddVL","AddVF","AddVD",
4158     "SubVB","SubVS","SubVI","SubVL","SubVF","SubVD",
4159     "MulVS","MulVI","MulVL","MulVF","MulVD",
4160     "CMoveVD",
4161     "DivVF","DivVD",
4162     "AbsVF","AbsVD",
4163     "NegVF","NegVD",
4164     "SqrtVD",
4165     "AndV" ,"XorV" ,"OrV",
4166     "AddReductionVI", "AddReductionVL",
4167     "AddReductionVF", "AddReductionVD",
4168     "MulReductionVI", "MulReductionVL",
4169     "MulReductionVF", "MulReductionVD",
4170     "LShiftCntV","RShiftCntV",
4171     "LShiftVB","LShiftVS","LShiftVI","LShiftVL",
4172     "RShiftVB","RShiftVS","RShiftVI","RShiftVL",
4173     "URShiftVB","URShiftVS","URShiftVI","URShiftVL",
4174     "ReplicateB","ReplicateS","ReplicateI","ReplicateL","ReplicateF","ReplicateD",
4175     "LoadVector","StoreVector",
4176     // Next are not supported currently.
4177     "PackB","PackS","PackI","PackL","PackF","PackD","Pack2L","Pack2D",
4178     "ExtractB","ExtractUB","ExtractC","ExtractS","ExtractI","ExtractL","ExtractF","ExtractD"
4179   };
4180   int cnt = sizeof(vector_list)/sizeof(char*);
4181   if (_rChild) {
4182     const char  *opType = _rChild->_opType;
4183     for (int i=0; i<cnt; i++)
4184       if (strcmp(opType,vector_list[i]) == 0)
4185         return true;
4186   }
4187   return false;
4188 }
4189 
4190 
4191 bool MatchRule::skip_antidep_check() const {
4192   // Some loads operate on what is effectively immutable memory so we
4193   // should skip the anti dep computations.  For some of these nodes
4194   // the rewritable field keeps the anti dep logic from triggering but
4195   // for certain kinds of LoadKlass it does not since they are
4196   // actually reading memory which could be rewritten by the runtime,
4197   // though never by generated code.  This disables it uniformly for
4198   // the nodes that behave like this: LoadKlass, LoadNKlass and
4199   // LoadRange.
4200   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4201     const char *opType = _rChild->_opType;
4202     if (strcmp("LoadKlass", opType) == 0 ||
4203         strcmp("LoadNKlass", opType) == 0 ||
4204         strcmp("LoadRange", opType) == 0) {
4205       return true;
4206     }
4207   }
4208 
4209   return false;
4210 }
4211 
4212 
4213 Form::DataType MatchRule::is_ideal_store() const {
4214   Form::DataType ideal_store = Form::none;
4215 
4216   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4217     const char *opType = _rChild->_opType;
4218     ideal_store = is_store_to_memory(opType);
4219   }
4220 
4221   return ideal_store;
4222 }
4223 
4224 
4225 void MatchRule::dump() {
4226   output(stderr);
4227 }
4228 
4229 // Write just one line.
4230 void MatchRule::output_short(FILE *fp) {
4231   fprintf(fp,"MatchRule: ( %s",_name);
4232   if (_lChild) _lChild->output(fp);
4233   if (_rChild) _rChild->output(fp);
4234   fprintf(fp," )");
4235 }
4236 
4237 void MatchRule::output(FILE *fp) {
4238   output_short(fp);
4239   fprintf(fp,"\n   nesting depth = %d\n", _depth);
4240   if (_result) fprintf(fp,"   Result Type = %s", _result);
4241   fprintf(fp,"\n");
4242 }
4243 
4244 //------------------------------Attribute--------------------------------------
4245 Attribute::Attribute(char *id, char* val, int type)
4246   : _ident(id), _val(val), _atype(type) {
4247 }
4248 Attribute::~Attribute() {
4249 }
4250 
4251 int Attribute::int_val(ArchDesc &ad) {
4252   // Make sure it is an integer constant:
4253   int result = 0;
4254   if (!_val || !ADLParser::is_int_token(_val, result)) {
4255     ad.syntax_err(0, "Attribute %s must have an integer value: %s",
4256                   _ident, _val ? _val : "");
4257   }
4258   return result;
4259 }
4260 
4261 void Attribute::dump() {
4262   output(stderr);
4263 } // Debug printer
4264 
4265 // Write to output files
4266 void Attribute::output(FILE *fp) {
4267   fprintf(fp,"Attribute: %s  %s\n", (_ident?_ident:""), (_val?_val:""));
4268 }
4269 
4270 //------------------------------FormatRule----------------------------------
4271 FormatRule::FormatRule(char *temp)
4272   : _temp(temp) {
4273 }
4274 FormatRule::~FormatRule() {
4275 }
4276 
4277 void FormatRule::dump() {
4278   output(stderr);
4279 }
4280 
4281 // Write to output files
4282 void FormatRule::output(FILE *fp) {
4283   fprintf(fp,"\nFormat Rule: \n%s", (_temp?_temp:""));
4284   fprintf(fp,"\n");
4285 }