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   const int buflen = 1024;
1503   char buf[buflen], *s=buf;
1504   Dict names(cmpstr,hashstr,Form::arena);       // Map Names to counts
1505 
1506   MatchNode *mnode =
1507     strcmp(_matrule->_opType, "Set") ? _matrule : _matrule->_rChild;
1508   mnode->count_instr_names(names);
1509 
1510   uint first = 1;
1511   // Start with the predicate supplied in the .ad file.
1512   if (_predicate) {
1513     if (first) first = 0;
1514     strcpy(s, "("); s += strlen(s);
1515     strncpy(s, _predicate->_pred, buflen - strlen(s) - 1);
1516     s += strlen(s);
1517     strcpy(s, ")"); s += strlen(s);
1518   }
1519   for( DictI i(&names); i.test(); ++i ) {
1520     uintptr_t cnt = (uintptr_t)i._value;
1521     if( cnt > 1 ) {             // Need a predicate at all?
1522       assert( cnt == 2, "Unimplemented" );
1523       // Handle many pairs
1524       if( first ) first=0;
1525       else {                    // All tests must pass, so use '&&'
1526         strcpy(s," && ");
1527         s += strlen(s);
1528       }
1529       // Add predicate to working buffer
1530       sprintf(s,"/*%s*/(",(char*)i._key);
1531       s += strlen(s);
1532       mnode->build_instr_pred(s,(char*)i._key,0);
1533       s += strlen(s);
1534       strcpy(s," == "); s += strlen(s);
1535       mnode->build_instr_pred(s,(char*)i._key,1);
1536       s += strlen(s);
1537       strcpy(s,")"); s += strlen(s);
1538     }
1539   }
1540   if( s == buf ) s = NULL;
1541   else {
1542     assert( strlen(buf) < sizeof(buf), "String buffer overflow" );
1543     s = strdup(buf);
1544   }
1545   return new Predicate(s);
1546 }
1547 
1548 //------------------------------EncodeForm-------------------------------------
1549 // Constructor
1550 EncodeForm::EncodeForm()
1551   : _encClass(cmpstr,hashstr, Form::arena) {
1552 }
1553 EncodeForm::~EncodeForm() {
1554 }
1555 
1556 // record a new register class
1557 EncClass *EncodeForm::add_EncClass(const char *className) {
1558   EncClass *encClass = new EncClass(className);
1559   _eclasses.addName(className);
1560   _encClass.Insert(className,encClass);
1561   return encClass;
1562 }
1563 
1564 // Lookup the function body for an encoding class
1565 EncClass  *EncodeForm::encClass(const char *className) {
1566   assert( className != NULL, "Must provide a defined encoding name");
1567 
1568   EncClass *encClass = (EncClass*)_encClass[className];
1569   return encClass;
1570 }
1571 
1572 // Lookup the function body for an encoding class
1573 const char *EncodeForm::encClassBody(const char *className) {
1574   if( className == NULL ) return NULL;
1575 
1576   EncClass *encClass = (EncClass*)_encClass[className];
1577   assert( encClass != NULL, "Encode Class is missing.");
1578   encClass->_code.reset();
1579   const char *code = (const char*)encClass->_code.iter();
1580   assert( code != NULL, "Found an empty encode class body.");
1581 
1582   return code;
1583 }
1584 
1585 // Lookup the function body for an encoding class
1586 const char *EncodeForm::encClassPrototype(const char *className) {
1587   assert( className != NULL, "Encode class name must be non NULL.");
1588 
1589   return className;
1590 }
1591 
1592 void EncodeForm::dump() {                  // Debug printer
1593   output(stderr);
1594 }
1595 
1596 void EncodeForm::output(FILE *fp) {          // Write info to output files
1597   const char *name;
1598   fprintf(fp,"\n");
1599   fprintf(fp,"-------------------- Dump EncodeForm --------------------\n");
1600   for (_eclasses.reset(); (name = _eclasses.iter()) != NULL;) {
1601     ((EncClass*)_encClass[name])->output(fp);
1602   }
1603   fprintf(fp,"-------------------- end  EncodeForm --------------------\n");
1604 }
1605 //------------------------------EncClass---------------------------------------
1606 EncClass::EncClass(const char *name)
1607   : _localNames(cmpstr,hashstr, Form::arena), _name(name) {
1608 }
1609 EncClass::~EncClass() {
1610 }
1611 
1612 // Add a parameter <type,name> pair
1613 void EncClass::add_parameter(const char *parameter_type, const char *parameter_name) {
1614   _parameter_type.addName( parameter_type );
1615   _parameter_name.addName( parameter_name );
1616 }
1617 
1618 // Verify operand types in parameter list
1619 bool EncClass::check_parameter_types(FormDict &globals) {
1620   // !!!!!
1621   return false;
1622 }
1623 
1624 // Add the decomposed "code" sections of an encoding's code-block
1625 void EncClass::add_code(const char *code) {
1626   _code.addName(code);
1627 }
1628 
1629 // Add the decomposed "replacement variables" of an encoding's code-block
1630 void EncClass::add_rep_var(char *replacement_var) {
1631   _code.addName(NameList::_signal);
1632   _rep_vars.addName(replacement_var);
1633 }
1634 
1635 // Lookup the function body for an encoding class
1636 int EncClass::rep_var_index(const char *rep_var) {
1637   uint        position = 0;
1638   const char *name     = NULL;
1639 
1640   _parameter_name.reset();
1641   while ( (name = _parameter_name.iter()) != NULL ) {
1642     if ( strcmp(rep_var,name) == 0 ) return position;
1643     ++position;
1644   }
1645 
1646   return -1;
1647 }
1648 
1649 // Check after parsing
1650 bool EncClass::verify() {
1651   // 1!!!!
1652   // Check that each replacement variable, '$name' in architecture description
1653   // is actually a local variable for this encode class, or a reserved name
1654   // "primary, secondary, tertiary"
1655   return true;
1656 }
1657 
1658 void EncClass::dump() {
1659   output(stderr);
1660 }
1661 
1662 // Write info to output files
1663 void EncClass::output(FILE *fp) {
1664   fprintf(fp,"EncClass: %s", (_name ? _name : ""));
1665 
1666   // Output the parameter list
1667   _parameter_type.reset();
1668   _parameter_name.reset();
1669   const char *type = _parameter_type.iter();
1670   const char *name = _parameter_name.iter();
1671   fprintf(fp, " ( ");
1672   for ( ; (type != NULL) && (name != NULL);
1673         (type = _parameter_type.iter()), (name = _parameter_name.iter()) ) {
1674     fprintf(fp, " %s %s,", type, name);
1675   }
1676   fprintf(fp, " ) ");
1677 
1678   // Output the code block
1679   _code.reset();
1680   _rep_vars.reset();
1681   const char *code;
1682   while ( (code = _code.iter()) != NULL ) {
1683     if ( _code.is_signal(code) ) {
1684       // A replacement variable
1685       const char *rep_var = _rep_vars.iter();
1686       fprintf(fp,"($%s)", rep_var);
1687     } else {
1688       // A section of code
1689       fprintf(fp,"%s", code);
1690     }
1691   }
1692 
1693 }
1694 
1695 //------------------------------Opcode-----------------------------------------
1696 Opcode::Opcode(char *primary, char *secondary, char *tertiary)
1697   : _primary(primary), _secondary(secondary), _tertiary(tertiary) {
1698 }
1699 
1700 Opcode::~Opcode() {
1701 }
1702 
1703 Opcode::opcode_type Opcode::as_opcode_type(const char *param) {
1704   if( strcmp(param,"primary") == 0 ) {
1705     return Opcode::PRIMARY;
1706   }
1707   else if( strcmp(param,"secondary") == 0 ) {
1708     return Opcode::SECONDARY;
1709   }
1710   else if( strcmp(param,"tertiary") == 0 ) {
1711     return Opcode::TERTIARY;
1712   }
1713   return Opcode::NOT_AN_OPCODE;
1714 }
1715 
1716 bool Opcode::print_opcode(FILE *fp, Opcode::opcode_type desired_opcode) {
1717   // Default values previously provided by MachNode::primary()...
1718   const char *description = NULL;
1719   const char *value       = NULL;
1720   // Check if user provided any opcode definitions
1721   if( this != NULL ) {
1722     // Update 'value' if user provided a definition in the instruction
1723     switch (desired_opcode) {
1724     case PRIMARY:
1725       description = "primary()";
1726       if( _primary   != NULL)  { value = _primary;     }
1727       break;
1728     case SECONDARY:
1729       description = "secondary()";
1730       if( _secondary != NULL ) { value = _secondary;   }
1731       break;
1732     case TERTIARY:
1733       description = "tertiary()";
1734       if( _tertiary  != NULL ) { value = _tertiary;    }
1735       break;
1736     default:
1737       assert( false, "ShouldNotReachHere();");
1738       break;
1739     }
1740   }
1741   if (value != NULL) {
1742     fprintf(fp, "(%s /*%s*/)", value, description);
1743   }
1744   return value != NULL;
1745 }
1746 
1747 void Opcode::dump() {
1748   output(stderr);
1749 }
1750 
1751 // Write info to output files
1752 void Opcode::output(FILE *fp) {
1753   if (_primary   != NULL) fprintf(fp,"Primary   opcode: %s\n", _primary);
1754   if (_secondary != NULL) fprintf(fp,"Secondary opcode: %s\n", _secondary);
1755   if (_tertiary  != NULL) fprintf(fp,"Tertiary  opcode: %s\n", _tertiary);
1756 }
1757 
1758 //------------------------------InsEncode--------------------------------------
1759 InsEncode::InsEncode() {
1760 }
1761 InsEncode::~InsEncode() {
1762 }
1763 
1764 // Add "encode class name" and its parameters
1765 NameAndList *InsEncode::add_encode(char *encoding) {
1766   assert( encoding != NULL, "Must provide name for encoding");
1767 
1768   // add_parameter(NameList::_signal);
1769   NameAndList *encode = new NameAndList(encoding);
1770   _encoding.addName((char*)encode);
1771 
1772   return encode;
1773 }
1774 
1775 // Access the list of encodings
1776 void InsEncode::reset() {
1777   _encoding.reset();
1778   // _parameter.reset();
1779 }
1780 const char* InsEncode::encode_class_iter() {
1781   NameAndList  *encode_class = (NameAndList*)_encoding.iter();
1782   return  ( encode_class != NULL ? encode_class->name() : NULL );
1783 }
1784 // Obtain parameter name from zero based index
1785 const char *InsEncode::rep_var_name(InstructForm &inst, uint param_no) {
1786   NameAndList *params = (NameAndList*)_encoding.current();
1787   assert( params != NULL, "Internal Error");
1788   const char *param = (*params)[param_no];
1789 
1790   // Remove '$' if parser placed it there.
1791   return ( param != NULL && *param == '$') ? (param+1) : param;
1792 }
1793 
1794 void InsEncode::dump() {
1795   output(stderr);
1796 }
1797 
1798 // Write info to output files
1799 void InsEncode::output(FILE *fp) {
1800   NameAndList *encoding  = NULL;
1801   const char  *parameter = NULL;
1802 
1803   fprintf(fp,"InsEncode: ");
1804   _encoding.reset();
1805 
1806   while ( (encoding = (NameAndList*)_encoding.iter()) != 0 ) {
1807     // Output the encoding being used
1808     fprintf(fp,"%s(", encoding->name() );
1809 
1810     // Output its parameter list, if any
1811     bool first_param = true;
1812     encoding->reset();
1813     while (  (parameter = encoding->iter()) != 0 ) {
1814       // Output the ',' between parameters
1815       if ( ! first_param )  fprintf(fp,", ");
1816       first_param = false;
1817       // Output the parameter
1818       fprintf(fp,"%s", parameter);
1819     } // done with parameters
1820     fprintf(fp,")  ");
1821   } // done with encodings
1822 
1823   fprintf(fp,"\n");
1824 }
1825 
1826 //------------------------------Effect-----------------------------------------
1827 static int effect_lookup(const char *name) {
1828   if (!strcmp(name, "USE")) return Component::USE;
1829   if (!strcmp(name, "DEF")) return Component::DEF;
1830   if (!strcmp(name, "USE_DEF")) return Component::USE_DEF;
1831   if (!strcmp(name, "KILL")) return Component::KILL;
1832   if (!strcmp(name, "USE_KILL")) return Component::USE_KILL;
1833   if (!strcmp(name, "TEMP")) return Component::TEMP;
1834   if (!strcmp(name, "TEMP_DEF")) return Component::TEMP_DEF;
1835   if (!strcmp(name, "INVALID")) return Component::INVALID;
1836   if (!strcmp(name, "CALL")) return Component::CALL;
1837   assert(false,"Invalid effect name specified\n");
1838   return Component::INVALID;
1839 }
1840 
1841 const char *Component::getUsedefName() {
1842   switch (_usedef) {
1843     case Component::INVALID:  return "INVALID";  break;
1844     case Component::USE:      return "USE";      break;
1845     case Component::USE_DEF:  return "USE_DEF";  break;
1846     case Component::USE_KILL: return "USE_KILL"; break;
1847     case Component::KILL:     return "KILL";     break;
1848     case Component::TEMP:     return "TEMP";     break;
1849     case Component::TEMP_DEF: return "TEMP_DEF"; break;
1850     case Component::DEF:      return "DEF";      break;
1851     case Component::CALL:     return "CALL";     break;
1852     default: assert(false, "unknown effect");
1853   }
1854   return "Undefined Use/Def info";
1855 }
1856 
1857 Effect::Effect(const char *name) : _name(name), _use_def(effect_lookup(name)) {
1858   _ftype = Form::EFF;
1859 }
1860 
1861 Effect::~Effect() {
1862 }
1863 
1864 // Dynamic type check
1865 Effect *Effect::is_effect() const {
1866   return (Effect*)this;
1867 }
1868 
1869 
1870 // True if this component is equal to the parameter.
1871 bool Effect::is(int use_def_kill_enum) const {
1872   return (_use_def == use_def_kill_enum ? true : false);
1873 }
1874 // True if this component is used/def'd/kill'd as the parameter suggests.
1875 bool Effect::isa(int use_def_kill_enum) const {
1876   return (_use_def & use_def_kill_enum) == use_def_kill_enum;
1877 }
1878 
1879 void Effect::dump() {
1880   output(stderr);
1881 }
1882 
1883 void Effect::output(FILE *fp) {          // Write info to output files
1884   fprintf(fp,"Effect: %s\n", (_name?_name:""));
1885 }
1886 
1887 //------------------------------ExpandRule-------------------------------------
1888 ExpandRule::ExpandRule() : _expand_instrs(),
1889                            _newopconst(cmpstr, hashstr, Form::arena) {
1890   _ftype = Form::EXP;
1891 }
1892 
1893 ExpandRule::~ExpandRule() {                  // Destructor
1894 }
1895 
1896 void ExpandRule::add_instruction(NameAndList *instruction_name_and_operand_list) {
1897   _expand_instrs.addName((char*)instruction_name_and_operand_list);
1898 }
1899 
1900 void ExpandRule::reset_instructions() {
1901   _expand_instrs.reset();
1902 }
1903 
1904 NameAndList* ExpandRule::iter_instructions() {
1905   return (NameAndList*)_expand_instrs.iter();
1906 }
1907 
1908 
1909 void ExpandRule::dump() {
1910   output(stderr);
1911 }
1912 
1913 void ExpandRule::output(FILE *fp) {         // Write info to output files
1914   NameAndList *expand_instr = NULL;
1915   const char *opid = NULL;
1916 
1917   fprintf(fp,"\nExpand Rule:\n");
1918 
1919   // Iterate over the instructions 'node' expands into
1920   for(reset_instructions(); (expand_instr = iter_instructions()) != NULL; ) {
1921     fprintf(fp,"%s(", expand_instr->name());
1922 
1923     // iterate over the operand list
1924     for( expand_instr->reset(); (opid = expand_instr->iter()) != NULL; ) {
1925       fprintf(fp,"%s ", opid);
1926     }
1927     fprintf(fp,");\n");
1928   }
1929 }
1930 
1931 //------------------------------RewriteRule------------------------------------
1932 RewriteRule::RewriteRule(char* params, char* block)
1933   : _tempParams(params), _tempBlock(block) { };  // Constructor
1934 RewriteRule::~RewriteRule() {                 // Destructor
1935 }
1936 
1937 void RewriteRule::dump() {
1938   output(stderr);
1939 }
1940 
1941 void RewriteRule::output(FILE *fp) {         // Write info to output files
1942   fprintf(fp,"\nRewrite Rule:\n%s\n%s\n",
1943           (_tempParams?_tempParams:""),
1944           (_tempBlock?_tempBlock:""));
1945 }
1946 
1947 
1948 //==============================MachNodes======================================
1949 //------------------------------MachNodeForm-----------------------------------
1950 MachNodeForm::MachNodeForm(char *id)
1951   : _ident(id) {
1952 }
1953 
1954 MachNodeForm::~MachNodeForm() {
1955 }
1956 
1957 MachNodeForm *MachNodeForm::is_machnode() const {
1958   return (MachNodeForm*)this;
1959 }
1960 
1961 //==============================Operand Classes================================
1962 //------------------------------OpClassForm------------------------------------
1963 OpClassForm::OpClassForm(const char* id) : _ident(id) {
1964   _ftype = Form::OPCLASS;
1965 }
1966 
1967 OpClassForm::~OpClassForm() {
1968 }
1969 
1970 bool OpClassForm::ideal_only() const { return 0; }
1971 
1972 OpClassForm *OpClassForm::is_opclass() const {
1973   return (OpClassForm*)this;
1974 }
1975 
1976 Form::InterfaceType OpClassForm::interface_type(FormDict &globals) const {
1977   if( _oplst.count() == 0 ) return Form::no_interface;
1978 
1979   // Check that my operands have the same interface type
1980   Form::InterfaceType  interface;
1981   bool  first = true;
1982   NameList &op_list = (NameList &)_oplst;
1983   op_list.reset();
1984   const char *op_name;
1985   while( (op_name = op_list.iter()) != NULL ) {
1986     const Form  *form    = globals[op_name];
1987     OperandForm *operand = form->is_operand();
1988     assert( operand, "Entry in operand class that is not an operand");
1989     if( first ) {
1990       first     = false;
1991       interface = operand->interface_type(globals);
1992     } else {
1993       interface = (interface == operand->interface_type(globals) ? interface : Form::no_interface);
1994     }
1995   }
1996   return interface;
1997 }
1998 
1999 bool OpClassForm::stack_slots_only(FormDict &globals) const {
2000   if( _oplst.count() == 0 ) return false;  // how?
2001 
2002   NameList &op_list = (NameList &)_oplst;
2003   op_list.reset();
2004   const char *op_name;
2005   while( (op_name = op_list.iter()) != NULL ) {
2006     const Form  *form    = globals[op_name];
2007     OperandForm *operand = form->is_operand();
2008     assert( operand, "Entry in operand class that is not an operand");
2009     if( !operand->stack_slots_only(globals) )  return false;
2010   }
2011   return true;
2012 }
2013 
2014 
2015 void OpClassForm::dump() {
2016   output(stderr);
2017 }
2018 
2019 void OpClassForm::output(FILE *fp) {
2020   const char *name;
2021   fprintf(fp,"\nOperand Class: %s\n", (_ident?_ident:""));
2022   fprintf(fp,"\nCount = %d\n", _oplst.count());
2023   for(_oplst.reset(); (name = _oplst.iter()) != NULL;) {
2024     fprintf(fp,"%s, ",name);
2025   }
2026   fprintf(fp,"\n");
2027 }
2028 
2029 
2030 //==============================Operands=======================================
2031 //------------------------------OperandForm------------------------------------
2032 OperandForm::OperandForm(const char* id)
2033   : OpClassForm(id), _ideal_only(false),
2034     _localNames(cmpstr, hashstr, Form::arena) {
2035       _ftype = Form::OPER;
2036 
2037       _matrule   = NULL;
2038       _interface = NULL;
2039       _attribs   = NULL;
2040       _predicate = NULL;
2041       _constraint= NULL;
2042       _construct = NULL;
2043       _format    = NULL;
2044 }
2045 OperandForm::OperandForm(const char* id, bool ideal_only)
2046   : OpClassForm(id), _ideal_only(ideal_only),
2047     _localNames(cmpstr, hashstr, Form::arena) {
2048       _ftype = Form::OPER;
2049 
2050       _matrule   = NULL;
2051       _interface = NULL;
2052       _attribs   = NULL;
2053       _predicate = NULL;
2054       _constraint= NULL;
2055       _construct = NULL;
2056       _format    = NULL;
2057 }
2058 OperandForm::~OperandForm() {
2059 }
2060 
2061 
2062 OperandForm *OperandForm::is_operand() const {
2063   return (OperandForm*)this;
2064 }
2065 
2066 bool OperandForm::ideal_only() const {
2067   return _ideal_only;
2068 }
2069 
2070 Form::InterfaceType OperandForm::interface_type(FormDict &globals) const {
2071   if( _interface == NULL )  return Form::no_interface;
2072 
2073   return _interface->interface_type(globals);
2074 }
2075 
2076 
2077 bool OperandForm::stack_slots_only(FormDict &globals) const {
2078   if( _constraint == NULL )  return false;
2079   return _constraint->stack_slots_only();
2080 }
2081 
2082 
2083 // Access op_cost attribute or return NULL.
2084 const char* OperandForm::cost() {
2085   for (Attribute* cur = _attribs; cur != NULL; cur = (Attribute*)cur->_next) {
2086     if( strcmp(cur->_ident,AttributeForm::_op_cost) == 0 ) {
2087       return cur->_val;
2088     }
2089   }
2090   return NULL;
2091 }
2092 
2093 // Return the number of leaves below this complex operand
2094 uint OperandForm::num_leaves() const {
2095   if ( ! _matrule) return 0;
2096 
2097   int num_leaves = _matrule->_numleaves;
2098   return num_leaves;
2099 }
2100 
2101 // Return the number of constants contained within this complex operand
2102 uint OperandForm::num_consts(FormDict &globals) const {
2103   if ( ! _matrule) return 0;
2104 
2105   // This is a recursive invocation on all operands in the matchrule
2106   return _matrule->num_consts(globals);
2107 }
2108 
2109 // Return the number of constants in match rule with specified type
2110 uint OperandForm::num_consts(FormDict &globals, Form::DataType type) const {
2111   if ( ! _matrule) return 0;
2112 
2113   // This is a recursive invocation on all operands in the matchrule
2114   return _matrule->num_consts(globals, type);
2115 }
2116 
2117 // Return the number of pointer constants contained within this complex operand
2118 uint OperandForm::num_const_ptrs(FormDict &globals) const {
2119   if ( ! _matrule) return 0;
2120 
2121   // This is a recursive invocation on all operands in the matchrule
2122   return _matrule->num_const_ptrs(globals);
2123 }
2124 
2125 uint OperandForm::num_edges(FormDict &globals) const {
2126   uint edges  = 0;
2127   uint leaves = num_leaves();
2128   uint consts = num_consts(globals);
2129 
2130   // If we are matching a constant directly, there are no leaves.
2131   edges = ( leaves > consts ) ? leaves - consts : 0;
2132 
2133   // !!!!!
2134   // Special case operands that do not have a corresponding ideal node.
2135   if( (edges == 0) && (consts == 0) ) {
2136     if( constrained_reg_class() != NULL ) {
2137       edges = 1;
2138     } else {
2139       if( _matrule
2140           && (_matrule->_lChild == NULL) && (_matrule->_rChild == NULL) ) {
2141         const Form *form = globals[_matrule->_opType];
2142         OperandForm *oper = form ? form->is_operand() : NULL;
2143         if( oper ) {
2144           return oper->num_edges(globals);
2145         }
2146       }
2147     }
2148   }
2149 
2150   return edges;
2151 }
2152 
2153 
2154 // Check if this operand is usable for cisc-spilling
2155 bool  OperandForm::is_cisc_reg(FormDict &globals) const {
2156   const char *ideal = ideal_type(globals);
2157   bool is_cisc_reg = (ideal && (ideal_to_Reg_type(ideal) != none));
2158   return is_cisc_reg;
2159 }
2160 
2161 bool  OpClassForm::is_cisc_mem(FormDict &globals) const {
2162   Form::InterfaceType my_interface = interface_type(globals);
2163   return (my_interface == memory_interface);
2164 }
2165 
2166 
2167 // node matches ideal 'Bool'
2168 bool OperandForm::is_ideal_bool() const {
2169   if( _matrule == NULL ) return false;
2170 
2171   return _matrule->is_ideal_bool();
2172 }
2173 
2174 // Require user's name for an sRegX to be stackSlotX
2175 Form::DataType OperandForm::is_user_name_for_sReg() const {
2176   DataType data_type = none;
2177   if( _ident != NULL ) {
2178     if(      strcmp(_ident,"stackSlotI") == 0 ) data_type = Form::idealI;
2179     else if( strcmp(_ident,"stackSlotP") == 0 ) data_type = Form::idealP;
2180     else if( strcmp(_ident,"stackSlotD") == 0 ) data_type = Form::idealD;
2181     else if( strcmp(_ident,"stackSlotF") == 0 ) data_type = Form::idealF;
2182     else if( strcmp(_ident,"stackSlotL") == 0 ) data_type = Form::idealL;
2183   }
2184   assert((data_type == none) || (_matrule == NULL), "No match-rule for stackSlotX");
2185 
2186   return data_type;
2187 }
2188 
2189 
2190 // Return ideal type, if there is a single ideal type for this operand
2191 const char *OperandForm::ideal_type(FormDict &globals, RegisterForm *registers) const {
2192   const char *type = NULL;
2193   if (ideal_only()) type = _ident;
2194   else if( _matrule == NULL ) {
2195     // Check for condition code register
2196     const char *rc_name = constrained_reg_class();
2197     // !!!!!
2198     if (rc_name == NULL) return NULL;
2199     // !!!!! !!!!!
2200     // Check constraints on result's register class
2201     if( registers ) {
2202       RegClass *reg_class  = registers->getRegClass(rc_name);
2203       assert( reg_class != NULL, "Register class is not defined");
2204 
2205       // Check for ideal type of entries in register class, all are the same type
2206       reg_class->reset();
2207       RegDef *reg_def = reg_class->RegDef_iter();
2208       assert( reg_def != NULL, "No entries in register class");
2209       assert( reg_def->_idealtype != NULL, "Did not define ideal type for register");
2210       // Return substring that names the register's ideal type
2211       type = reg_def->_idealtype + 3;
2212       assert( *(reg_def->_idealtype + 0) == 'O', "Expect Op_ prefix");
2213       assert( *(reg_def->_idealtype + 1) == 'p', "Expect Op_ prefix");
2214       assert( *(reg_def->_idealtype + 2) == '_', "Expect Op_ prefix");
2215     }
2216   }
2217   else if( _matrule->_lChild == NULL && _matrule->_rChild == NULL ) {
2218     // This operand matches a single type, at the top level.
2219     // Check for ideal type
2220     type = _matrule->_opType;
2221     if( strcmp(type,"Bool") == 0 )
2222       return "Bool";
2223     // transitive lookup
2224     const Form *frm = globals[type];
2225     OperandForm *op = frm->is_operand();
2226     type = op->ideal_type(globals, registers);
2227   }
2228   return type;
2229 }
2230 
2231 
2232 // If there is a single ideal type for this interface field, return it.
2233 const char *OperandForm::interface_ideal_type(FormDict &globals,
2234                                               const char *field) const {
2235   const char  *ideal_type = NULL;
2236   const char  *value      = NULL;
2237 
2238   // Check if "field" is valid for this operand's interface
2239   if ( ! is_interface_field(field, value) )   return ideal_type;
2240 
2241   // !!!!! !!!!! !!!!!
2242   // If a valid field has a constant value, identify "ConI" or "ConP" or ...
2243 
2244   // Else, lookup type of field's replacement variable
2245 
2246   return ideal_type;
2247 }
2248 
2249 
2250 RegClass* OperandForm::get_RegClass() const {
2251   if (_interface && !_interface->is_RegInterface()) return NULL;
2252   return globalAD->get_registers()->getRegClass(constrained_reg_class());
2253 }
2254 
2255 
2256 bool OperandForm::is_bound_register() const {
2257   RegClass* reg_class = get_RegClass();
2258   if (reg_class == NULL) {
2259     return false;
2260   }
2261 
2262   const char* name = ideal_type(globalAD->globalNames());
2263   if (name == NULL) {
2264     return false;
2265   }
2266 
2267   uint size = 0;
2268   if (strcmp(name, "RegFlags") == 0) size = 1;
2269   if (strcmp(name, "RegI") == 0) size = 1;
2270   if (strcmp(name, "RegF") == 0) size = 1;
2271   if (strcmp(name, "RegD") == 0) size = 2;
2272   if (strcmp(name, "RegL") == 0) size = 2;
2273   if (strcmp(name, "RegN") == 0) size = 1;
2274   if (strcmp(name, "RegP") == 0) size = globalAD->get_preproc_def("_LP64") ? 2 : 1;
2275   if (size == 0) {
2276     return false;
2277   }
2278   return size == reg_class->size();
2279 }
2280 
2281 
2282 // Check if this is a valid field for this operand,
2283 // Return 'true' if valid, and set the value to the string the user provided.
2284 bool  OperandForm::is_interface_field(const char *field,
2285                                       const char * &value) const {
2286   return false;
2287 }
2288 
2289 
2290 // Return register class name if a constraint specifies the register class.
2291 const char *OperandForm::constrained_reg_class() const {
2292   const char *reg_class  = NULL;
2293   if ( _constraint ) {
2294     // !!!!!
2295     Constraint *constraint = _constraint;
2296     if ( strcmp(_constraint->_func,"ALLOC_IN_RC") == 0 ) {
2297       reg_class = _constraint->_arg;
2298     }
2299   }
2300 
2301   return reg_class;
2302 }
2303 
2304 
2305 // Return the register class associated with 'leaf'.
2306 const char *OperandForm::in_reg_class(uint leaf, FormDict &globals) {
2307   const char *reg_class = NULL; // "RegMask::Empty";
2308 
2309   if((_matrule == NULL) || (_matrule->is_chain_rule(globals))) {
2310     reg_class = constrained_reg_class();
2311     return reg_class;
2312   }
2313   const char *result   = NULL;
2314   const char *name     = NULL;
2315   const char *type     = NULL;
2316   // iterate through all base operands
2317   // until we reach the register that corresponds to "leaf"
2318   // This function is not looking for an ideal type.  It needs the first
2319   // level user type associated with the leaf.
2320   for(uint idx = 0;_matrule->base_operand(idx,globals,result,name,type);++idx) {
2321     const Form *form = (_localNames[name] ? _localNames[name] : globals[result]);
2322     OperandForm *oper = form ? form->is_operand() : NULL;
2323     if( oper ) {
2324       reg_class = oper->constrained_reg_class();
2325       if( reg_class ) {
2326         reg_class = reg_class;
2327       } else {
2328         // ShouldNotReachHere();
2329       }
2330     } else {
2331       // ShouldNotReachHere();
2332     }
2333 
2334     // Increment our target leaf position if current leaf is not a candidate.
2335     if( reg_class == NULL)    ++leaf;
2336     // Exit the loop with the value of reg_class when at the correct index
2337     if( idx == leaf )         break;
2338     // May iterate through all base operands if reg_class for 'leaf' is NULL
2339   }
2340   return reg_class;
2341 }
2342 
2343 
2344 // Recursive call to construct list of top-level operands.
2345 // Implementation does not modify state of internal structures
2346 void OperandForm::build_components() {
2347   if (_matrule)  _matrule->append_components(_localNames, _components);
2348 
2349   // Add parameters that "do not appear in match rule".
2350   const char *name;
2351   for (_parameters.reset(); (name = _parameters.iter()) != NULL;) {
2352     OperandForm *opForm = (OperandForm*)_localNames[name];
2353 
2354     if ( _components.operand_position(name) == -1 ) {
2355       _components.insert(name, opForm->_ident, Component::INVALID, false);
2356     }
2357   }
2358 
2359   return;
2360 }
2361 
2362 int OperandForm::operand_position(const char *name, int usedef) {
2363   return _components.operand_position(name, usedef, this);
2364 }
2365 
2366 
2367 // Return zero-based position in component list, only counting constants;
2368 // Return -1 if not in list.
2369 int OperandForm::constant_position(FormDict &globals, const Component *last) {
2370   // Iterate through components and count constants preceding 'constant'
2371   int position = 0;
2372   Component *comp;
2373   _components.reset();
2374   while( (comp = _components.iter()) != NULL  && (comp != last) ) {
2375     // Special case for operands that take a single user-defined operand
2376     // Skip the initial definition in the component list.
2377     if( strcmp(comp->_name,this->_ident) == 0 ) continue;
2378 
2379     const char *type = comp->_type;
2380     // Lookup operand form for replacement variable's type
2381     const Form *form = globals[type];
2382     assert( form != NULL, "Component's type not found");
2383     OperandForm *oper = form ? form->is_operand() : NULL;
2384     if( oper ) {
2385       if( oper->_matrule->is_base_constant(globals) != Form::none ) {
2386         ++position;
2387       }
2388     }
2389   }
2390 
2391   // Check for being passed a component that was not in the list
2392   if( comp != last )  position = -1;
2393 
2394   return position;
2395 }
2396 // Provide position of constant by "name"
2397 int OperandForm::constant_position(FormDict &globals, const char *name) {
2398   const Component *comp = _components.search(name);
2399   int idx = constant_position( globals, comp );
2400 
2401   return idx;
2402 }
2403 
2404 
2405 // Return zero-based position in component list, only counting constants;
2406 // Return -1 if not in list.
2407 int OperandForm::register_position(FormDict &globals, const char *reg_name) {
2408   // Iterate through components and count registers preceding 'last'
2409   uint  position = 0;
2410   Component *comp;
2411   _components.reset();
2412   while( (comp = _components.iter()) != NULL
2413          && (strcmp(comp->_name,reg_name) != 0) ) {
2414     // Special case for operands that take a single user-defined operand
2415     // Skip the initial definition in the component list.
2416     if( strcmp(comp->_name,this->_ident) == 0 ) continue;
2417 
2418     const char *type = comp->_type;
2419     // Lookup operand form for component's type
2420     const Form *form = globals[type];
2421     assert( form != NULL, "Component's type not found");
2422     OperandForm *oper = form ? form->is_operand() : NULL;
2423     if( oper ) {
2424       if( oper->_matrule->is_base_register(globals) ) {
2425         ++position;
2426       }
2427     }
2428   }
2429 
2430   return position;
2431 }
2432 
2433 
2434 const char *OperandForm::reduce_result()  const {
2435   return _ident;
2436 }
2437 // Return the name of the operand on the right hand side of the binary match
2438 // Return NULL if there is no right hand side
2439 const char *OperandForm::reduce_right(FormDict &globals)  const {
2440   return  ( _matrule ? _matrule->reduce_right(globals) : NULL );
2441 }
2442 
2443 // Similar for left
2444 const char *OperandForm::reduce_left(FormDict &globals)   const {
2445   return  ( _matrule ? _matrule->reduce_left(globals) : NULL );
2446 }
2447 
2448 
2449 // --------------------------- FILE *output_routines
2450 //
2451 // Output code for disp_is_oop, if true.
2452 void OperandForm::disp_is_oop(FILE *fp, FormDict &globals) {
2453   //  Check it is a memory interface with a non-user-constant disp field
2454   if ( this->_interface == NULL ) return;
2455   MemInterface *mem_interface = this->_interface->is_MemInterface();
2456   if ( mem_interface == NULL )    return;
2457   const char   *disp  = mem_interface->_disp;
2458   if ( *disp != '$' )             return;
2459 
2460   // Lookup replacement variable in operand's component list
2461   const char   *rep_var = disp + 1;
2462   const Component *comp = this->_components.search(rep_var);
2463   assert( comp != NULL, "Replacement variable not found in components");
2464   // Lookup operand form for replacement variable's type
2465   const char      *type = comp->_type;
2466   Form            *form = (Form*)globals[type];
2467   assert( form != NULL, "Replacement variable's type not found");
2468   OperandForm     *op   = form->is_operand();
2469   assert( op, "Memory Interface 'disp' can only emit an operand form");
2470   // Check if this is a ConP, which may require relocation
2471   if ( op->is_base_constant(globals) == Form::idealP ) {
2472     // Find the constant's index:  _c0, _c1, _c2, ... , _cN
2473     uint idx  = op->constant_position( globals, rep_var);
2474     fprintf(fp,"  virtual relocInfo::relocType disp_reloc() const {");
2475     fprintf(fp,  "  return _c%d->reloc();", idx);
2476     fprintf(fp, " }\n");
2477   }
2478 }
2479 
2480 // Generate code for internal and external format methods
2481 //
2482 // internal access to reg# node->_idx
2483 // access to subsumed constant _c0, _c1,
2484 void  OperandForm::int_format(FILE *fp, FormDict &globals, uint index) {
2485   Form::DataType dtype;
2486   if (_matrule && (_matrule->is_base_register(globals) ||
2487                    strcmp(ideal_type(globalAD->globalNames()), "RegFlags") == 0)) {
2488     // !!!!! !!!!!
2489     fprintf(fp,"  { char reg_str[128];\n");
2490     fprintf(fp,"    ra->dump_register(node,reg_str);\n");
2491     fprintf(fp,"    st->print(\"%cs\",reg_str);\n",'%');
2492     fprintf(fp,"  }\n");
2493   } else if (_matrule && (dtype = _matrule->is_base_constant(globals)) != Form::none) {
2494     format_constant( fp, index, dtype );
2495   } else if (ideal_to_sReg_type(_ident) != Form::none) {
2496     // Special format for Stack Slot Register
2497     fprintf(fp,"  { char reg_str[128];\n");
2498     fprintf(fp,"    ra->dump_register(node,reg_str);\n");
2499     fprintf(fp,"    st->print(\"%cs\",reg_str);\n",'%');
2500     fprintf(fp,"  }\n");
2501   } else {
2502     fprintf(fp,"  st->print(\"No format defined for %s\n\");\n", _ident);
2503     fflush(fp);
2504     fprintf(stderr,"No format defined for %s\n", _ident);
2505     dump();
2506     assert( false,"Internal error:\n  output_internal_operand() attempting to output other than a Register or Constant");
2507   }
2508 }
2509 
2510 // Similar to "int_format" but for cases where data is external to operand
2511 // external access to reg# node->in(idx)->_idx,
2512 void  OperandForm::ext_format(FILE *fp, FormDict &globals, uint index) {
2513   Form::DataType dtype;
2514   if (_matrule && (_matrule->is_base_register(globals) ||
2515                    strcmp(ideal_type(globalAD->globalNames()), "RegFlags") == 0)) {
2516     fprintf(fp,"  { char reg_str[128];\n");
2517     fprintf(fp,"    ra->dump_register(node->in(idx");
2518     if ( index != 0 ) fprintf(fp,              "+%d",index);
2519     fprintf(fp,                                      "),reg_str);\n");
2520     fprintf(fp,"    st->print(\"%cs\",reg_str);\n",'%');
2521     fprintf(fp,"  }\n");
2522   } else if (_matrule && (dtype = _matrule->is_base_constant(globals)) != Form::none) {
2523     format_constant( fp, index, dtype );
2524   } else if (ideal_to_sReg_type(_ident) != Form::none) {
2525     // Special format for Stack Slot Register
2526     fprintf(fp,"  { char reg_str[128];\n");
2527     fprintf(fp,"    ra->dump_register(node->in(idx");
2528     if ( index != 0 ) fprintf(fp,                  "+%d",index);
2529     fprintf(fp,                                       "),reg_str);\n");
2530     fprintf(fp,"    st->print(\"%cs\",reg_str);\n",'%');
2531     fprintf(fp,"  }\n");
2532   } else {
2533     fprintf(fp,"  st->print(\"No format defined for %s\n\");\n", _ident);
2534     assert( false,"Internal error:\n  output_external_operand() attempting to output other than a Register or Constant");
2535   }
2536 }
2537 
2538 void OperandForm::format_constant(FILE *fp, uint const_index, uint const_type) {
2539   switch(const_type) {
2540   case Form::idealI: fprintf(fp,"  st->print(\"#%%d\", _c%d);\n", const_index); break;
2541   case Form::idealP: fprintf(fp,"  if (_c%d) _c%d->dump_on(st);\n", const_index, const_index); break;
2542   case Form::idealNKlass:
2543   case Form::idealN: fprintf(fp,"  if (_c%d) _c%d->dump_on(st);\n", const_index, const_index); break;
2544   case Form::idealL: fprintf(fp,"  st->print(\"#\" INT64_FORMAT, (int64_t)_c%d);\n", const_index); break;
2545   case Form::idealF: fprintf(fp,"  st->print(\"#%%f\", _c%d);\n", const_index); break;
2546   case Form::idealD: fprintf(fp,"  st->print(\"#%%f\", _c%d);\n", const_index); break;
2547   default:
2548     assert( false, "ShouldNotReachHere()");
2549   }
2550 }
2551 
2552 // Return the operand form corresponding to the given index, else NULL.
2553 OperandForm *OperandForm::constant_operand(FormDict &globals,
2554                                            uint      index) {
2555   // !!!!!
2556   // Check behavior on complex operands
2557   uint n_consts = num_consts(globals);
2558   if( n_consts > 0 ) {
2559     uint i = 0;
2560     const char *type;
2561     Component  *comp;
2562     _components.reset();
2563     if ((comp = _components.iter()) == NULL) {
2564       assert(n_consts == 1, "Bad component list detected.\n");
2565       // Current operand is THE operand
2566       if ( index == 0 ) {
2567         return this;
2568       }
2569     } // end if NULL
2570     else {
2571       // Skip the first component, it can not be a DEF of a constant
2572       do {
2573         type = comp->base_type(globals);
2574         // Check that "type" is a 'ConI', 'ConP', ...
2575         if ( ideal_to_const_type(type) != Form::none ) {
2576           // When at correct component, get corresponding Operand
2577           if ( index == 0 ) {
2578             return globals[comp->_type]->is_operand();
2579           }
2580           // Decrement number of constants to go
2581           --index;
2582         }
2583       } while((comp = _components.iter()) != NULL);
2584     }
2585   }
2586 
2587   // Did not find a constant for this index.
2588   return NULL;
2589 }
2590 
2591 // If this operand has a single ideal type, return its type
2592 Form::DataType OperandForm::simple_type(FormDict &globals) const {
2593   const char *type_name = ideal_type(globals);
2594   Form::DataType type   = type_name ? ideal_to_const_type( type_name )
2595                                     : Form::none;
2596   return type;
2597 }
2598 
2599 Form::DataType OperandForm::is_base_constant(FormDict &globals) const {
2600   if ( _matrule == NULL )    return Form::none;
2601 
2602   return _matrule->is_base_constant(globals);
2603 }
2604 
2605 // "true" if this operand is a simple type that is swallowed
2606 bool  OperandForm::swallowed(FormDict &globals) const {
2607   Form::DataType type   = simple_type(globals);
2608   if( type != Form::none ) {
2609     return true;
2610   }
2611 
2612   return false;
2613 }
2614 
2615 // Output code to access the value of the index'th constant
2616 void OperandForm::access_constant(FILE *fp, FormDict &globals,
2617                                   uint const_index) {
2618   OperandForm *oper = constant_operand(globals, const_index);
2619   assert( oper, "Index exceeds number of constants in operand");
2620   Form::DataType dtype = oper->is_base_constant(globals);
2621 
2622   switch(dtype) {
2623   case idealI: fprintf(fp,"_c%d",           const_index); break;
2624   case idealP: fprintf(fp,"_c%d->get_con()",const_index); break;
2625   case idealL: fprintf(fp,"_c%d",           const_index); break;
2626   case idealF: fprintf(fp,"_c%d",           const_index); break;
2627   case idealD: fprintf(fp,"_c%d",           const_index); break;
2628   default:
2629     assert( false, "ShouldNotReachHere()");
2630   }
2631 }
2632 
2633 
2634 void OperandForm::dump() {
2635   output(stderr);
2636 }
2637 
2638 void OperandForm::output(FILE *fp) {
2639   fprintf(fp,"\nOperand: %s\n", (_ident?_ident:""));
2640   if (_matrule)    _matrule->dump();
2641   if (_interface)  _interface->dump();
2642   if (_attribs)    _attribs->dump();
2643   if (_predicate)  _predicate->dump();
2644   if (_constraint) _constraint->dump();
2645   if (_construct)  _construct->dump();
2646   if (_format)     _format->dump();
2647 }
2648 
2649 //------------------------------Constraint-------------------------------------
2650 Constraint::Constraint(const char *func, const char *arg)
2651   : _func(func), _arg(arg) {
2652 }
2653 Constraint::~Constraint() { /* not owner of char* */
2654 }
2655 
2656 bool Constraint::stack_slots_only() const {
2657   return strcmp(_func, "ALLOC_IN_RC") == 0
2658       && strcmp(_arg,  "stack_slots") == 0;
2659 }
2660 
2661 void Constraint::dump() {
2662   output(stderr);
2663 }
2664 
2665 void Constraint::output(FILE *fp) {           // Write info to output files
2666   assert((_func != NULL && _arg != NULL),"missing constraint function or arg");
2667   fprintf(fp,"Constraint: %s ( %s )\n", _func, _arg);
2668 }
2669 
2670 //------------------------------Predicate--------------------------------------
2671 Predicate::Predicate(char *pr)
2672   : _pred(pr) {
2673 }
2674 Predicate::~Predicate() {
2675 }
2676 
2677 void Predicate::dump() {
2678   output(stderr);
2679 }
2680 
2681 void Predicate::output(FILE *fp) {
2682   fprintf(fp,"Predicate");  // Write to output files
2683 }
2684 //------------------------------Interface--------------------------------------
2685 Interface::Interface(const char *name) : _name(name) {
2686 }
2687 Interface::~Interface() {
2688 }
2689 
2690 Form::InterfaceType Interface::interface_type(FormDict &globals) const {
2691   Interface *thsi = (Interface*)this;
2692   if ( thsi->is_RegInterface()   ) return Form::register_interface;
2693   if ( thsi->is_MemInterface()   ) return Form::memory_interface;
2694   if ( thsi->is_ConstInterface() ) return Form::constant_interface;
2695   if ( thsi->is_CondInterface()  ) return Form::conditional_interface;
2696 
2697   return Form::no_interface;
2698 }
2699 
2700 RegInterface   *Interface::is_RegInterface() {
2701   if ( strcmp(_name,"REG_INTER") != 0 )
2702     return NULL;
2703   return (RegInterface*)this;
2704 }
2705 MemInterface   *Interface::is_MemInterface() {
2706   if ( strcmp(_name,"MEMORY_INTER") != 0 )  return NULL;
2707   return (MemInterface*)this;
2708 }
2709 ConstInterface *Interface::is_ConstInterface() {
2710   if ( strcmp(_name,"CONST_INTER") != 0 )  return NULL;
2711   return (ConstInterface*)this;
2712 }
2713 CondInterface  *Interface::is_CondInterface() {
2714   if ( strcmp(_name,"COND_INTER") != 0 )  return NULL;
2715   return (CondInterface*)this;
2716 }
2717 
2718 
2719 void Interface::dump() {
2720   output(stderr);
2721 }
2722 
2723 // Write info to output files
2724 void Interface::output(FILE *fp) {
2725   fprintf(fp,"Interface: %s\n", (_name ? _name : "") );
2726 }
2727 
2728 //------------------------------RegInterface-----------------------------------
2729 RegInterface::RegInterface() : Interface("REG_INTER") {
2730 }
2731 RegInterface::~RegInterface() {
2732 }
2733 
2734 void RegInterface::dump() {
2735   output(stderr);
2736 }
2737 
2738 // Write info to output files
2739 void RegInterface::output(FILE *fp) {
2740   Interface::output(fp);
2741 }
2742 
2743 //------------------------------ConstInterface---------------------------------
2744 ConstInterface::ConstInterface() : Interface("CONST_INTER") {
2745 }
2746 ConstInterface::~ConstInterface() {
2747 }
2748 
2749 void ConstInterface::dump() {
2750   output(stderr);
2751 }
2752 
2753 // Write info to output files
2754 void ConstInterface::output(FILE *fp) {
2755   Interface::output(fp);
2756 }
2757 
2758 //------------------------------MemInterface-----------------------------------
2759 MemInterface::MemInterface(char *base, char *index, char *scale, char *disp)
2760   : Interface("MEMORY_INTER"), _base(base), _index(index), _scale(scale), _disp(disp) {
2761 }
2762 MemInterface::~MemInterface() {
2763   // not owner of any character arrays
2764 }
2765 
2766 void MemInterface::dump() {
2767   output(stderr);
2768 }
2769 
2770 // Write info to output files
2771 void MemInterface::output(FILE *fp) {
2772   Interface::output(fp);
2773   if ( _base  != NULL ) fprintf(fp,"  base  == %s\n", _base);
2774   if ( _index != NULL ) fprintf(fp,"  index == %s\n", _index);
2775   if ( _scale != NULL ) fprintf(fp,"  scale == %s\n", _scale);
2776   if ( _disp  != NULL ) fprintf(fp,"  disp  == %s\n", _disp);
2777   // fprintf(fp,"\n");
2778 }
2779 
2780 //------------------------------CondInterface----------------------------------
2781 CondInterface::CondInterface(const char* equal,         const char* equal_format,
2782                              const char* not_equal,     const char* not_equal_format,
2783                              const char* less,          const char* less_format,
2784                              const char* greater_equal, const char* greater_equal_format,
2785                              const char* less_equal,    const char* less_equal_format,
2786                              const char* greater,       const char* greater_format,
2787                              const char* overflow,      const char* overflow_format,
2788                              const char* no_overflow,   const char* no_overflow_format)
2789   : Interface("COND_INTER"),
2790     _equal(equal),                 _equal_format(equal_format),
2791     _not_equal(not_equal),         _not_equal_format(not_equal_format),
2792     _less(less),                   _less_format(less_format),
2793     _greater_equal(greater_equal), _greater_equal_format(greater_equal_format),
2794     _less_equal(less_equal),       _less_equal_format(less_equal_format),
2795     _greater(greater),             _greater_format(greater_format),
2796     _overflow(overflow),           _overflow_format(overflow_format),
2797     _no_overflow(no_overflow),     _no_overflow_format(no_overflow_format) {
2798 }
2799 CondInterface::~CondInterface() {
2800   // not owner of any character arrays
2801 }
2802 
2803 void CondInterface::dump() {
2804   output(stderr);
2805 }
2806 
2807 // Write info to output files
2808 void CondInterface::output(FILE *fp) {
2809   Interface::output(fp);
2810   if ( _equal  != NULL )     fprintf(fp," equal        == %s\n", _equal);
2811   if ( _not_equal  != NULL ) fprintf(fp," not_equal    == %s\n", _not_equal);
2812   if ( _less  != NULL )      fprintf(fp," less         == %s\n", _less);
2813   if ( _greater_equal  != NULL ) fprintf(fp," greater_equal    == %s\n", _greater_equal);
2814   if ( _less_equal  != NULL ) fprintf(fp," less_equal   == %s\n", _less_equal);
2815   if ( _greater  != NULL )    fprintf(fp," greater      == %s\n", _greater);
2816   if ( _overflow != NULL )    fprintf(fp," overflow     == %s\n", _overflow);
2817   if ( _no_overflow != NULL ) fprintf(fp," no_overflow  == %s\n", _no_overflow);
2818   // fprintf(fp,"\n");
2819 }
2820 
2821 //------------------------------ConstructRule----------------------------------
2822 ConstructRule::ConstructRule(char *cnstr)
2823   : _construct(cnstr) {
2824 }
2825 ConstructRule::~ConstructRule() {
2826 }
2827 
2828 void ConstructRule::dump() {
2829   output(stderr);
2830 }
2831 
2832 void ConstructRule::output(FILE *fp) {
2833   fprintf(fp,"\nConstruct Rule\n");  // Write to output files
2834 }
2835 
2836 
2837 //==============================Shared Forms===================================
2838 //------------------------------AttributeForm----------------------------------
2839 int         AttributeForm::_insId   = 0;           // start counter at 0
2840 int         AttributeForm::_opId    = 0;           // start counter at 0
2841 const char* AttributeForm::_ins_cost = "ins_cost"; // required name
2842 const char* AttributeForm::_op_cost  = "op_cost";  // required name
2843 
2844 AttributeForm::AttributeForm(char *attr, int type, char *attrdef)
2845   : Form(Form::ATTR), _attrname(attr), _atype(type), _attrdef(attrdef) {
2846     if (type==OP_ATTR) {
2847       id = ++_opId;
2848     }
2849     else if (type==INS_ATTR) {
2850       id = ++_insId;
2851     }
2852     else assert( false,"");
2853 }
2854 AttributeForm::~AttributeForm() {
2855 }
2856 
2857 // Dynamic type check
2858 AttributeForm *AttributeForm::is_attribute() const {
2859   return (AttributeForm*)this;
2860 }
2861 
2862 
2863 // inlined  // int  AttributeForm::type() { return id;}
2864 
2865 void AttributeForm::dump() {
2866   output(stderr);
2867 }
2868 
2869 void AttributeForm::output(FILE *fp) {
2870   if( _attrname && _attrdef ) {
2871     fprintf(fp,"\n// AttributeForm \nstatic const int %s = %s;\n",
2872             _attrname, _attrdef);
2873   }
2874   else {
2875     fprintf(fp,"\n// AttributeForm missing name %s or definition %s\n",
2876             (_attrname?_attrname:""), (_attrdef?_attrdef:"") );
2877   }
2878 }
2879 
2880 //------------------------------Component--------------------------------------
2881 Component::Component(const char *name, const char *type, int usedef)
2882   : _name(name), _type(type), _usedef(usedef) {
2883     _ftype = Form::COMP;
2884 }
2885 Component::~Component() {
2886 }
2887 
2888 // True if this component is equal to the parameter.
2889 bool Component::is(int use_def_kill_enum) const {
2890   return (_usedef == use_def_kill_enum ? true : false);
2891 }
2892 // True if this component is used/def'd/kill'd as the parameter suggests.
2893 bool Component::isa(int use_def_kill_enum) const {
2894   return (_usedef & use_def_kill_enum) == use_def_kill_enum;
2895 }
2896 
2897 // Extend this component with additional use/def/kill behavior
2898 int Component::promote_use_def_info(int new_use_def) {
2899   _usedef |= new_use_def;
2900 
2901   return _usedef;
2902 }
2903 
2904 // Check the base type of this component, if it has one
2905 const char *Component::base_type(FormDict &globals) {
2906   const Form *frm = globals[_type];
2907   if (frm == NULL) return NULL;
2908   OperandForm *op = frm->is_operand();
2909   if (op == NULL) return NULL;
2910   if (op->ideal_only()) return op->_ident;
2911   return (char *)op->ideal_type(globals);
2912 }
2913 
2914 void Component::dump() {
2915   output(stderr);
2916 }
2917 
2918 void Component::output(FILE *fp) {
2919   fprintf(fp,"Component:");  // Write to output files
2920   fprintf(fp, "  name = %s", _name);
2921   fprintf(fp, ", type = %s", _type);
2922   assert(_usedef != 0, "unknown effect");
2923   fprintf(fp, ", use/def = %s\n", getUsedefName());
2924 }
2925 
2926 
2927 //------------------------------ComponentList---------------------------------
2928 ComponentList::ComponentList() : NameList(), _matchcnt(0) {
2929 }
2930 ComponentList::~ComponentList() {
2931   // // This list may not own its elements if copied via assignment
2932   // Component *component;
2933   // for (reset(); (component = iter()) != NULL;) {
2934   //   delete component;
2935   // }
2936 }
2937 
2938 void   ComponentList::insert(Component *component, bool mflag) {
2939   NameList::addName((char *)component);
2940   if(mflag) _matchcnt++;
2941 }
2942 void   ComponentList::insert(const char *name, const char *opType, int usedef,
2943                              bool mflag) {
2944   Component * component = new Component(name, opType, usedef);
2945   insert(component, mflag);
2946 }
2947 Component *ComponentList::current() { return (Component*)NameList::current(); }
2948 Component *ComponentList::iter()    { return (Component*)NameList::iter(); }
2949 Component *ComponentList::match_iter() {
2950   if(_iter < _matchcnt) return (Component*)NameList::iter();
2951   return NULL;
2952 }
2953 Component *ComponentList::post_match_iter() {
2954   Component *comp = iter();
2955   // At end of list?
2956   if ( comp == NULL ) {
2957     return comp;
2958   }
2959   // In post-match components?
2960   if (_iter > match_count()-1) {
2961     return comp;
2962   }
2963 
2964   return post_match_iter();
2965 }
2966 
2967 void       ComponentList::reset()   { NameList::reset(); }
2968 int        ComponentList::count()   { return NameList::count(); }
2969 
2970 Component *ComponentList::operator[](int position) {
2971   // Shortcut complete iteration if there are not enough entries
2972   if (position >= count()) return NULL;
2973 
2974   int        index     = 0;
2975   Component *component = NULL;
2976   for (reset(); (component = iter()) != NULL;) {
2977     if (index == position) {
2978       return component;
2979     }
2980     ++index;
2981   }
2982 
2983   return NULL;
2984 }
2985 
2986 const Component *ComponentList::search(const char *name) {
2987   PreserveIter pi(this);
2988   reset();
2989   for( Component *comp = NULL; ((comp = iter()) != NULL); ) {
2990     if( strcmp(comp->_name,name) == 0 ) return comp;
2991   }
2992 
2993   return NULL;
2994 }
2995 
2996 // Return number of USEs + number of DEFs
2997 // When there are no components, or the first component is a USE,
2998 // then we add '1' to hold a space for the 'result' operand.
2999 int ComponentList::num_operands() {
3000   PreserveIter pi(this);
3001   uint       count = 1;           // result operand
3002   uint       position = 0;
3003 
3004   Component *component  = NULL;
3005   for( reset(); (component = iter()) != NULL; ++position ) {
3006     if( component->isa(Component::USE) ||
3007         ( position == 0 && (! component->isa(Component::DEF))) ) {
3008       ++count;
3009     }
3010   }
3011 
3012   return count;
3013 }
3014 
3015 // Return zero-based position of operand 'name' in list;  -1 if not in list.
3016 // if parameter 'usedef' is ::USE, it will match USE, USE_DEF, ...
3017 int ComponentList::operand_position(const char *name, int usedef, Form *fm) {
3018   PreserveIter pi(this);
3019   int position = 0;
3020   int num_opnds = num_operands();
3021   Component *component;
3022   Component* preceding_non_use = NULL;
3023   Component* first_def = NULL;
3024   for (reset(); (component = iter()) != NULL; ++position) {
3025     // When the first component is not a DEF,
3026     // leave space for the result operand!
3027     if ( position==0 && (! component->isa(Component::DEF)) ) {
3028       ++position;
3029       ++num_opnds;
3030     }
3031     if (strcmp(name, component->_name)==0 && (component->isa(usedef))) {
3032       // When the first entry in the component list is a DEF and a USE
3033       // Treat them as being separate, a DEF first, then a USE
3034       if( position==0
3035           && usedef==Component::USE && component->isa(Component::DEF) ) {
3036         assert(position+1 < num_opnds, "advertised index in bounds");
3037         return position+1;
3038       } else {
3039         if( preceding_non_use && strcmp(component->_name, preceding_non_use->_name) ) {
3040           fprintf(stderr, "the name '%s(%s)' should not precede the name '%s(%s)'",
3041                   preceding_non_use->_name, preceding_non_use->getUsedefName(),
3042                   name, component->getUsedefName());
3043           if (fm && fm->is_instruction()) fprintf(stderr,  "in form '%s'", fm->is_instruction()->_ident);
3044           if (fm && fm->is_operand()) fprintf(stderr,  "in form '%s'", fm->is_operand()->_ident);
3045           fprintf(stderr,  "\n");
3046         }
3047         if( position >= num_opnds ) {
3048           fprintf(stderr, "the name '%s' is too late in its name list", name);
3049           if (fm && fm->is_instruction()) fprintf(stderr,  "in form '%s'", fm->is_instruction()->_ident);
3050           if (fm && fm->is_operand()) fprintf(stderr,  "in form '%s'", fm->is_operand()->_ident);
3051           fprintf(stderr,  "\n");
3052         }
3053         assert(position < num_opnds, "advertised index in bounds");
3054         return position;
3055       }
3056     }
3057     if( component->isa(Component::DEF)
3058         && component->isa(Component::USE) ) {
3059       ++position;
3060       if( position != 1 )  --position;   // only use two slots for the 1st USE_DEF
3061     }
3062     if( component->isa(Component::DEF) && !first_def ) {
3063       first_def = component;
3064     }
3065     if( !component->isa(Component::USE) && component != first_def ) {
3066       preceding_non_use = component;
3067     } else if( preceding_non_use && !strcmp(component->_name, preceding_non_use->_name) ) {
3068       preceding_non_use = NULL;
3069     }
3070   }
3071   return Not_in_list;
3072 }
3073 
3074 // Find position for this name, regardless of use/def information
3075 int ComponentList::operand_position(const char *name) {
3076   PreserveIter pi(this);
3077   int position = 0;
3078   Component *component;
3079   for (reset(); (component = iter()) != NULL; ++position) {
3080     // When the first component is not a DEF,
3081     // leave space for the result operand!
3082     if ( position==0 && (! component->isa(Component::DEF)) ) {
3083       ++position;
3084     }
3085     if (strcmp(name, component->_name)==0) {
3086       return position;
3087     }
3088     if( component->isa(Component::DEF)
3089         && component->isa(Component::USE) ) {
3090       ++position;
3091       if( position != 1 )  --position;   // only use two slots for the 1st USE_DEF
3092     }
3093   }
3094   return Not_in_list;
3095 }
3096 
3097 int ComponentList::operand_position_format(const char *name, Form *fm) {
3098   PreserveIter pi(this);
3099   int  first_position = operand_position(name);
3100   int  use_position   = operand_position(name, Component::USE, fm);
3101 
3102   return ((first_position < use_position) ? use_position : first_position);
3103 }
3104 
3105 int ComponentList::label_position() {
3106   PreserveIter pi(this);
3107   int position = 0;
3108   reset();
3109   for( Component *comp; (comp = iter()) != NULL; ++position) {
3110     // When the first component is not a DEF,
3111     // leave space for the result operand!
3112     if ( position==0 && (! comp->isa(Component::DEF)) ) {
3113       ++position;
3114     }
3115     if (strcmp(comp->_type, "label")==0) {
3116       return position;
3117     }
3118     if( comp->isa(Component::DEF)
3119         && comp->isa(Component::USE) ) {
3120       ++position;
3121       if( position != 1 )  --position;   // only use two slots for the 1st USE_DEF
3122     }
3123   }
3124 
3125   return -1;
3126 }
3127 
3128 int ComponentList::method_position() {
3129   PreserveIter pi(this);
3130   int position = 0;
3131   reset();
3132   for( Component *comp; (comp = iter()) != NULL; ++position) {
3133     // When the first component is not a DEF,
3134     // leave space for the result operand!
3135     if ( position==0 && (! comp->isa(Component::DEF)) ) {
3136       ++position;
3137     }
3138     if (strcmp(comp->_type, "method")==0) {
3139       return position;
3140     }
3141     if( comp->isa(Component::DEF)
3142         && comp->isa(Component::USE) ) {
3143       ++position;
3144       if( position != 1 )  --position;   // only use two slots for the 1st USE_DEF
3145     }
3146   }
3147 
3148   return -1;
3149 }
3150 
3151 void ComponentList::dump() { output(stderr); }
3152 
3153 void ComponentList::output(FILE *fp) {
3154   PreserveIter pi(this);
3155   fprintf(fp, "\n");
3156   Component *component;
3157   for (reset(); (component = iter()) != NULL;) {
3158     component->output(fp);
3159   }
3160   fprintf(fp, "\n");
3161 }
3162 
3163 //------------------------------MatchNode--------------------------------------
3164 MatchNode::MatchNode(ArchDesc &ad, const char *result, const char *mexpr,
3165                      const char *opType, MatchNode *lChild, MatchNode *rChild)
3166   : _AD(ad), _result(result), _name(mexpr), _opType(opType),
3167     _lChild(lChild), _rChild(rChild), _internalop(0), _numleaves(0),
3168     _commutative_id(0) {
3169   _numleaves = (lChild ? lChild->_numleaves : 0)
3170                + (rChild ? rChild->_numleaves : 0);
3171 }
3172 
3173 MatchNode::MatchNode(ArchDesc &ad, MatchNode& mnode)
3174   : _AD(ad), _result(mnode._result), _name(mnode._name),
3175     _opType(mnode._opType), _lChild(mnode._lChild), _rChild(mnode._rChild),
3176     _internalop(0), _numleaves(mnode._numleaves),
3177     _commutative_id(mnode._commutative_id) {
3178 }
3179 
3180 MatchNode::MatchNode(ArchDesc &ad, MatchNode& mnode, int clone)
3181   : _AD(ad), _result(mnode._result), _name(mnode._name),
3182     _opType(mnode._opType),
3183     _internalop(0), _numleaves(mnode._numleaves),
3184     _commutative_id(mnode._commutative_id) {
3185   if (mnode._lChild) {
3186     _lChild = new MatchNode(ad, *mnode._lChild, clone);
3187   } else {
3188     _lChild = NULL;
3189   }
3190   if (mnode._rChild) {
3191     _rChild = new MatchNode(ad, *mnode._rChild, clone);
3192   } else {
3193     _rChild = NULL;
3194   }
3195 }
3196 
3197 MatchNode::~MatchNode() {
3198   // // This node may not own its children if copied via assignment
3199   // if( _lChild ) delete _lChild;
3200   // if( _rChild ) delete _rChild;
3201 }
3202 
3203 bool  MatchNode::find_type(const char *type, int &position) const {
3204   if ( (_lChild != NULL) && (_lChild->find_type(type, position)) ) return true;
3205   if ( (_rChild != NULL) && (_rChild->find_type(type, position)) ) return true;
3206 
3207   if (strcmp(type,_opType)==0)  {
3208     return true;
3209   } else {
3210     ++position;
3211   }
3212   return false;
3213 }
3214 
3215 // Recursive call collecting info on top-level operands, not transitive.
3216 // Implementation does not modify state of internal structures.
3217 void MatchNode::append_components(FormDict& locals, ComponentList& components,
3218                                   bool def_flag) const {
3219   int usedef = def_flag ? Component::DEF : Component::USE;
3220   FormDict &globals = _AD.globalNames();
3221 
3222   assert (_name != NULL, "MatchNode::build_components encountered empty node\n");
3223   // Base case
3224   if (_lChild==NULL && _rChild==NULL) {
3225     // If _opType is not an operation, do not build a component for it #####
3226     const Form *f = globals[_opType];
3227     if( f != NULL ) {
3228       // Add non-ideals that are operands, operand-classes,
3229       if( ! f->ideal_only()
3230           && (f->is_opclass() || f->is_operand()) ) {
3231         components.insert(_name, _opType, usedef, true);
3232       }
3233     }
3234     return;
3235   }
3236   // Promote results of "Set" to DEF
3237   bool tmpdef_flag = (!strcmp(_opType, "Set")) ? true : false;
3238   if (_lChild) _lChild->append_components(locals, components, tmpdef_flag);
3239   tmpdef_flag = false;   // only applies to component immediately following 'Set'
3240   if (_rChild) _rChild->append_components(locals, components, tmpdef_flag);
3241 }
3242 
3243 // Find the n'th base-operand in the match node,
3244 // recursively investigates match rules of user-defined operands.
3245 //
3246 // Implementation does not modify state of internal structures since they
3247 // can be shared.
3248 bool MatchNode::base_operand(uint &position, FormDict &globals,
3249                              const char * &result, const char * &name,
3250                              const char * &opType) const {
3251   assert (_name != NULL, "MatchNode::base_operand encountered empty node\n");
3252   // Base case
3253   if (_lChild==NULL && _rChild==NULL) {
3254     // Check for special case: "Universe", "label"
3255     if (strcmp(_opType,"Universe") == 0 || strcmp(_opType,"label")==0 ) {
3256       if (position == 0) {
3257         result = _result;
3258         name   = _name;
3259         opType = _opType;
3260         return 1;
3261       } else {
3262         -- position;
3263         return 0;
3264       }
3265     }
3266 
3267     const Form *form = globals[_opType];
3268     MatchNode *matchNode = NULL;
3269     // Check for user-defined type
3270     if (form) {
3271       // User operand or instruction?
3272       OperandForm  *opForm = form->is_operand();
3273       InstructForm *inForm = form->is_instruction();
3274       if ( opForm ) {
3275         matchNode = (MatchNode*)opForm->_matrule;
3276       } else if ( inForm ) {
3277         matchNode = (MatchNode*)inForm->_matrule;
3278       }
3279     }
3280     // if this is user-defined, recurse on match rule
3281     // User-defined operand and instruction forms have a match-rule.
3282     if (matchNode) {
3283       return (matchNode->base_operand(position,globals,result,name,opType));
3284     } else {
3285       // Either not a form, or a system-defined form (no match rule).
3286       if (position==0) {
3287         result = _result;
3288         name   = _name;
3289         opType = _opType;
3290         return 1;
3291       } else {
3292         --position;
3293         return 0;
3294       }
3295     }
3296 
3297   } else {
3298     // Examine the left child and right child as well
3299     if (_lChild) {
3300       if (_lChild->base_operand(position, globals, result, name, opType))
3301         return 1;
3302     }
3303 
3304     if (_rChild) {
3305       if (_rChild->base_operand(position, globals, result, name, opType))
3306         return 1;
3307     }
3308   }
3309 
3310   return 0;
3311 }
3312 
3313 // Recursive call on all operands' match rules in my match rule.
3314 uint  MatchNode::num_consts(FormDict &globals) const {
3315   uint        index      = 0;
3316   uint        num_consts = 0;
3317   const char *result;
3318   const char *name;
3319   const char *opType;
3320 
3321   for (uint position = index;
3322        base_operand(position,globals,result,name,opType); position = index) {
3323     ++index;
3324     if( ideal_to_const_type(opType) )        num_consts++;
3325   }
3326 
3327   return num_consts;
3328 }
3329 
3330 // Recursive call on all operands' match rules in my match rule.
3331 // Constants in match rule subtree with specified type
3332 uint  MatchNode::num_consts(FormDict &globals, Form::DataType type) const {
3333   uint        index      = 0;
3334   uint        num_consts = 0;
3335   const char *result;
3336   const char *name;
3337   const char *opType;
3338 
3339   for (uint position = index;
3340        base_operand(position,globals,result,name,opType); position = index) {
3341     ++index;
3342     if( ideal_to_const_type(opType) == type ) num_consts++;
3343   }
3344 
3345   return num_consts;
3346 }
3347 
3348 // Recursive call on all operands' match rules in my match rule.
3349 uint  MatchNode::num_const_ptrs(FormDict &globals) const {
3350   return  num_consts( globals, Form::idealP );
3351 }
3352 
3353 bool  MatchNode::sets_result() const {
3354   return   ( (strcmp(_name,"Set") == 0) ? true : false );
3355 }
3356 
3357 const char *MatchNode::reduce_right(FormDict &globals) const {
3358   // If there is no right reduction, return NULL.
3359   const char      *rightStr    = NULL;
3360 
3361   // If we are a "Set", start from the right child.
3362   const MatchNode *const mnode = sets_result() ?
3363     (const MatchNode *)this->_rChild :
3364     (const MatchNode *)this;
3365 
3366   // If our right child exists, it is the right reduction
3367   if ( mnode->_rChild ) {
3368     rightStr = mnode->_rChild->_internalop ? mnode->_rChild->_internalop
3369       : mnode->_rChild->_opType;
3370   }
3371   // Else, May be simple chain rule: (Set dst operand_form), rightStr=NULL;
3372   return rightStr;
3373 }
3374 
3375 const char *MatchNode::reduce_left(FormDict &globals) const {
3376   // If there is no left reduction, return NULL.
3377   const char  *leftStr  = NULL;
3378 
3379   // If we are a "Set", start from the right child.
3380   const MatchNode *const mnode = sets_result() ?
3381     (const MatchNode *)this->_rChild :
3382     (const MatchNode *)this;
3383 
3384   // If our left child exists, it is the left reduction
3385   if ( mnode->_lChild ) {
3386     leftStr = mnode->_lChild->_internalop ? mnode->_lChild->_internalop
3387       : mnode->_lChild->_opType;
3388   } else {
3389     // May be simple chain rule: (Set dst operand_form_source)
3390     if ( sets_result() ) {
3391       OperandForm *oper = globals[mnode->_opType]->is_operand();
3392       if( oper ) {
3393         leftStr = mnode->_opType;
3394       }
3395     }
3396   }
3397   return leftStr;
3398 }
3399 
3400 //------------------------------count_instr_names------------------------------
3401 // Count occurrences of operands names in the leaves of the instruction
3402 // match rule.
3403 void MatchNode::count_instr_names( Dict &names ) {
3404   if( this == NULL ) return;
3405   if( _lChild ) _lChild->count_instr_names(names);
3406   if( _rChild ) _rChild->count_instr_names(names);
3407   if( !_lChild && !_rChild ) {
3408     uintptr_t cnt = (uintptr_t)names[_name];
3409     cnt++;                      // One more name found
3410     names.Insert(_name,(void*)cnt);
3411   }
3412 }
3413 
3414 //------------------------------build_instr_pred-------------------------------
3415 // Build a path to 'name' in buf.  Actually only build if cnt is zero, so we
3416 // can skip some leading instances of 'name'.
3417 int MatchNode::build_instr_pred( char *buf, const char *name, int cnt ) {
3418   if( _lChild ) {
3419     if( !cnt ) strcpy( buf, "_kids[0]->" );
3420     cnt = _lChild->build_instr_pred( buf+strlen(buf), name, cnt );
3421     if( cnt < 0 ) return cnt;   // Found it, all done
3422   }
3423   if( _rChild ) {
3424     if( !cnt ) strcpy( buf, "_kids[1]->" );
3425     cnt = _rChild->build_instr_pred( buf+strlen(buf), name, cnt );
3426     if( cnt < 0 ) return cnt;   // Found it, all done
3427   }
3428   if( !_lChild && !_rChild ) {  // Found a leaf
3429     // Wrong name?  Give up...
3430     if( strcmp(name,_name) ) return cnt;
3431     if( !cnt ) strcpy(buf,"_leaf");
3432     return cnt-1;
3433   }
3434   return cnt;
3435 }
3436 
3437 
3438 //------------------------------build_internalop-------------------------------
3439 // Build string representation of subtree
3440 void MatchNode::build_internalop( ) {
3441   char *iop, *subtree;
3442   const char *lstr, *rstr;
3443   // Build string representation of subtree
3444   // Operation lchildType rchildType
3445   int len = (int)strlen(_opType) + 4;
3446   lstr = (_lChild) ? ((_lChild->_internalop) ?
3447                        _lChild->_internalop : _lChild->_opType) : "";
3448   rstr = (_rChild) ? ((_rChild->_internalop) ?
3449                        _rChild->_internalop : _rChild->_opType) : "";
3450   len += (int)strlen(lstr) + (int)strlen(rstr);
3451   subtree = (char *)malloc(len);
3452   sprintf(subtree,"_%s_%s_%s", _opType, lstr, rstr);
3453   // Hash the subtree string in _internalOps; if a name exists, use it
3454   iop = (char *)_AD._internalOps[subtree];
3455   // Else create a unique name, and add it to the hash table
3456   if (iop == NULL) {
3457     iop = subtree;
3458     _AD._internalOps.Insert(subtree, iop);
3459     _AD._internalOpNames.addName(iop);
3460     _AD._internalMatch.Insert(iop, this);
3461   }
3462   // Add the internal operand name to the MatchNode
3463   _internalop = iop;
3464   _result = iop;
3465 }
3466 
3467 
3468 void MatchNode::dump() {
3469   output(stderr);
3470 }
3471 
3472 void MatchNode::output(FILE *fp) {
3473   if (_lChild==0 && _rChild==0) {
3474     fprintf(fp," %s",_name);    // operand
3475   }
3476   else {
3477     fprintf(fp," (%s ",_name);  // " (opcodeName "
3478     if(_lChild) _lChild->output(fp); //               left operand
3479     if(_rChild) _rChild->output(fp); //                    right operand
3480     fprintf(fp,")");                 //                                 ")"
3481   }
3482 }
3483 
3484 int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
3485   static const char *needs_ideal_memory_list[] = {
3486     "StoreI","StoreL","StoreP","StoreN","StoreNKlass","StoreD","StoreF" ,
3487     "StoreB","StoreC","Store" ,"StoreFP",
3488     "LoadI", "LoadL", "LoadP" ,"LoadN", "LoadD" ,"LoadF"  ,
3489     "LoadB" , "LoadUB", "LoadUS" ,"LoadS" ,"Load" ,
3490     "StoreVector", "LoadVector",
3491     "LoadRange", "LoadKlass", "LoadNKlass", "LoadL_unaligned", "LoadD_unaligned",
3492     "LoadPLocked",
3493     "StorePConditional", "StoreIConditional", "StoreLConditional",
3494     "CompareAndSwapI", "CompareAndSwapL", "CompareAndSwapP", "CompareAndSwapN",
3495     "WeakCompareAndSwapI", "WeakCompareAndSwapL", "WeakCompareAndSwapP", "WeakCompareAndSwapN",
3496     "CompareAndExchangeI", "CompareAndExchangeL", "CompareAndExchangeP", "CompareAndExchangeN",
3497     "StoreCM",
3498     "ClearArray",
3499     "GetAndAddI", "GetAndSetI", "GetAndSetP",
3500     "GetAndAddL", "GetAndSetL", "GetAndSetN",
3501   };
3502   int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
3503   if( strcmp(_opType,"PrefetchAllocation")==0 )
3504     return 1;
3505   if( _lChild ) {
3506     const char *opType = _lChild->_opType;
3507     for( int i=0; i<cnt; i++ )
3508       if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3509         return 1;
3510     if( _lChild->needs_ideal_memory_edge(globals) )
3511       return 1;
3512   }
3513   if( _rChild ) {
3514     const char *opType = _rChild->_opType;
3515     for( int i=0; i<cnt; i++ )
3516       if( strcmp(opType,needs_ideal_memory_list[i]) == 0 )
3517         return 1;
3518     if( _rChild->needs_ideal_memory_edge(globals) )
3519       return 1;
3520   }
3521 
3522   return 0;
3523 }
3524 
3525 // TRUE if defines a derived oop, and so needs a base oop edge present
3526 // post-matching.
3527 int MatchNode::needs_base_oop_edge() const {
3528   if( !strcmp(_opType,"AddP") ) return 1;
3529   if( strcmp(_opType,"Set") ) return 0;
3530   return !strcmp(_rChild->_opType,"AddP");
3531 }
3532 
3533 int InstructForm::needs_base_oop_edge(FormDict &globals) const {
3534   if( is_simple_chain_rule(globals) ) {
3535     const char *src = _matrule->_rChild->_opType;
3536     OperandForm *src_op = globals[src]->is_operand();
3537     assert( src_op, "Not operand class of chain rule" );
3538     return src_op->_matrule ? src_op->_matrule->needs_base_oop_edge() : 0;
3539   }                             // Else check instruction
3540 
3541   return _matrule ? _matrule->needs_base_oop_edge() : 0;
3542 }
3543 
3544 
3545 //-------------------------cisc spilling methods-------------------------------
3546 // helper routines and methods for detecting cisc-spilling instructions
3547 //-------------------------cisc_spill_merge------------------------------------
3548 int MatchNode::cisc_spill_merge(int left_spillable, int right_spillable) {
3549   int cisc_spillable  = Maybe_cisc_spillable;
3550 
3551   // Combine results of left and right checks
3552   if( (left_spillable == Maybe_cisc_spillable) && (right_spillable == Maybe_cisc_spillable) ) {
3553     // neither side is spillable, nor prevents cisc spilling
3554     cisc_spillable = Maybe_cisc_spillable;
3555   }
3556   else if( (left_spillable == Maybe_cisc_spillable) && (right_spillable > Maybe_cisc_spillable) ) {
3557     // right side is spillable
3558     cisc_spillable = right_spillable;
3559   }
3560   else if( (right_spillable == Maybe_cisc_spillable) && (left_spillable > Maybe_cisc_spillable) ) {
3561     // left side is spillable
3562     cisc_spillable = left_spillable;
3563   }
3564   else if( (left_spillable == Not_cisc_spillable) || (right_spillable == Not_cisc_spillable) ) {
3565     // left or right prevents cisc spilling this instruction
3566     cisc_spillable = Not_cisc_spillable;
3567   }
3568   else {
3569     // Only allow one to spill
3570     cisc_spillable = Not_cisc_spillable;
3571   }
3572 
3573   return cisc_spillable;
3574 }
3575 
3576 //-------------------------root_ops_match--------------------------------------
3577 bool static root_ops_match(FormDict &globals, const char *op1, const char *op2) {
3578   // Base Case: check that the current operands/operations match
3579   assert( op1, "Must have op's name");
3580   assert( op2, "Must have op's name");
3581   const Form *form1 = globals[op1];
3582   const Form *form2 = globals[op2];
3583 
3584   return (form1 == form2);
3585 }
3586 
3587 //-------------------------cisc_spill_match_node-------------------------------
3588 // Recursively check two MatchRules for legal conversion via cisc-spilling
3589 int MatchNode::cisc_spill_match(FormDict& globals, RegisterForm* registers, MatchNode* mRule2, const char* &operand, const char* &reg_type) {
3590   int cisc_spillable  = Maybe_cisc_spillable;
3591   int left_spillable  = Maybe_cisc_spillable;
3592   int right_spillable = Maybe_cisc_spillable;
3593 
3594   // Check that each has same number of operands at this level
3595   if( (_lChild && !(mRule2->_lChild)) || (_rChild && !(mRule2->_rChild)) )
3596     return Not_cisc_spillable;
3597 
3598   // Base Case: check that the current operands/operations match
3599   // or are CISC spillable
3600   assert( _opType, "Must have _opType");
3601   assert( mRule2->_opType, "Must have _opType");
3602   const Form *form  = globals[_opType];
3603   const Form *form2 = globals[mRule2->_opType];
3604   if( form == form2 ) {
3605     cisc_spillable = Maybe_cisc_spillable;
3606   } else {
3607     const InstructForm *form2_inst = form2 ? form2->is_instruction() : NULL;
3608     const char *name_left  = mRule2->_lChild ? mRule2->_lChild->_opType : NULL;
3609     const char *name_right = mRule2->_rChild ? mRule2->_rChild->_opType : NULL;
3610     DataType data_type = Form::none;
3611     if (form->is_operand()) {
3612       // Make sure the loadX matches the type of the reg
3613       data_type = form->ideal_to_Reg_type(form->is_operand()->ideal_type(globals));
3614     }
3615     // Detect reg vs (loadX memory)
3616     if( form->is_cisc_reg(globals)
3617         && form2_inst
3618         && data_type != Form::none
3619         && (is_load_from_memory(mRule2->_opType) == data_type) // reg vs. (load memory)
3620         && (name_left != NULL)       // NOT (load)
3621         && (name_right == NULL) ) {  // NOT (load memory foo)
3622       const Form *form2_left = name_left ? globals[name_left] : NULL;
3623       if( form2_left && form2_left->is_cisc_mem(globals) ) {
3624         cisc_spillable = Is_cisc_spillable;
3625         operand        = _name;
3626         reg_type       = _result;
3627         return Is_cisc_spillable;
3628       } else {
3629         cisc_spillable = Not_cisc_spillable;
3630       }
3631     }
3632     // Detect reg vs memory
3633     else if( form->is_cisc_reg(globals) && form2->is_cisc_mem(globals) ) {
3634       cisc_spillable = Is_cisc_spillable;
3635       operand        = _name;
3636       reg_type       = _result;
3637       return Is_cisc_spillable;
3638     } else {
3639       cisc_spillable = Not_cisc_spillable;
3640     }
3641   }
3642 
3643   // If cisc is still possible, check rest of tree
3644   if( cisc_spillable == Maybe_cisc_spillable ) {
3645     // Check that each has same number of operands at this level
3646     if( (_lChild && !(mRule2->_lChild)) || (_rChild && !(mRule2->_rChild)) ) return Not_cisc_spillable;
3647 
3648     // Check left operands
3649     if( (_lChild == NULL) && (mRule2->_lChild == NULL) ) {
3650       left_spillable = Maybe_cisc_spillable;
3651     } else {
3652       left_spillable = _lChild->cisc_spill_match(globals, registers, mRule2->_lChild, operand, reg_type);
3653     }
3654 
3655     // Check right operands
3656     if( (_rChild == NULL) && (mRule2->_rChild == NULL) ) {
3657       right_spillable =  Maybe_cisc_spillable;
3658     } else {
3659       right_spillable = _rChild->cisc_spill_match(globals, registers, mRule2->_rChild, operand, reg_type);
3660     }
3661 
3662     // Combine results of left and right checks
3663     cisc_spillable = cisc_spill_merge(left_spillable, right_spillable);
3664   }
3665 
3666   return cisc_spillable;
3667 }
3668 
3669 //---------------------------cisc_spill_match_rule------------------------------
3670 // Recursively check two MatchRules for legal conversion via cisc-spilling
3671 // This method handles the root of Match tree,
3672 // general recursive checks done in MatchNode
3673 int  MatchRule::matchrule_cisc_spill_match(FormDict& globals, RegisterForm* registers,
3674                                            MatchRule* mRule2, const char* &operand,
3675                                            const char* &reg_type) {
3676   int cisc_spillable  = Maybe_cisc_spillable;
3677   int left_spillable  = Maybe_cisc_spillable;
3678   int right_spillable = Maybe_cisc_spillable;
3679 
3680   // Check that each sets a result
3681   if( !(sets_result() && mRule2->sets_result()) ) return Not_cisc_spillable;
3682   // Check that each has same number of operands at this level
3683   if( (_lChild && !(mRule2->_lChild)) || (_rChild && !(mRule2->_rChild)) ) return Not_cisc_spillable;
3684 
3685   // Check left operands: at root, must be target of 'Set'
3686   if( (_lChild == NULL) || (mRule2->_lChild == NULL) ) {
3687     left_spillable = Not_cisc_spillable;
3688   } else {
3689     // Do not support cisc-spilling instruction's target location
3690     if( root_ops_match(globals, _lChild->_opType, mRule2->_lChild->_opType) ) {
3691       left_spillable = Maybe_cisc_spillable;
3692     } else {
3693       left_spillable = Not_cisc_spillable;
3694     }
3695   }
3696 
3697   // Check right operands: recursive walk to identify reg->mem operand
3698   if( (_rChild == NULL) && (mRule2->_rChild == NULL) ) {
3699     right_spillable =  Maybe_cisc_spillable;
3700   } else {
3701     right_spillable = _rChild->cisc_spill_match(globals, registers, mRule2->_rChild, operand, reg_type);
3702   }
3703 
3704   // Combine results of left and right checks
3705   cisc_spillable = cisc_spill_merge(left_spillable, right_spillable);
3706 
3707   return cisc_spillable;
3708 }
3709 
3710 //----------------------------- equivalent ------------------------------------
3711 // Recursively check to see if two match rules are equivalent.
3712 // This rule handles the root.
3713 bool MatchRule::equivalent(FormDict &globals, MatchNode *mRule2) {
3714   // Check that each sets a result
3715   if (sets_result() != mRule2->sets_result()) {
3716     return false;
3717   }
3718 
3719   // Check that the current operands/operations match
3720   assert( _opType, "Must have _opType");
3721   assert( mRule2->_opType, "Must have _opType");
3722   const Form *form  = globals[_opType];
3723   const Form *form2 = globals[mRule2->_opType];
3724   if( form != form2 ) {
3725     return false;
3726   }
3727 
3728   if (_lChild ) {
3729     if( !_lChild->equivalent(globals, mRule2->_lChild) )
3730       return false;
3731   } else if (mRule2->_lChild) {
3732     return false; // I have NULL left child, mRule2 has non-NULL left child.
3733   }
3734 
3735   if (_rChild ) {
3736     if( !_rChild->equivalent(globals, mRule2->_rChild) )
3737       return false;
3738   } else if (mRule2->_rChild) {
3739     return false; // I have NULL right child, mRule2 has non-NULL right child.
3740   }
3741 
3742   // We've made it through the gauntlet.
3743   return true;
3744 }
3745 
3746 //----------------------------- equivalent ------------------------------------
3747 // Recursively check to see if two match rules are equivalent.
3748 // This rule handles the operands.
3749 bool MatchNode::equivalent(FormDict &globals, MatchNode *mNode2) {
3750   if( !mNode2 )
3751     return false;
3752 
3753   // Check that the current operands/operations match
3754   assert( _opType, "Must have _opType");
3755   assert( mNode2->_opType, "Must have _opType");
3756   const Form *form  = globals[_opType];
3757   const Form *form2 = globals[mNode2->_opType];
3758   if( form != form2 ) {
3759     return false;
3760   }
3761 
3762   // Check that their children also match
3763   if (_lChild ) {
3764     if( !_lChild->equivalent(globals, mNode2->_lChild) )
3765       return false;
3766   } else if (mNode2->_lChild) {
3767     return false; // I have NULL left child, mNode2 has non-NULL left child.
3768   }
3769 
3770   if (_rChild ) {
3771     if( !_rChild->equivalent(globals, mNode2->_rChild) )
3772       return false;
3773   } else if (mNode2->_rChild) {
3774     return false; // I have NULL right child, mNode2 has non-NULL right child.
3775   }
3776 
3777   // We've made it through the gauntlet.
3778   return true;
3779 }
3780 
3781 //-------------------------- has_commutative_op -------------------------------
3782 // Recursively check for commutative operations with subtree operands
3783 // which could be swapped.
3784 void MatchNode::count_commutative_op(int& count) {
3785   static const char *commut_op_list[] = {
3786     "AddI","AddL","AddF","AddD",
3787     "AndI","AndL",
3788     "MaxI","MinI",
3789     "MulI","MulL","MulF","MulD",
3790     "OrI" ,"OrL" ,
3791     "XorI","XorL"
3792   };
3793   int cnt = sizeof(commut_op_list)/sizeof(char*);
3794 
3795   if( _lChild && _rChild && (_lChild->_lChild || _rChild->_lChild) ) {
3796     // Don't swap if right operand is an immediate constant.
3797     bool is_const = false;
3798     if( _rChild->_lChild == NULL && _rChild->_rChild == NULL ) {
3799       FormDict &globals = _AD.globalNames();
3800       const Form *form = globals[_rChild->_opType];
3801       if ( form ) {
3802         OperandForm  *oper = form->is_operand();
3803         if( oper && oper->interface_type(globals) == Form::constant_interface )
3804           is_const = true;
3805       }
3806     }
3807     if( !is_const ) {
3808       for( int i=0; i<cnt; i++ ) {
3809         if( strcmp(_opType, commut_op_list[i]) == 0 ) {
3810           count++;
3811           _commutative_id = count; // id should be > 0
3812           break;
3813         }
3814       }
3815     }
3816   }
3817   if( _lChild )
3818     _lChild->count_commutative_op(count);
3819   if( _rChild )
3820     _rChild->count_commutative_op(count);
3821 }
3822 
3823 //-------------------------- swap_commutative_op ------------------------------
3824 // Recursively swap specified commutative operation with subtree operands.
3825 void MatchNode::swap_commutative_op(bool atroot, int id) {
3826   if( _commutative_id == id ) { // id should be > 0
3827     assert(_lChild && _rChild && (_lChild->_lChild || _rChild->_lChild ),
3828             "not swappable operation");
3829     MatchNode* tmp = _lChild;
3830     _lChild = _rChild;
3831     _rChild = tmp;
3832     // Don't exit here since we need to build internalop.
3833   }
3834 
3835   bool is_set = ( strcmp(_opType, "Set") == 0 );
3836   if( _lChild )
3837     _lChild->swap_commutative_op(is_set, id);
3838   if( _rChild )
3839     _rChild->swap_commutative_op(is_set, id);
3840 
3841   // If not the root, reduce this subtree to an internal operand
3842   if( !atroot && (_lChild || _rChild) ) {
3843     build_internalop();
3844   }
3845 }
3846 
3847 //-------------------------- swap_commutative_op ------------------------------
3848 // Recursively swap specified commutative operation with subtree operands.
3849 void MatchRule::matchrule_swap_commutative_op(const char* instr_ident, int count, int& match_rules_cnt) {
3850   assert(match_rules_cnt < 100," too many match rule clones");
3851   // Clone
3852   MatchRule* clone = new MatchRule(_AD, this);
3853   // Swap operands of commutative operation
3854   ((MatchNode*)clone)->swap_commutative_op(true, count);
3855   char* buf = (char*) malloc(strlen(instr_ident) + 4);
3856   sprintf(buf, "%s_%d", instr_ident, match_rules_cnt++);
3857   clone->_result = buf;
3858 
3859   clone->_next = this->_next;
3860   this-> _next = clone;
3861   if( (--count) > 0 ) {
3862     this-> matchrule_swap_commutative_op(instr_ident, count, match_rules_cnt);
3863     clone->matchrule_swap_commutative_op(instr_ident, count, match_rules_cnt);
3864   }
3865 }
3866 
3867 //------------------------------MatchRule--------------------------------------
3868 MatchRule::MatchRule(ArchDesc &ad)
3869   : MatchNode(ad), _depth(0), _construct(NULL), _numchilds(0) {
3870     _next = NULL;
3871 }
3872 
3873 MatchRule::MatchRule(ArchDesc &ad, MatchRule* mRule)
3874   : MatchNode(ad, *mRule, 0), _depth(mRule->_depth),
3875     _construct(mRule->_construct), _numchilds(mRule->_numchilds) {
3876     _next = NULL;
3877 }
3878 
3879 MatchRule::MatchRule(ArchDesc &ad, MatchNode* mroot, int depth, char *cnstr,
3880                      int numleaves)
3881   : MatchNode(ad,*mroot), _depth(depth), _construct(cnstr),
3882     _numchilds(0) {
3883       _next = NULL;
3884       mroot->_lChild = NULL;
3885       mroot->_rChild = NULL;
3886       delete mroot;
3887       _numleaves = numleaves;
3888       _numchilds = (_lChild ? 1 : 0) + (_rChild ? 1 : 0);
3889 }
3890 MatchRule::~MatchRule() {
3891 }
3892 
3893 // Recursive call collecting info on top-level operands, not transitive.
3894 // Implementation does not modify state of internal structures.
3895 void MatchRule::append_components(FormDict& locals, ComponentList& components, bool def_flag) const {
3896   assert (_name != NULL, "MatchNode::build_components encountered empty node\n");
3897 
3898   MatchNode::append_components(locals, components,
3899                                false /* not necessarily a def */);
3900 }
3901 
3902 // Recursive call on all operands' match rules in my match rule.
3903 // Implementation does not modify state of internal structures  since they
3904 // can be shared.
3905 // The MatchNode that is called first treats its
3906 bool MatchRule::base_operand(uint &position0, FormDict &globals,
3907                              const char *&result, const char * &name,
3908                              const char * &opType)const{
3909   uint position = position0;
3910 
3911   return (MatchNode::base_operand( position, globals, result, name, opType));
3912 }
3913 
3914 
3915 bool MatchRule::is_base_register(FormDict &globals) const {
3916   uint   position = 1;
3917   const char  *result   = NULL;
3918   const char  *name     = NULL;
3919   const char  *opType   = NULL;
3920   if (!base_operand(position, globals, result, name, opType)) {
3921     position = 0;
3922     if( base_operand(position, globals, result, name, opType) &&
3923         (strcmp(opType,"RegI")==0 ||
3924          strcmp(opType,"RegP")==0 ||
3925          strcmp(opType,"RegN")==0 ||
3926          strcmp(opType,"RegL")==0 ||
3927          strcmp(opType,"RegF")==0 ||
3928          strcmp(opType,"RegD")==0 ||
3929          strcmp(opType,"VecS")==0 ||
3930          strcmp(opType,"VecD")==0 ||
3931          strcmp(opType,"VecX")==0 ||
3932          strcmp(opType,"VecY")==0 ||
3933          strcmp(opType,"VecZ")==0 ||
3934          strcmp(opType,"Reg" )==0) ) {
3935       return 1;
3936     }
3937   }
3938   return 0;
3939 }
3940 
3941 Form::DataType MatchRule::is_base_constant(FormDict &globals) const {
3942   uint         position = 1;
3943   const char  *result   = NULL;
3944   const char  *name     = NULL;
3945   const char  *opType   = NULL;
3946   if (!base_operand(position, globals, result, name, opType)) {
3947     position = 0;
3948     if (base_operand(position, globals, result, name, opType)) {
3949       return ideal_to_const_type(opType);
3950     }
3951   }
3952   return Form::none;
3953 }
3954 
3955 bool MatchRule::is_chain_rule(FormDict &globals) const {
3956 
3957   // Check for chain rule, and do not generate a match list for it
3958   if ((_lChild == NULL) && (_rChild == NULL) ) {
3959     const Form *form = globals[_opType];
3960     // If this is ideal, then it is a base match, not a chain rule.
3961     if ( form && form->is_operand() && (!form->ideal_only())) {
3962       return true;
3963     }
3964   }
3965   // Check for "Set" form of chain rule, and do not generate a match list
3966   if (_rChild) {
3967     const char *rch = _rChild->_opType;
3968     const Form *form = globals[rch];
3969     if ((!strcmp(_opType,"Set") &&
3970          ((form) && form->is_operand()))) {
3971       return true;
3972     }
3973   }
3974   return false;
3975 }
3976 
3977 int MatchRule::is_ideal_copy() const {
3978   if( _rChild ) {
3979     const char  *opType = _rChild->_opType;
3980 #if 1
3981     if( strcmp(opType,"CastIP")==0 )
3982       return 1;
3983 #else
3984     if( strcmp(opType,"CastII")==0 )
3985       return 1;
3986     // Do not treat *CastPP this way, because it
3987     // may transfer a raw pointer to an oop.
3988     // If the register allocator were to coalesce this
3989     // into a single LRG, the GC maps would be incorrect.
3990     //if( strcmp(opType,"CastPP")==0 )
3991     //  return 1;
3992     //if( strcmp(opType,"CheckCastPP")==0 )
3993     //  return 1;
3994     //
3995     // Do not treat CastX2P or CastP2X this way, because
3996     // raw pointers and int types are treated differently
3997     // when saving local & stack info for safepoints in
3998     // Output().
3999     //if( strcmp(opType,"CastX2P")==0 )
4000     //  return 1;
4001     //if( strcmp(opType,"CastP2X")==0 )
4002     //  return 1;
4003 #endif
4004   }
4005   if( is_chain_rule(_AD.globalNames()) &&
4006       _lChild && strncmp(_lChild->_opType,"stackSlot",9)==0 )
4007     return 1;
4008   return 0;
4009 }
4010 
4011 
4012 int MatchRule::is_expensive() const {
4013   if( _rChild ) {
4014     const char  *opType = _rChild->_opType;
4015     if( strcmp(opType,"AtanD")==0 ||
4016         strcmp(opType,"DivD")==0 ||
4017         strcmp(opType,"DivF")==0 ||
4018         strcmp(opType,"DivI")==0 ||
4019         strcmp(opType,"Log10D")==0 ||
4020         strcmp(opType,"ModD")==0 ||
4021         strcmp(opType,"ModF")==0 ||
4022         strcmp(opType,"ModI")==0 ||
4023         strcmp(opType,"SqrtD")==0 ||
4024         strcmp(opType,"TanD")==0 ||
4025         strcmp(opType,"ConvD2F")==0 ||
4026         strcmp(opType,"ConvD2I")==0 ||
4027         strcmp(opType,"ConvD2L")==0 ||
4028         strcmp(opType,"ConvF2D")==0 ||
4029         strcmp(opType,"ConvF2I")==0 ||
4030         strcmp(opType,"ConvF2L")==0 ||
4031         strcmp(opType,"ConvI2D")==0 ||
4032         strcmp(opType,"ConvI2F")==0 ||
4033         strcmp(opType,"ConvI2L")==0 ||
4034         strcmp(opType,"ConvL2D")==0 ||
4035         strcmp(opType,"ConvL2F")==0 ||
4036         strcmp(opType,"ConvL2I")==0 ||
4037         strcmp(opType,"DecodeN")==0 ||
4038         strcmp(opType,"EncodeP")==0 ||
4039         strcmp(opType,"EncodePKlass")==0 ||
4040         strcmp(opType,"DecodeNKlass")==0 ||
4041         strcmp(opType,"RoundDouble")==0 ||
4042         strcmp(opType,"RoundFloat")==0 ||
4043         strcmp(opType,"ReverseBytesI")==0 ||
4044         strcmp(opType,"ReverseBytesL")==0 ||
4045         strcmp(opType,"ReverseBytesUS")==0 ||
4046         strcmp(opType,"ReverseBytesS")==0 ||
4047         strcmp(opType,"ReplicateB")==0 ||
4048         strcmp(opType,"ReplicateS")==0 ||
4049         strcmp(opType,"ReplicateI")==0 ||
4050         strcmp(opType,"ReplicateL")==0 ||
4051         strcmp(opType,"ReplicateF")==0 ||
4052         strcmp(opType,"ReplicateD")==0 ||
4053         strcmp(opType,"AddReductionVI")==0 ||
4054         strcmp(opType,"AddReductionVL")==0 ||
4055         strcmp(opType,"AddReductionVF")==0 ||
4056         strcmp(opType,"AddReductionVD")==0 ||
4057         strcmp(opType,"MulReductionVI")==0 ||
4058         strcmp(opType,"MulReductionVL")==0 ||
4059         strcmp(opType,"MulReductionVF")==0 ||
4060         strcmp(opType,"MulReductionVD")==0 ||
4061         0 /* 0 to line up columns nicely */ )
4062       return 1;
4063   }
4064   return 0;
4065 }
4066 
4067 bool MatchRule::is_ideal_if() const {
4068   if( !_opType ) return false;
4069   return
4070     !strcmp(_opType,"If"            ) ||
4071     !strcmp(_opType,"CountedLoopEnd");
4072 }
4073 
4074 bool MatchRule::is_ideal_fastlock() const {
4075   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4076     return (strcmp(_rChild->_opType,"FastLock") == 0);
4077   }
4078   return false;
4079 }
4080 
4081 bool MatchRule::is_ideal_membar() const {
4082   if( !_opType ) return false;
4083   return
4084     !strcmp(_opType,"MemBarAcquire") ||
4085     !strcmp(_opType,"MemBarRelease") ||
4086     !strcmp(_opType,"MemBarAcquireLock") ||
4087     !strcmp(_opType,"MemBarReleaseLock") ||
4088     !strcmp(_opType,"LoadFence" ) ||
4089     !strcmp(_opType,"StoreFence") ||
4090     !strcmp(_opType,"MemBarVolatile") ||
4091     !strcmp(_opType,"MemBarCPUOrder") ||
4092     !strcmp(_opType,"MemBarStoreStore");
4093 }
4094 
4095 bool MatchRule::is_ideal_loadPC() const {
4096   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4097     return (strcmp(_rChild->_opType,"LoadPC") == 0);
4098   }
4099   return false;
4100 }
4101 
4102 bool MatchRule::is_ideal_box() const {
4103   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4104     return (strcmp(_rChild->_opType,"Box") == 0);
4105   }
4106   return false;
4107 }
4108 
4109 bool MatchRule::is_ideal_goto() const {
4110   bool   ideal_goto = false;
4111 
4112   if( _opType && (strcmp(_opType,"Goto") == 0) ) {
4113     ideal_goto = true;
4114   }
4115   return ideal_goto;
4116 }
4117 
4118 bool MatchRule::is_ideal_jump() const {
4119   if( _opType ) {
4120     if( !strcmp(_opType,"Jump") )
4121       return true;
4122   }
4123   return false;
4124 }
4125 
4126 bool MatchRule::is_ideal_bool() const {
4127   if( _opType ) {
4128     if( !strcmp(_opType,"Bool") )
4129       return true;
4130   }
4131   return false;
4132 }
4133 
4134 
4135 Form::DataType MatchRule::is_ideal_load() const {
4136   Form::DataType ideal_load = Form::none;
4137 
4138   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4139     const char *opType = _rChild->_opType;
4140     ideal_load = is_load_from_memory(opType);
4141   }
4142 
4143   return ideal_load;
4144 }
4145 
4146 bool MatchRule::is_vector() const {
4147   static const char *vector_list[] = {
4148     "AddVB","AddVS","AddVI","AddVL","AddVF","AddVD",
4149     "SubVB","SubVS","SubVI","SubVL","SubVF","SubVD",
4150     "MulVS","MulVI","MulVL","MulVF","MulVD",
4151     "CMoveVD",
4152     "DivVF","DivVD",
4153     "AbsVF","AbsVD",
4154     "NegVF","NegVD",
4155     "SqrtVD",
4156     "AndV" ,"XorV" ,"OrV",
4157     "AddReductionVI", "AddReductionVL",
4158     "AddReductionVF", "AddReductionVD",
4159     "MulReductionVI", "MulReductionVL",
4160     "MulReductionVF", "MulReductionVD",
4161     "LShiftCntV","RShiftCntV",
4162     "LShiftVB","LShiftVS","LShiftVI","LShiftVL",
4163     "RShiftVB","RShiftVS","RShiftVI","RShiftVL",
4164     "URShiftVB","URShiftVS","URShiftVI","URShiftVL",
4165     "ReplicateB","ReplicateS","ReplicateI","ReplicateL","ReplicateF","ReplicateD",
4166     "LoadVector","StoreVector",
4167     // Next are not supported currently.
4168     "PackB","PackS","PackI","PackL","PackF","PackD","Pack2L","Pack2D",
4169     "ExtractB","ExtractUB","ExtractC","ExtractS","ExtractI","ExtractL","ExtractF","ExtractD"
4170   };
4171   int cnt = sizeof(vector_list)/sizeof(char*);
4172   if (_rChild) {
4173     const char  *opType = _rChild->_opType;
4174     for (int i=0; i<cnt; i++)
4175       if (strcmp(opType,vector_list[i]) == 0)
4176         return true;
4177   }
4178   return false;
4179 }
4180 
4181 
4182 bool MatchRule::skip_antidep_check() const {
4183   // Some loads operate on what is effectively immutable memory so we
4184   // should skip the anti dep computations.  For some of these nodes
4185   // the rewritable field keeps the anti dep logic from triggering but
4186   // for certain kinds of LoadKlass it does not since they are
4187   // actually reading memory which could be rewritten by the runtime,
4188   // though never by generated code.  This disables it uniformly for
4189   // the nodes that behave like this: LoadKlass, LoadNKlass and
4190   // LoadRange.
4191   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4192     const char *opType = _rChild->_opType;
4193     if (strcmp("LoadKlass", opType) == 0 ||
4194         strcmp("LoadNKlass", opType) == 0 ||
4195         strcmp("LoadRange", opType) == 0) {
4196       return true;
4197     }
4198   }
4199 
4200   return false;
4201 }
4202 
4203 
4204 Form::DataType MatchRule::is_ideal_store() const {
4205   Form::DataType ideal_store = Form::none;
4206 
4207   if ( _opType && (strcmp(_opType,"Set") == 0) && _rChild ) {
4208     const char *opType = _rChild->_opType;
4209     ideal_store = is_store_to_memory(opType);
4210   }
4211 
4212   return ideal_store;
4213 }
4214 
4215 
4216 void MatchRule::dump() {
4217   output(stderr);
4218 }
4219 
4220 // Write just one line.
4221 void MatchRule::output_short(FILE *fp) {
4222   fprintf(fp,"MatchRule: ( %s",_name);
4223   if (_lChild) _lChild->output(fp);
4224   if (_rChild) _rChild->output(fp);
4225   fprintf(fp," )");
4226 }
4227 
4228 void MatchRule::output(FILE *fp) {
4229   output_short(fp);
4230   fprintf(fp,"\n   nesting depth = %d\n", _depth);
4231   if (_result) fprintf(fp,"   Result Type = %s", _result);
4232   fprintf(fp,"\n");
4233 }
4234 
4235 //------------------------------Attribute--------------------------------------
4236 Attribute::Attribute(char *id, char* val, int type)
4237   : _ident(id), _val(val), _atype(type) {
4238 }
4239 Attribute::~Attribute() {
4240 }
4241 
4242 int Attribute::int_val(ArchDesc &ad) {
4243   // Make sure it is an integer constant:
4244   int result = 0;
4245   if (!_val || !ADLParser::is_int_token(_val, result)) {
4246     ad.syntax_err(0, "Attribute %s must have an integer value: %s",
4247                   _ident, _val ? _val : "");
4248   }
4249   return result;
4250 }
4251 
4252 void Attribute::dump() {
4253   output(stderr);
4254 } // Debug printer
4255 
4256 // Write to output files
4257 void Attribute::output(FILE *fp) {
4258   fprintf(fp,"Attribute: %s  %s\n", (_ident?_ident:""), (_val?_val:""));
4259 }
4260 
4261 //------------------------------FormatRule----------------------------------
4262 FormatRule::FormatRule(char *temp)
4263   : _temp(temp) {
4264 }
4265 FormatRule::~FormatRule() {
4266 }
4267 
4268 void FormatRule::dump() {
4269   output(stderr);
4270 }
4271 
4272 // Write to output files
4273 void FormatRule::output(FILE *fp) {
4274   fprintf(fp,"\nFormat Rule: \n%s", (_temp?_temp:""));
4275   fprintf(fp,"\n");
4276 }