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