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