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