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