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