1 /*
   2  * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #ifndef SHARE_C1_C1_INSTRUCTION_HPP
  26 #define SHARE_C1_C1_INSTRUCTION_HPP
  27 
  28 #include "c1/c1_Compilation.hpp"
  29 #include "c1/c1_LIR.hpp"
  30 #include "c1/c1_ValueType.hpp"
  31 #include "ci/ciField.hpp"
  32 
  33 // Predefined classes
  34 class ciField;
  35 class ValueStack;
  36 class InstructionPrinter;
  37 class IRScope;
  38 class LIR_OprDesc;
  39 typedef LIR_OprDesc* LIR_Opr;
  40 
  41 
  42 // Instruction class hierarchy
  43 //
  44 // All leaf classes in the class hierarchy are concrete classes
  45 // (i.e., are instantiated). All other classes are abstract and
  46 // serve factoring.
  47 
  48 class Instruction;
  49 class   Phi;
  50 class   Local;
  51 class   Constant;
  52 class   AccessField;
  53 class     LoadField;
  54 class     StoreField;
  55 class   AccessArray;
  56 class     ArrayLength;
  57 class     AccessIndexed;
  58 class       LoadIndexed;
  59 class       StoreIndexed;
  60 class   NegateOp;
  61 class   Op2;
  62 class     ArithmeticOp;
  63 class     ShiftOp;
  64 class     LogicOp;
  65 class     CompareOp;
  66 class     IfOp;
  67 class   Convert;
  68 class   NullCheck;
  69 class   TypeCast;
  70 class   OsrEntry;
  71 class   ExceptionObject;
  72 class   StateSplit;
  73 class     Invoke;
  74 class     NewInstance;
  75 class     NewValueTypeInstance;
  76 class     NewArray;
  77 class       NewTypeArray;
  78 class       NewObjectArray;
  79 class       NewMultiArray;
  80 class     TypeCheck;
  81 class       CheckCast;
  82 class       InstanceOf;
  83 class     AccessMonitor;
  84 class       MonitorEnter;
  85 class       MonitorExit;
  86 class     Intrinsic;
  87 class     BlockBegin;
  88 class     BlockEnd;
  89 class       Goto;
  90 class       If;
  91 class       IfInstanceOf;
  92 class       Switch;
  93 class         TableSwitch;
  94 class         LookupSwitch;
  95 class       Return;
  96 class       Throw;
  97 class       Base;
  98 class   RoundFP;
  99 class   UnsafeOp;
 100 class     UnsafeRawOp;
 101 class       UnsafeGetRaw;
 102 class       UnsafePutRaw;
 103 class     UnsafeObjectOp;
 104 class       UnsafeGetObject;
 105 class       UnsafePutObject;
 106 class         UnsafeGetAndSetObject;
 107 class   ProfileCall;
 108 class   ProfileReturnType;
 109 class   ProfileInvoke;
 110 class   RuntimeCall;
 111 class   MemBar;
 112 class   RangeCheckPredicate;
 113 #ifdef ASSERT
 114 class   Assert;
 115 #endif
 116 
 117 // A Value is a reference to the instruction creating the value
 118 typedef Instruction* Value;
 119 typedef GrowableArray<Value> Values;
 120 typedef GrowableArray<ValueStack*> ValueStackStack;
 121 
 122 // BlockClosure is the base class for block traversal/iteration.
 123 
 124 class BlockClosure: public CompilationResourceObj {
 125  public:
 126   virtual void block_do(BlockBegin* block)       = 0;
 127 };
 128 
 129 
 130 // A simple closure class for visiting the values of an Instruction
 131 class ValueVisitor: public StackObj {
 132  public:
 133   virtual void visit(Value* v) = 0;
 134 };
 135 
 136 
 137 // Some array and list classes
 138 typedef GrowableArray<BlockBegin*> BlockBeginArray;
 139 
 140 class BlockList: public GrowableArray<BlockBegin*> {
 141  public:
 142   BlockList(): GrowableArray<BlockBegin*>() {}
 143   BlockList(const int size): GrowableArray<BlockBegin*>(size) {}
 144   BlockList(const int size, BlockBegin* init): GrowableArray<BlockBegin*>(size, size, init) {}
 145 
 146   void iterate_forward(BlockClosure* closure);
 147   void iterate_backward(BlockClosure* closure);
 148   void blocks_do(void f(BlockBegin*));
 149   void values_do(ValueVisitor* f);
 150   void print(bool cfg_only = false, bool live_only = false) PRODUCT_RETURN;
 151 };
 152 
 153 
 154 // InstructionVisitors provide type-based dispatch for instructions.
 155 // For each concrete Instruction class X, a virtual function do_X is
 156 // provided. Functionality that needs to be implemented for all classes
 157 // (e.g., printing, code generation) is factored out into a specialised
 158 // visitor instead of added to the Instruction classes itself.
 159 
 160 class InstructionVisitor: public StackObj {
 161  public:
 162   virtual void do_Phi            (Phi*             x) = 0;
 163   virtual void do_Local          (Local*           x) = 0;
 164   virtual void do_Constant       (Constant*        x) = 0;
 165   virtual void do_LoadField      (LoadField*       x) = 0;
 166   virtual void do_StoreField     (StoreField*      x) = 0;
 167   virtual void do_ArrayLength    (ArrayLength*     x) = 0;
 168   virtual void do_LoadIndexed    (LoadIndexed*     x) = 0;
 169   virtual void do_StoreIndexed   (StoreIndexed*    x) = 0;
 170   virtual void do_NegateOp       (NegateOp*        x) = 0;
 171   virtual void do_ArithmeticOp   (ArithmeticOp*    x) = 0;
 172   virtual void do_ShiftOp        (ShiftOp*         x) = 0;
 173   virtual void do_LogicOp        (LogicOp*         x) = 0;
 174   virtual void do_CompareOp      (CompareOp*       x) = 0;
 175   virtual void do_IfOp           (IfOp*            x) = 0;
 176   virtual void do_Convert        (Convert*         x) = 0;
 177   virtual void do_NullCheck      (NullCheck*       x) = 0;
 178   virtual void do_TypeCast       (TypeCast*        x) = 0;
 179   virtual void do_Invoke         (Invoke*          x) = 0;
 180   virtual void do_NewInstance    (NewInstance*     x) = 0;
 181   virtual void do_NewValueTypeInstance(NewValueTypeInstance* x) = 0;
 182   virtual void do_NewTypeArray   (NewTypeArray*    x) = 0;
 183   virtual void do_NewObjectArray (NewObjectArray*  x) = 0;
 184   virtual void do_NewMultiArray  (NewMultiArray*   x) = 0;
 185   virtual void do_CheckCast      (CheckCast*       x) = 0;
 186   virtual void do_InstanceOf     (InstanceOf*      x) = 0;
 187   virtual void do_MonitorEnter   (MonitorEnter*    x) = 0;
 188   virtual void do_MonitorExit    (MonitorExit*     x) = 0;
 189   virtual void do_Intrinsic      (Intrinsic*       x) = 0;
 190   virtual void do_BlockBegin     (BlockBegin*      x) = 0;
 191   virtual void do_Goto           (Goto*            x) = 0;
 192   virtual void do_If             (If*              x) = 0;
 193   virtual void do_IfInstanceOf   (IfInstanceOf*    x) = 0;
 194   virtual void do_TableSwitch    (TableSwitch*     x) = 0;
 195   virtual void do_LookupSwitch   (LookupSwitch*    x) = 0;
 196   virtual void do_Return         (Return*          x) = 0;
 197   virtual void do_Throw          (Throw*           x) = 0;
 198   virtual void do_Base           (Base*            x) = 0;
 199   virtual void do_OsrEntry       (OsrEntry*        x) = 0;
 200   virtual void do_ExceptionObject(ExceptionObject* x) = 0;
 201   virtual void do_RoundFP        (RoundFP*         x) = 0;
 202   virtual void do_UnsafeGetRaw   (UnsafeGetRaw*    x) = 0;
 203   virtual void do_UnsafePutRaw   (UnsafePutRaw*    x) = 0;
 204   virtual void do_UnsafeGetObject(UnsafeGetObject* x) = 0;
 205   virtual void do_UnsafePutObject(UnsafePutObject* x) = 0;
 206   virtual void do_UnsafeGetAndSetObject(UnsafeGetAndSetObject* x) = 0;
 207   virtual void do_ProfileCall    (ProfileCall*     x) = 0;
 208   virtual void do_ProfileReturnType (ProfileReturnType*  x) = 0;
 209   virtual void do_ProfileInvoke  (ProfileInvoke*   x) = 0;
 210   virtual void do_RuntimeCall    (RuntimeCall*     x) = 0;
 211   virtual void do_MemBar         (MemBar*          x) = 0;
 212   virtual void do_RangeCheckPredicate(RangeCheckPredicate* x) = 0;
 213 #ifdef ASSERT
 214   virtual void do_Assert         (Assert*          x) = 0;
 215 #endif
 216 };
 217 
 218 
 219 // Hashing support
 220 //
 221 // Note: This hash functions affect the performance
 222 //       of ValueMap - make changes carefully!
 223 
 224 #define HASH1(x1            )                    ((intx)(x1))
 225 #define HASH2(x1, x2        )                    ((HASH1(x1        ) << 7) ^ HASH1(x2))
 226 #define HASH3(x1, x2, x3    )                    ((HASH2(x1, x2    ) << 7) ^ HASH1(x3))
 227 #define HASH4(x1, x2, x3, x4)                    ((HASH3(x1, x2, x3) << 7) ^ HASH1(x4))
 228 
 229 
 230 // The following macros are used to implement instruction-specific hashing.
 231 // By default, each instruction implements hash() and is_equal(Value), used
 232 // for value numbering/common subexpression elimination. The default imple-
 233 // mentation disables value numbering. Each instruction which can be value-
 234 // numbered, should define corresponding hash() and is_equal(Value) functions
 235 // via the macros below. The f arguments specify all the values/op codes, etc.
 236 // that need to be identical for two instructions to be identical.
 237 //
 238 // Note: The default implementation of hash() returns 0 in order to indicate
 239 //       that the instruction should not be considered for value numbering.
 240 //       The currently used hash functions do not guarantee that never a 0
 241 //       is produced. While this is still correct, it may be a performance
 242 //       bug (no value numbering for that node). However, this situation is
 243 //       so unlikely, that we are not going to handle it specially.
 244 
 245 #define HASHING1(class_name, enabled, f1)             \
 246   virtual intx hash() const {                         \
 247     return (enabled) ? HASH2(name(), f1) : 0;         \
 248   }                                                   \
 249   virtual bool is_equal(Value v) const {              \
 250     if (!(enabled)  ) return false;                   \
 251     class_name* _v = v->as_##class_name();            \
 252     if (_v == NULL  ) return false;                   \
 253     if (f1 != _v->f1) return false;                   \
 254     return true;                                      \
 255   }                                                   \
 256 
 257 
 258 #define HASHING2(class_name, enabled, f1, f2)         \
 259   virtual intx hash() const {                         \
 260     return (enabled) ? HASH3(name(), f1, f2) : 0;     \
 261   }                                                   \
 262   virtual bool is_equal(Value v) const {              \
 263     if (!(enabled)  ) return false;                   \
 264     class_name* _v = v->as_##class_name();            \
 265     if (_v == NULL  ) return false;                   \
 266     if (f1 != _v->f1) return false;                   \
 267     if (f2 != _v->f2) return false;                   \
 268     return true;                                      \
 269   }                                                   \
 270 
 271 
 272 #define HASHING3(class_name, enabled, f1, f2, f3)     \
 273   virtual intx hash() const {                          \
 274     return (enabled) ? HASH4(name(), f1, f2, f3) : 0; \
 275   }                                                   \
 276   virtual bool is_equal(Value v) const {              \
 277     if (!(enabled)  ) return false;                   \
 278     class_name* _v = v->as_##class_name();            \
 279     if (_v == NULL  ) return false;                   \
 280     if (f1 != _v->f1) return false;                   \
 281     if (f2 != _v->f2) return false;                   \
 282     if (f3 != _v->f3) return false;                   \
 283     return true;                                      \
 284   }                                                   \
 285 
 286 
 287 // The mother of all instructions...
 288 
 289 class Instruction: public CompilationResourceObj {
 290  private:
 291   int          _id;                              // the unique instruction id
 292 #ifndef PRODUCT
 293   int          _printable_bci;                   // the bci of the instruction for printing
 294 #endif
 295   int          _use_count;                       // the number of instructions refering to this value (w/o prev/next); only roots can have use count = 0 or > 1
 296   int          _pin_state;                       // set of PinReason describing the reason for pinning
 297   ValueType*   _type;                            // the instruction value type
 298   Instruction* _next;                            // the next instruction if any (NULL for BlockEnd instructions)
 299   Instruction* _subst;                           // the substitution instruction if any
 300   LIR_Opr      _operand;                         // LIR specific information
 301   unsigned int _flags;                           // Flag bits
 302 
 303   ValueStack*  _state_before;                    // Copy of state with input operands still on stack (or NULL)
 304   ValueStack*  _exception_state;                 // Copy of state for exception handling
 305   XHandlers*   _exception_handlers;              // Flat list of exception handlers covering this instruction
 306 
 307   friend class UseCountComputer;
 308   friend class BlockBegin;
 309 
 310   void update_exception_state(ValueStack* state);
 311 
 312  protected:
 313   BlockBegin*  _block;                           // Block that contains this instruction
 314 
 315   void set_type(ValueType* type) {
 316     assert(type != NULL, "type must exist");
 317     _type = type;
 318   }
 319 
 320   // Helper class to keep track of which arguments need a null check
 321   class ArgsNonNullState {
 322   private:
 323     int _nonnull_state; // mask identifying which args are nonnull
 324   public:
 325     ArgsNonNullState()
 326       : _nonnull_state(AllBits) {}
 327 
 328     // Does argument number i needs a null check?
 329     bool arg_needs_null_check(int i) const {
 330       // No data is kept for arguments starting at position 33 so
 331       // conservatively assume that they need a null check.
 332       if (i >= 0 && i < (int)sizeof(_nonnull_state) * BitsPerByte) {
 333         return is_set_nth_bit(_nonnull_state, i);
 334       }
 335       return true;
 336     }
 337 
 338     // Set whether argument number i needs a null check or not
 339     void set_arg_needs_null_check(int i, bool check) {
 340       if (i >= 0 && i < (int)sizeof(_nonnull_state) * BitsPerByte) {
 341         if (check) {
 342           _nonnull_state |= nth_bit(i);
 343         } else {
 344           _nonnull_state &= ~(nth_bit(i));
 345         }
 346       }
 347     }
 348   };
 349 
 350  public:
 351   void* operator new(size_t size) throw() {
 352     Compilation* c = Compilation::current();
 353     void* res = c->arena()->Amalloc(size);
 354     ((Instruction*)res)->_id = c->get_next_id();
 355     return res;
 356   }
 357 
 358   static const int no_bci = -99;
 359 
 360   enum InstructionFlag {
 361     NeedsNullCheckFlag = 0,
 362     CanTrapFlag,
 363     DirectCompareFlag,
 364     IsEliminatedFlag,
 365     IsSafepointFlag,
 366     IsStaticFlag,
 367     IsStrictfpFlag,
 368     NeedsStoreCheckFlag,
 369     NeedsWriteBarrierFlag,
 370     PreservesStateFlag,
 371     TargetIsFinalFlag,
 372     TargetIsLoadedFlag,
 373     TargetIsStrictfpFlag,
 374     UnorderedIsTrueFlag,
 375     NeedsPatchingFlag,
 376     ThrowIncompatibleClassChangeErrorFlag,
 377     InvokeSpecialReceiverCheckFlag,
 378     ProfileMDOFlag,
 379     IsLinkedInBlockFlag,
 380     NeedsRangeCheckFlag,
 381     InWorkListFlag,
 382     DeoptimizeOnException,
 383     InstructionLastFlag
 384   };
 385 
 386  public:
 387   bool check_flag(InstructionFlag id) const      { return (_flags & (1 << id)) != 0;    }
 388   void set_flag(InstructionFlag id, bool f)      { _flags = f ? (_flags | (1 << id)) : (_flags & ~(1 << id)); };
 389 
 390   // 'globally' used condition values
 391   enum Condition {
 392     eql, neq, lss, leq, gtr, geq, aeq, beq
 393   };
 394 
 395   // Instructions may be pinned for many reasons and under certain conditions
 396   // with enough knowledge it's possible to safely unpin them.
 397   enum PinReason {
 398       PinUnknown           = 1 << 0
 399     , PinExplicitNullCheck = 1 << 3
 400     , PinStackForStateSplit= 1 << 12
 401     , PinStateSplitConstructor= 1 << 13
 402     , PinGlobalValueNumbering= 1 << 14
 403   };
 404 
 405   static Condition mirror(Condition cond);
 406   static Condition negate(Condition cond);
 407 
 408   // initialization
 409   static int number_of_instructions() {
 410     return Compilation::current()->number_of_instructions();
 411   }
 412 
 413   // creation
 414   Instruction(ValueType* type, ValueStack* state_before = NULL, bool type_is_constant = false)
 415   :
 416 #ifndef PRODUCT
 417   _printable_bci(-99),
 418 #endif
 419     _use_count(0)
 420   , _pin_state(0)
 421   , _type(type)
 422   , _next(NULL)
 423   , _subst(NULL)
 424   , _operand(LIR_OprFact::illegalOpr)
 425   , _flags(0)
 426   , _state_before(state_before)
 427   , _exception_handlers(NULL)
 428   , _block(NULL)
 429   {
 430     check_state(state_before);
 431     assert(type != NULL && (!type->is_constant() || type_is_constant), "type must exist");
 432     update_exception_state(_state_before);
 433   }
 434 
 435   // accessors
 436   int id() const                                 { return _id; }
 437 #ifndef PRODUCT
 438   bool has_printable_bci() const                 { return _printable_bci != -99; }
 439   int printable_bci() const                      { assert(has_printable_bci(), "_printable_bci should have been set"); return _printable_bci; }
 440   void set_printable_bci(int bci)                { _printable_bci = bci; }
 441 #endif
 442   int dominator_depth();
 443   int use_count() const                          { return _use_count; }
 444   int pin_state() const                          { return _pin_state; }
 445   bool is_pinned() const                         { return _pin_state != 0 || PinAllInstructions; }
 446   ValueType* type() const                        { return _type; }
 447   BlockBegin *block() const                      { return _block; }
 448   Instruction* prev();                           // use carefully, expensive operation
 449   Instruction* next() const                      { return _next; }
 450   bool has_subst() const                         { return _subst != NULL; }
 451   Instruction* subst()                           { return _subst == NULL ? this : _subst->subst(); }
 452   LIR_Opr operand() const                        { return _operand; }
 453 
 454   void set_needs_null_check(bool f)              { set_flag(NeedsNullCheckFlag, f); }
 455   bool needs_null_check() const                  { return check_flag(NeedsNullCheckFlag); }
 456   bool is_linked() const                         { return check_flag(IsLinkedInBlockFlag); }
 457   bool can_be_linked()                           { return as_Local() == NULL && as_Phi() == NULL; }
 458 
 459   bool has_uses() const                          { return use_count() > 0; }
 460   ValueStack* state_before() const               { return _state_before; }
 461   ValueStack* exception_state() const            { return _exception_state; }
 462   virtual bool needs_exception_state() const     { return true; }
 463   XHandlers* exception_handlers() const          { return _exception_handlers; }
 464 
 465   // manipulation
 466   void pin(PinReason reason)                     { _pin_state |= reason; }
 467   void pin()                                     { _pin_state |= PinUnknown; }
 468   // DANGEROUS: only used by EliminateStores
 469   void unpin(PinReason reason)                   { assert((reason & PinUnknown) == 0, "can't unpin unknown state"); _pin_state &= ~reason; }
 470 
 471   Instruction* set_next(Instruction* next) {
 472     assert(next->has_printable_bci(), "_printable_bci should have been set");
 473     assert(next != NULL, "must not be NULL");
 474     assert(as_BlockEnd() == NULL, "BlockEnd instructions must have no next");
 475     assert(next->can_be_linked(), "shouldn't link these instructions into list");
 476 
 477     BlockBegin *block = this->block();
 478     next->_block = block;
 479 
 480     next->set_flag(Instruction::IsLinkedInBlockFlag, true);
 481     _next = next;
 482     return next;
 483   }
 484 
 485   Instruction* set_next(Instruction* next, int bci) {
 486 #ifndef PRODUCT
 487     next->set_printable_bci(bci);
 488 #endif
 489     return set_next(next);
 490   }
 491 
 492   // when blocks are merged
 493   void fixup_block_pointers() {
 494     Instruction *cur = next()->next(); // next()'s block is set in set_next
 495     while (cur && cur->_block != block()) {
 496       cur->_block = block();
 497       cur = cur->next();
 498     }
 499   }
 500 
 501   Instruction *insert_after(Instruction *i) {
 502     Instruction* n = _next;
 503     set_next(i);
 504     i->set_next(n);
 505     return _next;
 506   }
 507 
 508   bool is_flattened_array() const;             // FIXME -- remove it
 509 
 510   bool is_loaded_flattened_array() const;
 511   bool maybe_flattened_array() const;
 512 
 513   Instruction *insert_after_same_bci(Instruction *i) {
 514 #ifndef PRODUCT
 515     i->set_printable_bci(printable_bci());
 516 #endif
 517     return insert_after(i);
 518   }
 519 
 520   void set_subst(Instruction* subst)             {
 521     assert(subst == NULL ||
 522            type()->base() == subst->type()->base() ||
 523            subst->type()->base() == illegalType, "type can't change");
 524     _subst = subst;
 525   }
 526   void set_exception_handlers(XHandlers *xhandlers) { _exception_handlers = xhandlers; }
 527   void set_exception_state(ValueStack* s)        { check_state(s); _exception_state = s; }
 528   void set_state_before(ValueStack* s)           { check_state(s); _state_before = s; }
 529 
 530   // machine-specifics
 531   void set_operand(LIR_Opr operand)              { assert(operand != LIR_OprFact::illegalOpr, "operand must exist"); _operand = operand; }
 532   void clear_operand()                           { _operand = LIR_OprFact::illegalOpr; }
 533 
 534   // generic
 535   virtual Instruction*      as_Instruction()     { return this; } // to satisfy HASHING1 macro
 536   virtual Phi*              as_Phi()             { return NULL; }
 537   virtual Local*            as_Local()           { return NULL; }
 538   virtual Constant*         as_Constant()        { return NULL; }
 539   virtual AccessField*      as_AccessField()     { return NULL; }
 540   virtual LoadField*        as_LoadField()       { return NULL; }
 541   virtual StoreField*       as_StoreField()      { return NULL; }
 542   virtual AccessArray*      as_AccessArray()     { return NULL; }
 543   virtual ArrayLength*      as_ArrayLength()     { return NULL; }
 544   virtual AccessIndexed*    as_AccessIndexed()   { return NULL; }
 545   virtual LoadIndexed*      as_LoadIndexed()     { return NULL; }
 546   virtual StoreIndexed*     as_StoreIndexed()    { return NULL; }
 547   virtual NegateOp*         as_NegateOp()        { return NULL; }
 548   virtual Op2*              as_Op2()             { return NULL; }
 549   virtual ArithmeticOp*     as_ArithmeticOp()    { return NULL; }
 550   virtual ShiftOp*          as_ShiftOp()         { return NULL; }
 551   virtual LogicOp*          as_LogicOp()         { return NULL; }
 552   virtual CompareOp*        as_CompareOp()       { return NULL; }
 553   virtual IfOp*             as_IfOp()            { return NULL; }
 554   virtual Convert*          as_Convert()         { return NULL; }
 555   virtual NullCheck*        as_NullCheck()       { return NULL; }
 556   virtual OsrEntry*         as_OsrEntry()        { return NULL; }
 557   virtual StateSplit*       as_StateSplit()      { return NULL; }
 558   virtual Invoke*           as_Invoke()          { return NULL; }
 559   virtual NewInstance*      as_NewInstance()     { return NULL; }
 560   virtual NewValueTypeInstance* as_NewValueTypeInstance() { return NULL; }
 561   virtual NewArray*         as_NewArray()        { return NULL; }
 562   virtual NewTypeArray*     as_NewTypeArray()    { return NULL; }
 563   virtual NewObjectArray*   as_NewObjectArray()  { return NULL; }
 564   virtual NewMultiArray*    as_NewMultiArray()   { return NULL; }
 565   virtual TypeCheck*        as_TypeCheck()       { return NULL; }
 566   virtual CheckCast*        as_CheckCast()       { return NULL; }
 567   virtual InstanceOf*       as_InstanceOf()      { return NULL; }
 568   virtual TypeCast*         as_TypeCast()        { return NULL; }
 569   virtual AccessMonitor*    as_AccessMonitor()   { return NULL; }
 570   virtual MonitorEnter*     as_MonitorEnter()    { return NULL; }
 571   virtual MonitorExit*      as_MonitorExit()     { return NULL; }
 572   virtual Intrinsic*        as_Intrinsic()       { return NULL; }
 573   virtual BlockBegin*       as_BlockBegin()      { return NULL; }
 574   virtual BlockEnd*         as_BlockEnd()        { return NULL; }
 575   virtual Goto*             as_Goto()            { return NULL; }
 576   virtual If*               as_If()              { return NULL; }
 577   virtual IfInstanceOf*     as_IfInstanceOf()    { return NULL; }
 578   virtual TableSwitch*      as_TableSwitch()     { return NULL; }
 579   virtual LookupSwitch*     as_LookupSwitch()    { return NULL; }
 580   virtual Return*           as_Return()          { return NULL; }
 581   virtual Throw*            as_Throw()           { return NULL; }
 582   virtual Base*             as_Base()            { return NULL; }
 583   virtual RoundFP*          as_RoundFP()         { return NULL; }
 584   virtual ExceptionObject*  as_ExceptionObject() { return NULL; }
 585   virtual UnsafeOp*         as_UnsafeOp()        { return NULL; }
 586   virtual ProfileInvoke*    as_ProfileInvoke()   { return NULL; }
 587   virtual RangeCheckPredicate* as_RangeCheckPredicate() { return NULL; }
 588 
 589 #ifdef ASSERT
 590   virtual Assert*           as_Assert()          { return NULL; }
 591 #endif
 592 
 593   virtual void visit(InstructionVisitor* v)      = 0;
 594 
 595   virtual bool can_trap() const                  { return false; }
 596 
 597   virtual void input_values_do(ValueVisitor* f)   = 0;
 598   virtual void state_values_do(ValueVisitor* f);
 599   virtual void other_values_do(ValueVisitor* f)   { /* usually no other - override on demand */ }
 600           void       values_do(ValueVisitor* f)   { input_values_do(f); state_values_do(f); other_values_do(f); }
 601 
 602   virtual ciType* exact_type() const;
 603   virtual ciType* declared_type() const          { return NULL; }
 604 
 605   // hashing
 606   virtual const char* name() const               = 0;
 607   HASHING1(Instruction, false, id())             // hashing disabled by default
 608 
 609   // debugging
 610   static void check_state(ValueStack* state)     PRODUCT_RETURN;
 611   void print()                                   PRODUCT_RETURN;
 612   void print_line()                              PRODUCT_RETURN;
 613   void print(InstructionPrinter& ip)             PRODUCT_RETURN;
 614 };
 615 
 616 
 617 // The following macros are used to define base (i.e., non-leaf)
 618 // and leaf instruction classes. They define class-name related
 619 // generic functionality in one place.
 620 
 621 #define BASE(class_name, super_class_name)       \
 622   class class_name: public super_class_name {    \
 623    public:                                       \
 624     virtual class_name* as_##class_name()        { return this; }              \
 625 
 626 
 627 #define LEAF(class_name, super_class_name)       \
 628   BASE(class_name, super_class_name)             \
 629    public:                                       \
 630     virtual const char* name() const             { return #class_name; }       \
 631     virtual void visit(InstructionVisitor* v)    { v->do_##class_name(this); } \
 632 
 633 
 634 // Debugging support
 635 
 636 
 637 #ifdef ASSERT
 638 class AssertValues: public ValueVisitor {
 639   void visit(Value* x)             { assert((*x) != NULL, "value must exist"); }
 640 };
 641   #define ASSERT_VALUES                          { AssertValues assert_value; values_do(&assert_value); }
 642 #else
 643   #define ASSERT_VALUES
 644 #endif // ASSERT
 645 
 646 
 647 // A Phi is a phi function in the sense of SSA form. It stands for
 648 // the value of a local variable at the beginning of a join block.
 649 // A Phi consists of n operands, one for every incoming branch.
 650 
 651 LEAF(Phi, Instruction)
 652  private:
 653   int         _pf_flags; // the flags of the phi function
 654   int         _index;    // to value on operand stack (index < 0) or to local
 655   ciType*     _exact_type; // currently is set only for flattened arrays, NULL otherwise.
 656  public:
 657   // creation
 658   Phi(ValueType* type, BlockBegin* b, int index, ciType* exact_type)
 659   : Instruction(type->base())
 660   , _pf_flags(0)
 661   , _index(index)
 662   , _exact_type(exact_type)
 663   {
 664     _block = b;
 665     NOT_PRODUCT(set_printable_bci(Value(b)->printable_bci()));
 666     if (type->is_illegal()) {
 667       make_illegal();
 668     }
 669   }
 670 
 671   virtual ciType* exact_type() const {
 672     return _exact_type;
 673   }
 674 
 675   virtual ciType* declared_type() const {
 676     return _exact_type;
 677   }
 678 
 679   // flags
 680   enum Flag {
 681     no_flag         = 0,
 682     visited         = 1 << 0,
 683     cannot_simplify = 1 << 1
 684   };
 685 
 686   // accessors
 687   bool  is_local() const          { return _index >= 0; }
 688   bool  is_on_stack() const       { return !is_local(); }
 689   int   local_index() const       { assert(is_local(), ""); return _index; }
 690   int   stack_index() const       { assert(is_on_stack(), ""); return -(_index+1); }
 691 
 692   Value operand_at(int i) const;
 693   int   operand_count() const;
 694 
 695   void   set(Flag f)              { _pf_flags |=  f; }
 696   void   clear(Flag f)            { _pf_flags &= ~f; }
 697   bool   is_set(Flag f) const     { return (_pf_flags & f) != 0; }
 698 
 699   // Invalidates phis corresponding to merges of locals of two different types
 700   // (these should never be referenced, otherwise the bytecodes are illegal)
 701   void   make_illegal() {
 702     set(cannot_simplify);
 703     set_type(illegalType);
 704   }
 705 
 706   bool is_illegal() const {
 707     return type()->is_illegal();
 708   }
 709 
 710   // generic
 711   virtual void input_values_do(ValueVisitor* f) {
 712   }
 713 };
 714 
 715 
 716 // A local is a placeholder for an incoming argument to a function call.
 717 LEAF(Local, Instruction)
 718  private:
 719   int      _java_index;                          // the local index within the method to which the local belongs
 720   bool     _is_receiver;                         // if local variable holds the receiver: "this" for non-static methods
 721   ciType*  _declared_type;
 722  public:
 723   // creation
 724   Local(ciType* declared, ValueType* type, int index, bool receiver)
 725     : Instruction(type)
 726     , _java_index(index)
 727     , _is_receiver(receiver)
 728     , _declared_type(declared)
 729   {
 730     NOT_PRODUCT(set_printable_bci(-1));
 731   }
 732 
 733   // accessors
 734   int java_index() const                         { return _java_index; }
 735   bool is_receiver() const                       { return _is_receiver; }
 736 
 737   virtual ciType* declared_type() const          { return _declared_type; }
 738 
 739   // generic
 740   virtual void input_values_do(ValueVisitor* f)   { /* no values */ }
 741 };
 742 
 743 
 744 LEAF(Constant, Instruction)
 745  public:
 746   // creation
 747   Constant(ValueType* type):
 748       Instruction(type, NULL, /*type_is_constant*/ true)
 749   {
 750     assert(type->is_constant(), "must be a constant");
 751   }
 752 
 753   Constant(ValueType* type, ValueStack* state_before):
 754     Instruction(type, state_before, /*type_is_constant*/ true)
 755   {
 756     assert(state_before != NULL, "only used for constants which need patching");
 757     assert(type->is_constant(), "must be a constant");
 758     // since it's patching it needs to be pinned
 759     pin();
 760   }
 761 
 762   // generic
 763   virtual bool can_trap() const                  { return state_before() != NULL; }
 764   virtual void input_values_do(ValueVisitor* f)   { /* no values */ }
 765 
 766   virtual intx hash() const;
 767   virtual bool is_equal(Value v) const;
 768 
 769   virtual ciType* exact_type() const;
 770 
 771   enum CompareResult { not_comparable = -1, cond_false, cond_true };
 772 
 773   virtual CompareResult compare(Instruction::Condition condition, Value right) const;
 774   BlockBegin* compare(Instruction::Condition cond, Value right,
 775                       BlockBegin* true_sux, BlockBegin* false_sux) const {
 776     switch (compare(cond, right)) {
 777     case not_comparable:
 778       return NULL;
 779     case cond_false:
 780       return false_sux;
 781     case cond_true:
 782       return true_sux;
 783     default:
 784       ShouldNotReachHere();
 785       return NULL;
 786     }
 787   }
 788 };
 789 
 790 
 791 BASE(AccessField, Instruction)
 792  private:
 793   Value       _obj;
 794   int         _offset;
 795   ciField*    _field;
 796   NullCheck*  _explicit_null_check;              // For explicit null check elimination
 797 
 798  public:
 799   // creation
 800   AccessField(Value obj, int offset, ciField* field, bool is_static,
 801               ValueStack* state_before, bool needs_patching)
 802   : Instruction(as_ValueType(field->type()->basic_type()), state_before)
 803   , _obj(obj)
 804   , _offset(offset)
 805   , _field(field)
 806   , _explicit_null_check(NULL)
 807   {
 808     set_needs_null_check(!is_static);
 809     set_flag(IsStaticFlag, is_static);
 810     set_flag(NeedsPatchingFlag, needs_patching);
 811     ASSERT_VALUES
 812     // pin of all instructions with memory access
 813     pin();
 814   }
 815 
 816   // accessors
 817   Value obj() const                              { return _obj; }
 818   int offset() const                             { return _offset; }
 819   ciField* field() const                         { return _field; }
 820   BasicType field_type() const                   { return _field->type()->basic_type(); }
 821   bool is_static() const                         { return check_flag(IsStaticFlag); }
 822   NullCheck* explicit_null_check() const         { return _explicit_null_check; }
 823   bool needs_patching() const                    { return check_flag(NeedsPatchingFlag); }
 824 
 825   // Unresolved getstatic and putstatic can cause initialization.
 826   // Technically it occurs at the Constant that materializes the base
 827   // of the static fields but it's simpler to model it here.
 828   bool is_init_point() const                     { return is_static() && (needs_patching() || !_field->holder()->is_initialized()); }
 829 
 830   // manipulation
 831 
 832   // Under certain circumstances, if a previous NullCheck instruction
 833   // proved the target object non-null, we can eliminate the explicit
 834   // null check and do an implicit one, simply specifying the debug
 835   // information from the NullCheck. This field should only be consulted
 836   // if needs_null_check() is true.
 837   void set_explicit_null_check(NullCheck* check) { _explicit_null_check = check; }
 838 
 839   // generic
 840   virtual bool can_trap() const                  { return needs_null_check() || needs_patching(); }
 841   virtual void input_values_do(ValueVisitor* f)   { f->visit(&_obj); }
 842 };
 843 
 844 
 845 LEAF(LoadField, AccessField)
 846   ciValueKlass* _value_klass;
 847   Value _default_value;
 848  public:
 849   // creation
 850   LoadField(Value obj, int offset, ciField* field, bool is_static,
 851             ValueStack* state_before, bool needs_patching,
 852             ciValueKlass* value_klass = NULL, Value default_value = NULL )
 853   : AccessField(obj, offset, field, is_static, state_before, needs_patching)
 854   , _value_klass(value_klass), _default_value(default_value)
 855   {}
 856 
 857   ciType* declared_type() const;
 858 
 859   // generic
 860   HASHING2(LoadField, !needs_patching() && !field()->is_volatile(), obj()->subst(), offset())  // cannot be eliminated if needs patching or if volatile
 861 
 862   ciValueKlass* value_klass() const { return _value_klass;}
 863   Value default_value() const { return _default_value; }
 864 };
 865 
 866 
 867 LEAF(StoreField, AccessField)
 868  private:
 869   Value _value;
 870 
 871  public:
 872   // creation
 873   StoreField(Value obj, int offset, ciField* field, Value value, bool is_static,
 874              ValueStack* state_before, bool needs_patching)
 875   : AccessField(obj, offset, field, is_static, state_before, needs_patching)
 876   , _value(value)
 877   {
 878     set_flag(NeedsWriteBarrierFlag, as_ValueType(field_type())->is_object());
 879     ASSERT_VALUES
 880     pin();
 881   }
 882 
 883   // accessors
 884   Value value() const                            { return _value; }
 885   bool needs_write_barrier() const               { return check_flag(NeedsWriteBarrierFlag); }
 886 
 887   // generic
 888   virtual void input_values_do(ValueVisitor* f)   { AccessField::input_values_do(f); f->visit(&_value); }
 889 };
 890 
 891 
 892 BASE(AccessArray, Instruction)
 893  private:
 894   Value       _array;
 895 
 896  public:
 897   // creation
 898   AccessArray(ValueType* type, Value array, ValueStack* state_before)
 899   : Instruction(type, state_before)
 900   , _array(array)
 901   {
 902     set_needs_null_check(true);
 903     ASSERT_VALUES
 904     pin(); // instruction with side effect (null exception or range check throwing)
 905   }
 906 
 907   Value array() const                            { return _array; }
 908 
 909   // generic
 910   virtual bool can_trap() const                  { return needs_null_check(); }
 911   virtual void input_values_do(ValueVisitor* f)   { f->visit(&_array); }
 912 };
 913 
 914 
 915 LEAF(ArrayLength, AccessArray)
 916  private:
 917   NullCheck*  _explicit_null_check;              // For explicit null check elimination
 918 
 919  public:
 920   // creation
 921   ArrayLength(Value array, ValueStack* state_before)
 922   : AccessArray(intType, array, state_before)
 923   , _explicit_null_check(NULL) {}
 924 
 925   // accessors
 926   NullCheck* explicit_null_check() const         { return _explicit_null_check; }
 927 
 928   // setters
 929   // See LoadField::set_explicit_null_check for documentation
 930   void set_explicit_null_check(NullCheck* check) { _explicit_null_check = check; }
 931 
 932   // generic
 933   HASHING1(ArrayLength, true, array()->subst())
 934 };
 935 
 936 
 937 BASE(AccessIndexed, AccessArray)
 938  private:
 939   Value     _index;
 940   Value     _length;
 941   BasicType _elt_type;
 942   bool      _mismatched;
 943 
 944  public:
 945   // creation
 946   AccessIndexed(Value array, Value index, Value length, BasicType elt_type, ValueStack* state_before, bool mismatched)
 947   : AccessArray(as_ValueType(elt_type), array, state_before)
 948   , _index(index)
 949   , _length(length)
 950   , _elt_type(elt_type)
 951   , _mismatched(mismatched)
 952   {
 953     set_flag(Instruction::NeedsRangeCheckFlag, true);
 954     ASSERT_VALUES
 955   }
 956 
 957   // accessors
 958   Value index() const                            { return _index; }
 959   Value length() const                           { return _length; }
 960   BasicType elt_type() const                     { return _elt_type; }
 961   bool mismatched() const                        { return _mismatched; }
 962 
 963   void clear_length()                            { _length = NULL; }
 964   // perform elimination of range checks involving constants
 965   bool compute_needs_range_check();
 966 
 967   // generic
 968   virtual void input_values_do(ValueVisitor* f)   { AccessArray::input_values_do(f); f->visit(&_index); if (_length != NULL) f->visit(&_length); }
 969 };
 970 
 971 
 972 LEAF(LoadIndexed, AccessIndexed)
 973  private:
 974   NullCheck*  _explicit_null_check;              // For explicit null check elimination
 975   NewValueTypeInstance* _vt;
 976 
 977  public:
 978   // creation
 979   LoadIndexed(Value array, Value index, Value length, BasicType elt_type, ValueStack* state_before, bool mismatched = false)
 980   : AccessIndexed(array, index, length, elt_type, state_before, mismatched)
 981   , _explicit_null_check(NULL) {}
 982 
 983   // accessors
 984   NullCheck* explicit_null_check() const         { return _explicit_null_check; }
 985 
 986   // setters
 987   // See LoadField::set_explicit_null_check for documentation
 988   void set_explicit_null_check(NullCheck* check) { _explicit_null_check = check; }
 989 
 990   ciType* exact_type() const;
 991   ciType* declared_type() const;
 992 
 993   NewValueTypeInstance* vt() { return _vt; }
 994   void set_vt(NewValueTypeInstance* vt) { _vt = vt; }
 995 
 996   // generic
 997   HASHING2(LoadIndexed, true, array()->subst(), index()->subst())
 998 };
 999 
1000 
1001 LEAF(StoreIndexed, AccessIndexed)
1002  private:
1003   Value       _value;
1004 
1005   ciMethod* _profiled_method;
1006   int       _profiled_bci;
1007   bool      _check_boolean;
1008 
1009  public:
1010   // creation
1011   StoreIndexed(Value array, Value index, Value length, BasicType elt_type, Value value, ValueStack* state_before,
1012                bool check_boolean, bool mismatched = false)
1013   : AccessIndexed(array, index, length, elt_type, state_before, mismatched)
1014   , _value(value), _profiled_method(NULL), _profiled_bci(0), _check_boolean(check_boolean)
1015   {
1016     set_flag(NeedsWriteBarrierFlag, (as_ValueType(elt_type)->is_object()));
1017     set_flag(NeedsStoreCheckFlag, (as_ValueType(elt_type)->is_object()));
1018     ASSERT_VALUES
1019     pin();
1020   }
1021 
1022   // accessors
1023   Value value() const                            { return _value; }
1024   bool needs_write_barrier() const               { return check_flag(NeedsWriteBarrierFlag); }
1025   bool needs_store_check() const                 { return check_flag(NeedsStoreCheckFlag); }
1026   bool check_boolean() const                     { return _check_boolean; }
1027   // Helpers for MethodData* profiling
1028   void set_should_profile(bool value)                { set_flag(ProfileMDOFlag, value); }
1029   void set_profiled_method(ciMethod* method)         { _profiled_method = method;   }
1030   void set_profiled_bci(int bci)                     { _profiled_bci = bci;         }
1031   bool      should_profile() const                   { return check_flag(ProfileMDOFlag); }
1032   ciMethod* profiled_method() const                  { return _profiled_method;     }
1033   int       profiled_bci() const                     { return _profiled_bci;        }
1034   // generic
1035   virtual void input_values_do(ValueVisitor* f)   { AccessIndexed::input_values_do(f); f->visit(&_value); }
1036 };
1037 
1038 
1039 LEAF(NegateOp, Instruction)
1040  private:
1041   Value _x;
1042 
1043  public:
1044   // creation
1045   NegateOp(Value x) : Instruction(x->type()->base()), _x(x) {
1046     ASSERT_VALUES
1047   }
1048 
1049   // accessors
1050   Value x() const                                { return _x; }
1051 
1052   // generic
1053   virtual void input_values_do(ValueVisitor* f)   { f->visit(&_x); }
1054 };
1055 
1056 
1057 BASE(Op2, Instruction)
1058  private:
1059   Bytecodes::Code _op;
1060   Value           _x;
1061   Value           _y;
1062 
1063  public:
1064   // creation
1065   Op2(ValueType* type, Bytecodes::Code op, Value x, Value y, ValueStack* state_before = NULL)
1066   : Instruction(type, state_before)
1067   , _op(op)
1068   , _x(x)
1069   , _y(y)
1070   {
1071     ASSERT_VALUES
1072   }
1073 
1074   // accessors
1075   Bytecodes::Code op() const                     { return _op; }
1076   Value x() const                                { return _x; }
1077   Value y() const                                { return _y; }
1078 
1079   // manipulators
1080   void swap_operands() {
1081     assert(is_commutative(), "operation must be commutative");
1082     Value t = _x; _x = _y; _y = t;
1083   }
1084 
1085   // generic
1086   virtual bool is_commutative() const            { return false; }
1087   virtual void input_values_do(ValueVisitor* f)   { f->visit(&_x); f->visit(&_y); }
1088 };
1089 
1090 
1091 LEAF(ArithmeticOp, Op2)
1092  public:
1093   // creation
1094   ArithmeticOp(Bytecodes::Code op, Value x, Value y, bool is_strictfp, ValueStack* state_before)
1095   : Op2(x->type()->meet(y->type()), op, x, y, state_before)
1096   {
1097     set_flag(IsStrictfpFlag, is_strictfp);
1098     if (can_trap()) pin();
1099   }
1100 
1101   // accessors
1102   bool        is_strictfp() const                { return check_flag(IsStrictfpFlag); }
1103 
1104   // generic
1105   virtual bool is_commutative() const;
1106   virtual bool can_trap() const;
1107   HASHING3(Op2, true, op(), x()->subst(), y()->subst())
1108 };
1109 
1110 
1111 LEAF(ShiftOp, Op2)
1112  public:
1113   // creation
1114   ShiftOp(Bytecodes::Code op, Value x, Value s) : Op2(x->type()->base(), op, x, s) {}
1115 
1116   // generic
1117   HASHING3(Op2, true, op(), x()->subst(), y()->subst())
1118 };
1119 
1120 
1121 LEAF(LogicOp, Op2)
1122  public:
1123   // creation
1124   LogicOp(Bytecodes::Code op, Value x, Value y) : Op2(x->type()->meet(y->type()), op, x, y) {}
1125 
1126   // generic
1127   virtual bool is_commutative() const;
1128   HASHING3(Op2, true, op(), x()->subst(), y()->subst())
1129 };
1130 
1131 
1132 LEAF(CompareOp, Op2)
1133  public:
1134   // creation
1135   CompareOp(Bytecodes::Code op, Value x, Value y, ValueStack* state_before)
1136   : Op2(intType, op, x, y, state_before)
1137   {}
1138 
1139   // generic
1140   HASHING3(Op2, true, op(), x()->subst(), y()->subst())
1141 };
1142 
1143 
1144 LEAF(IfOp, Op2)
1145  private:
1146   Value _tval;
1147   Value _fval;
1148 
1149  public:
1150   // creation
1151   IfOp(Value x, Condition cond, Value y, Value tval, Value fval)
1152   : Op2(tval->type()->meet(fval->type()), (Bytecodes::Code)cond, x, y)
1153   , _tval(tval)
1154   , _fval(fval)
1155   {
1156     ASSERT_VALUES
1157     assert(tval->type()->tag() == fval->type()->tag(), "types must match");
1158   }
1159 
1160   // accessors
1161   virtual bool is_commutative() const;
1162   Bytecodes::Code op() const                     { ShouldNotCallThis(); return Bytecodes::_illegal; }
1163   Condition cond() const                         { return (Condition)Op2::op(); }
1164   Value tval() const                             { return _tval; }
1165   Value fval() const                             { return _fval; }
1166 
1167   // generic
1168   virtual void input_values_do(ValueVisitor* f)   { Op2::input_values_do(f); f->visit(&_tval); f->visit(&_fval); }
1169 };
1170 
1171 
1172 LEAF(Convert, Instruction)
1173  private:
1174   Bytecodes::Code _op;
1175   Value           _value;
1176 
1177  public:
1178   // creation
1179   Convert(Bytecodes::Code op, Value value, ValueType* to_type) : Instruction(to_type), _op(op), _value(value) {
1180     ASSERT_VALUES
1181   }
1182 
1183   // accessors
1184   Bytecodes::Code op() const                     { return _op; }
1185   Value value() const                            { return _value; }
1186 
1187   // generic
1188   virtual void input_values_do(ValueVisitor* f)   { f->visit(&_value); }
1189   HASHING2(Convert, true, op(), value()->subst())
1190 };
1191 
1192 
1193 LEAF(NullCheck, Instruction)
1194  private:
1195   Value       _obj;
1196 
1197  public:
1198   // creation
1199   NullCheck(Value obj, ValueStack* state_before)
1200   : Instruction(obj->type()->base(), state_before)
1201   , _obj(obj)
1202   {
1203     ASSERT_VALUES
1204     set_can_trap(true);
1205     assert(_obj->type()->is_object(), "null check must be applied to objects only");
1206     pin(Instruction::PinExplicitNullCheck);
1207   }
1208 
1209   // accessors
1210   Value obj() const                              { return _obj; }
1211 
1212   // setters
1213   void set_can_trap(bool can_trap)               { set_flag(CanTrapFlag, can_trap); }
1214 
1215   // generic
1216   virtual bool can_trap() const                  { return check_flag(CanTrapFlag); /* null-check elimination sets to false */ }
1217   virtual void input_values_do(ValueVisitor* f)   { f->visit(&_obj); }
1218   HASHING1(NullCheck, true, obj()->subst())
1219 };
1220 
1221 
1222 // This node is supposed to cast the type of another node to a more precise
1223 // declared type.
1224 LEAF(TypeCast, Instruction)
1225  private:
1226   ciType* _declared_type;
1227   Value   _obj;
1228 
1229  public:
1230   // The type of this node is the same type as the object type (and it might be constant).
1231   TypeCast(ciType* type, Value obj, ValueStack* state_before)
1232   : Instruction(obj->type(), state_before, obj->type()->is_constant()),
1233     _declared_type(type),
1234     _obj(obj) {}
1235 
1236   // accessors
1237   ciType* declared_type() const                  { return _declared_type; }
1238   Value   obj() const                            { return _obj; }
1239 
1240   // generic
1241   virtual void input_values_do(ValueVisitor* f)  { f->visit(&_obj); }
1242 };
1243 
1244 
1245 BASE(StateSplit, Instruction)
1246  private:
1247   ValueStack* _state;
1248 
1249  protected:
1250   static void substitute(BlockList& list, BlockBegin* old_block, BlockBegin* new_block);
1251 
1252  public:
1253   // creation
1254   StateSplit(ValueType* type, ValueStack* state_before = NULL)
1255   : Instruction(type, state_before)
1256   , _state(NULL)
1257   {
1258     pin(PinStateSplitConstructor);
1259   }
1260 
1261   // accessors
1262   ValueStack* state() const                      { return _state; }
1263   IRScope* scope() const;                        // the state's scope
1264 
1265   // manipulation
1266   void set_state(ValueStack* state)              { assert(_state == NULL, "overwriting existing state"); check_state(state); _state = state; }
1267 
1268   // generic
1269   virtual void input_values_do(ValueVisitor* f)   { /* no values */ }
1270   virtual void state_values_do(ValueVisitor* f);
1271 };
1272 
1273 
1274 LEAF(Invoke, StateSplit)
1275  private:
1276   Bytecodes::Code _code;
1277   Value           _recv;
1278   Values*         _args;
1279   BasicTypeList*  _signature;
1280   int             _vtable_index;
1281   ciMethod*       _target;
1282 
1283  public:
1284   // creation
1285   Invoke(Bytecodes::Code code, ValueType* result_type, Value recv, Values* args,
1286          int vtable_index, ciMethod* target, ValueStack* state_before);
1287 
1288   // accessors
1289   Bytecodes::Code code() const                   { return _code; }
1290   Value receiver() const                         { return _recv; }
1291   bool has_receiver() const                      { return receiver() != NULL; }
1292   int number_of_arguments() const                { return _args->length(); }
1293   Value argument_at(int i) const                 { return _args->at(i); }
1294   int vtable_index() const                       { return _vtable_index; }
1295   BasicTypeList* signature() const               { return _signature; }
1296   ciMethod* target() const                       { return _target; }
1297 
1298   ciType* declared_type() const;
1299 
1300   // Returns false if target is not loaded
1301   bool target_is_final() const                   { return check_flag(TargetIsFinalFlag); }
1302   bool target_is_loaded() const                  { return check_flag(TargetIsLoadedFlag); }
1303   // Returns false if target is not loaded
1304   bool target_is_strictfp() const                { return check_flag(TargetIsStrictfpFlag); }
1305 
1306   // JSR 292 support
1307   bool is_invokedynamic() const                  { return code() == Bytecodes::_invokedynamic; }
1308   bool is_method_handle_intrinsic() const        { return target()->is_method_handle_intrinsic(); }
1309 
1310   virtual bool needs_exception_state() const     { return false; }
1311 
1312   // generic
1313   virtual bool can_trap() const                  { return true; }
1314   virtual void input_values_do(ValueVisitor* f) {
1315     StateSplit::input_values_do(f);
1316     if (has_receiver()) f->visit(&_recv);
1317     for (int i = 0; i < _args->length(); i++) f->visit(_args->adr_at(i));
1318   }
1319   virtual void state_values_do(ValueVisitor *f);
1320 };
1321 
1322 
1323 LEAF(NewInstance, StateSplit)
1324  private:
1325   ciInstanceKlass* _klass;
1326   bool _is_unresolved;
1327 
1328  public:
1329   // creation
1330   NewInstance(ciInstanceKlass* klass, ValueStack* state_before, bool is_unresolved)
1331   : StateSplit(instanceType, state_before)
1332   , _klass(klass), _is_unresolved(is_unresolved)
1333   {}
1334 
1335   // accessors
1336   ciInstanceKlass* klass() const                 { return _klass; }
1337   bool is_unresolved() const                     { return _is_unresolved; }
1338 
1339   virtual bool needs_exception_state() const     { return false; }
1340 
1341   // generic
1342   virtual bool can_trap() const                  { return true; }
1343   ciType* exact_type() const;
1344   ciType* declared_type() const;
1345 };
1346 
1347 LEAF(NewValueTypeInstance, StateSplit)
1348   bool _is_unresolved;
1349   ciValueKlass* _klass;
1350   Value _depends_on;      // Link to instance on with withfield was called on
1351 
1352 public:
1353 
1354   // Default creation, always allocated for now
1355   NewValueTypeInstance(ciValueKlass* klass, ValueStack* state_before, bool is_unresolved, Value depends_on = NULL)
1356   : StateSplit(instanceType, state_before)
1357    , _is_unresolved(is_unresolved)
1358    , _klass(klass)
1359   {
1360     if (depends_on == NULL) {
1361       _depends_on = this;
1362     } else {
1363       _depends_on = depends_on;
1364     }
1365   }
1366 
1367   // accessors
1368   bool is_unresolved() const                     { return _is_unresolved; }
1369   Value depends_on();
1370 
1371   ciValueKlass* klass() const { return _klass; }
1372 
1373   virtual bool needs_exception_state() const     { return false; }
1374 
1375   // generic
1376   virtual bool can_trap() const                  { return true; }
1377   ciType* exact_type() const;
1378   ciType* declared_type() const;
1379 
1380   // Only done in LIR Generator -> map everything to object
1381   void set_to_object_type() { set_type(instanceType); }
1382 };
1383 
1384 BASE(NewArray, StateSplit)
1385  private:
1386   Value       _length;
1387 
1388  public:
1389   // creation
1390   NewArray(Value length, ValueStack* state_before)
1391   : StateSplit(objectType, state_before)
1392   , _length(length)
1393   {
1394     // Do not ASSERT_VALUES since length is NULL for NewMultiArray
1395   }
1396 
1397   // accessors
1398   Value length() const                           { return _length; }
1399 
1400   virtual bool needs_exception_state() const     { return false; }
1401 
1402   ciType* exact_type() const                     { return NULL; }
1403   ciType* declared_type() const;
1404 
1405   // generic
1406   virtual bool can_trap() const                  { return true; }
1407   virtual void input_values_do(ValueVisitor* f)   { StateSplit::input_values_do(f); f->visit(&_length); }
1408 };
1409 
1410 
1411 LEAF(NewTypeArray, NewArray)
1412  private:
1413   BasicType _elt_type;
1414 
1415  public:
1416   // creation
1417   NewTypeArray(Value length, BasicType elt_type, ValueStack* state_before)
1418   : NewArray(length, state_before)
1419   , _elt_type(elt_type)
1420   {}
1421 
1422   // accessors
1423   BasicType elt_type() const                     { return _elt_type; }
1424   ciType* exact_type() const;
1425 };
1426 
1427 
1428 LEAF(NewObjectArray, NewArray)
1429  private:
1430   ciKlass* _klass;
1431 
1432  public:
1433   // creation
1434   NewObjectArray(ciKlass* klass, Value length, ValueStack* state_before) : NewArray(length, state_before), _klass(klass) {}
1435 
1436   // accessors
1437   ciKlass* klass() const                         { return _klass; }
1438   ciType* exact_type() const;
1439 };
1440 
1441 
1442 LEAF(NewMultiArray, NewArray)
1443  private:
1444   ciKlass* _klass;
1445   Values*  _dims;
1446 
1447  public:
1448   // creation
1449   NewMultiArray(ciKlass* klass, Values* dims, ValueStack* state_before) : NewArray(NULL, state_before), _klass(klass), _dims(dims) {
1450     ASSERT_VALUES
1451   }
1452 
1453   // accessors
1454   ciKlass* klass() const                         { return _klass; }
1455   Values* dims() const                           { return _dims; }
1456   int rank() const                               { return dims()->length(); }
1457 
1458   // generic
1459   virtual void input_values_do(ValueVisitor* f) {
1460     // NOTE: we do not call NewArray::input_values_do since "length"
1461     // is meaningless for a multi-dimensional array; passing the
1462     // zeroth element down to NewArray as its length is a bad idea
1463     // since there will be a copy in the "dims" array which doesn't
1464     // get updated, and the value must not be traversed twice. Was bug
1465     // - kbr 4/10/2001
1466     StateSplit::input_values_do(f);
1467     for (int i = 0; i < _dims->length(); i++) f->visit(_dims->adr_at(i));
1468   }
1469 
1470   ciType* exact_type() const;
1471 };
1472 
1473 
1474 BASE(TypeCheck, StateSplit)
1475  private:
1476   ciKlass*    _klass;
1477   Value       _obj;
1478 
1479   ciMethod* _profiled_method;
1480   int       _profiled_bci;
1481 
1482  public:
1483   // creation
1484   TypeCheck(ciKlass* klass, Value obj, ValueType* type, ValueStack* state_before)
1485   : StateSplit(type, state_before), _klass(klass), _obj(obj),
1486     _profiled_method(NULL), _profiled_bci(0) {
1487     ASSERT_VALUES
1488     set_direct_compare(false);
1489   }
1490 
1491   // accessors
1492   ciKlass* klass() const                         { return _klass; }
1493   Value obj() const                              { return _obj; }
1494   bool is_loaded() const                         { return klass() != NULL; }
1495   bool direct_compare() const                    { return check_flag(DirectCompareFlag); }
1496 
1497   // manipulation
1498   void set_direct_compare(bool flag)             { set_flag(DirectCompareFlag, flag); }
1499 
1500   // generic
1501   virtual bool can_trap() const                  { return true; }
1502   virtual void input_values_do(ValueVisitor* f)   { StateSplit::input_values_do(f); f->visit(&_obj); }
1503 
1504   // Helpers for MethodData* profiling
1505   void set_should_profile(bool value)                { set_flag(ProfileMDOFlag, value); }
1506   void set_profiled_method(ciMethod* method)         { _profiled_method = method;   }
1507   void set_profiled_bci(int bci)                     { _profiled_bci = bci;         }
1508   bool      should_profile() const                   { return check_flag(ProfileMDOFlag); }
1509   ciMethod* profiled_method() const                  { return _profiled_method;     }
1510   int       profiled_bci() const                     { return _profiled_bci;        }
1511 };
1512 
1513 
1514 LEAF(CheckCast, TypeCheck)
1515   bool _is_never_null;
1516  public:
1517   // creation
1518   CheckCast(ciKlass* klass, Value obj, ValueStack* state_before, bool never_null = false)
1519   : TypeCheck(klass, obj, objectType, state_before), _is_never_null(never_null) {}
1520 
1521   void set_incompatible_class_change_check() {
1522     set_flag(ThrowIncompatibleClassChangeErrorFlag, true);
1523   }
1524   bool is_incompatible_class_change_check() const {
1525     return check_flag(ThrowIncompatibleClassChangeErrorFlag);
1526   }
1527   void set_invokespecial_receiver_check() {
1528     set_flag(InvokeSpecialReceiverCheckFlag, true);
1529   }
1530   bool is_invokespecial_receiver_check() const {
1531     return check_flag(InvokeSpecialReceiverCheckFlag);
1532   }
1533   bool is_never_null() const {
1534     return _is_never_null;
1535   }
1536 
1537   virtual bool needs_exception_state() const {
1538     return !is_invokespecial_receiver_check();
1539   }
1540 
1541   ciType* declared_type() const;
1542 };
1543 
1544 
1545 LEAF(InstanceOf, TypeCheck)
1546  public:
1547   // creation
1548   InstanceOf(ciKlass* klass, Value obj, ValueStack* state_before) : TypeCheck(klass, obj, intType, state_before) {}
1549 
1550   virtual bool needs_exception_state() const     { return false; }
1551 };
1552 
1553 
1554 BASE(AccessMonitor, StateSplit)
1555  private:
1556   Value       _obj;
1557   int         _monitor_no;
1558 
1559  public:
1560   // creation
1561   AccessMonitor(Value obj, int monitor_no, ValueStack* state_before = NULL)
1562   : StateSplit(illegalType, state_before)
1563   , _obj(obj)
1564   , _monitor_no(monitor_no)
1565   {
1566     set_needs_null_check(true);
1567     ASSERT_VALUES
1568   }
1569 
1570   // accessors
1571   Value obj() const                              { return _obj; }
1572   int monitor_no() const                         { return _monitor_no; }
1573 
1574   // generic
1575   virtual void input_values_do(ValueVisitor* f)   { StateSplit::input_values_do(f); f->visit(&_obj); }
1576 };
1577 
1578 
1579 LEAF(MonitorEnter, AccessMonitor)
1580   bool _maybe_valuetype;
1581  public:
1582   // creation
1583   MonitorEnter(Value obj, int monitor_no, ValueStack* state_before, bool maybe_valuetype)
1584   : AccessMonitor(obj, monitor_no, state_before)
1585   , _maybe_valuetype(maybe_valuetype)
1586   {
1587     ASSERT_VALUES
1588   }
1589 
1590   // accessors
1591   bool maybe_valuetype() const                   { return _maybe_valuetype; }
1592 
1593   // generic
1594   virtual bool can_trap() const                  { return true; }
1595 };
1596 
1597 
1598 LEAF(MonitorExit, AccessMonitor)
1599  public:
1600   // creation
1601   MonitorExit(Value obj, int monitor_no)
1602   : AccessMonitor(obj, monitor_no, NULL)
1603   {
1604     ASSERT_VALUES
1605   }
1606 };
1607 
1608 
1609 LEAF(Intrinsic, StateSplit)
1610  private:
1611   vmIntrinsics::ID _id;
1612   Values*          _args;
1613   Value            _recv;
1614   ArgsNonNullState _nonnull_state;
1615 
1616  public:
1617   // preserves_state can be set to true for Intrinsics
1618   // which are guaranteed to preserve register state across any slow
1619   // cases; setting it to true does not mean that the Intrinsic can
1620   // not trap, only that if we continue execution in the same basic
1621   // block after the Intrinsic, all of the registers are intact. This
1622   // allows load elimination and common expression elimination to be
1623   // performed across the Intrinsic.  The default value is false.
1624   Intrinsic(ValueType* type,
1625             vmIntrinsics::ID id,
1626             Values* args,
1627             bool has_receiver,
1628             ValueStack* state_before,
1629             bool preserves_state,
1630             bool cantrap = true)
1631   : StateSplit(type, state_before)
1632   , _id(id)
1633   , _args(args)
1634   , _recv(NULL)
1635   {
1636     assert(args != NULL, "args must exist");
1637     ASSERT_VALUES
1638     set_flag(PreservesStateFlag, preserves_state);
1639     set_flag(CanTrapFlag,        cantrap);
1640     if (has_receiver) {
1641       _recv = argument_at(0);
1642     }
1643     set_needs_null_check(has_receiver);
1644 
1645     // some intrinsics can't trap, so don't force them to be pinned
1646     if (!can_trap() && !vmIntrinsics::should_be_pinned(_id)) {
1647       unpin(PinStateSplitConstructor);
1648     }
1649   }
1650 
1651   // accessors
1652   vmIntrinsics::ID id() const                    { return _id; }
1653   int number_of_arguments() const                { return _args->length(); }
1654   Value argument_at(int i) const                 { return _args->at(i); }
1655 
1656   bool has_receiver() const                      { return (_recv != NULL); }
1657   Value receiver() const                         { assert(has_receiver(), "must have receiver"); return _recv; }
1658   bool preserves_state() const                   { return check_flag(PreservesStateFlag); }
1659 
1660   bool arg_needs_null_check(int i) const {
1661     return _nonnull_state.arg_needs_null_check(i);
1662   }
1663 
1664   void set_arg_needs_null_check(int i, bool check) {
1665     _nonnull_state.set_arg_needs_null_check(i, check);
1666   }
1667 
1668   // generic
1669   virtual bool can_trap() const                  { return check_flag(CanTrapFlag); }
1670   virtual void input_values_do(ValueVisitor* f) {
1671     StateSplit::input_values_do(f);
1672     for (int i = 0; i < _args->length(); i++) f->visit(_args->adr_at(i));
1673   }
1674 };
1675 
1676 
1677 class LIR_List;
1678 
1679 LEAF(BlockBegin, StateSplit)
1680  private:
1681   int        _block_id;                          // the unique block id
1682   int        _bci;                               // start-bci of block
1683   int        _depth_first_number;                // number of this block in a depth-first ordering
1684   int        _linear_scan_number;                // number of this block in linear-scan ordering
1685   int        _dominator_depth;
1686   int        _loop_depth;                        // the loop nesting level of this block
1687   int        _loop_index;                        // number of the innermost loop of this block
1688   int        _flags;                             // the flags associated with this block
1689 
1690   // fields used by BlockListBuilder
1691   int            _total_preds;                   // number of predecessors found by BlockListBuilder
1692   ResourceBitMap _stores_to_locals;              // bit is set when a local variable is stored in the block
1693 
1694   // SSA specific fields: (factor out later)
1695   BlockList   _successors;                       // the successors of this block
1696   BlockList   _predecessors;                     // the predecessors of this block
1697   BlockList   _dominates;                        // list of blocks that are dominated by this block
1698   BlockBegin* _dominator;                        // the dominator of this block
1699   // SSA specific ends
1700   BlockEnd*  _end;                               // the last instruction of this block
1701   BlockList  _exception_handlers;                // the exception handlers potentially invoked by this block
1702   ValueStackStack* _exception_states;            // only for xhandler entries: states of all instructions that have an edge to this xhandler
1703   int        _exception_handler_pco;             // if this block is the start of an exception handler,
1704                                                  // this records the PC offset in the assembly code of the
1705                                                  // first instruction in this block
1706   Label      _label;                             // the label associated with this block
1707   LIR_List*  _lir;                               // the low level intermediate representation for this block
1708 
1709   ResourceBitMap _live_in;                       // set of live LIR_Opr registers at entry to this block
1710   ResourceBitMap _live_out;                      // set of live LIR_Opr registers at exit from this block
1711   ResourceBitMap _live_gen;                      // set of registers used before any redefinition in this block
1712   ResourceBitMap _live_kill;                     // set of registers defined in this block
1713 
1714   ResourceBitMap _fpu_register_usage;
1715   intArray*      _fpu_stack_state;               // For x86 FPU code generation with UseLinearScan
1716   int            _first_lir_instruction_id;      // ID of first LIR instruction in this block
1717   int            _last_lir_instruction_id;       // ID of last LIR instruction in this block
1718 
1719   void iterate_preorder (boolArray& mark, BlockClosure* closure);
1720   void iterate_postorder(boolArray& mark, BlockClosure* closure);
1721 
1722   friend class SuxAndWeightAdjuster;
1723 
1724  public:
1725    void* operator new(size_t size) throw() {
1726     Compilation* c = Compilation::current();
1727     void* res = c->arena()->Amalloc(size);
1728     ((BlockBegin*)res)->_id = c->get_next_id();
1729     ((BlockBegin*)res)->_block_id = c->get_next_block_id();
1730     return res;
1731   }
1732 
1733   // initialization/counting
1734   static int  number_of_blocks() {
1735     return Compilation::current()->number_of_blocks();
1736   }
1737 
1738   // creation
1739   BlockBegin(int bci)
1740   : StateSplit(illegalType)
1741   , _bci(bci)
1742   , _depth_first_number(-1)
1743   , _linear_scan_number(-1)
1744   , _dominator_depth(-1)
1745   , _loop_depth(0)
1746   , _loop_index(-1)
1747   , _flags(0)
1748   , _total_preds(0)
1749   , _stores_to_locals()
1750   , _successors(2)
1751   , _predecessors(2)
1752   , _dominates(2)
1753   , _dominator(NULL)
1754   , _end(NULL)
1755   , _exception_handlers(1)
1756   , _exception_states(NULL)
1757   , _exception_handler_pco(-1)
1758   , _lir(NULL)
1759   , _live_in()
1760   , _live_out()
1761   , _live_gen()
1762   , _live_kill()
1763   , _fpu_register_usage()
1764   , _fpu_stack_state(NULL)
1765   , _first_lir_instruction_id(-1)
1766   , _last_lir_instruction_id(-1)
1767   {
1768     _block = this;
1769 #ifndef PRODUCT
1770     set_printable_bci(bci);
1771 #endif
1772   }
1773 
1774   // accessors
1775   int block_id() const                           { return _block_id; }
1776   int bci() const                                { return _bci; }
1777   BlockList* successors()                        { return &_successors; }
1778   BlockList* dominates()                         { return &_dominates; }
1779   BlockBegin* dominator() const                  { return _dominator; }
1780   int loop_depth() const                         { return _loop_depth; }
1781   int dominator_depth() const                    { return _dominator_depth; }
1782   int depth_first_number() const                 { return _depth_first_number; }
1783   int linear_scan_number() const                 { return _linear_scan_number; }
1784   BlockEnd* end() const                          { return _end; }
1785   Label* label()                                 { return &_label; }
1786   LIR_List* lir() const                          { return _lir; }
1787   int exception_handler_pco() const              { return _exception_handler_pco; }
1788   ResourceBitMap& live_in()                      { return _live_in;        }
1789   ResourceBitMap& live_out()                     { return _live_out;       }
1790   ResourceBitMap& live_gen()                     { return _live_gen;       }
1791   ResourceBitMap& live_kill()                    { return _live_kill;      }
1792   ResourceBitMap& fpu_register_usage()           { return _fpu_register_usage; }
1793   intArray* fpu_stack_state() const              { return _fpu_stack_state;    }
1794   int first_lir_instruction_id() const           { return _first_lir_instruction_id; }
1795   int last_lir_instruction_id() const            { return _last_lir_instruction_id; }
1796   int total_preds() const                        { return _total_preds; }
1797   BitMap& stores_to_locals()                     { return _stores_to_locals; }
1798 
1799   // manipulation
1800   void set_dominator(BlockBegin* dom)            { _dominator = dom; }
1801   void set_loop_depth(int d)                     { _loop_depth = d; }
1802   void set_dominator_depth(int d)                { _dominator_depth = d; }
1803   void set_depth_first_number(int dfn)           { _depth_first_number = dfn; }
1804   void set_linear_scan_number(int lsn)           { _linear_scan_number = lsn; }
1805   void set_end(BlockEnd* end);
1806   void clear_end();
1807   void disconnect_from_graph();
1808   static void disconnect_edge(BlockBegin* from, BlockBegin* to);
1809   BlockBegin* insert_block_between(BlockBegin* sux);
1810   void substitute_sux(BlockBegin* old_sux, BlockBegin* new_sux);
1811   void set_lir(LIR_List* lir)                    { _lir = lir; }
1812   void set_exception_handler_pco(int pco)        { _exception_handler_pco = pco; }
1813   void set_live_in  (const ResourceBitMap& map)  { _live_in = map;   }
1814   void set_live_out (const ResourceBitMap& map)  { _live_out = map;  }
1815   void set_live_gen (const ResourceBitMap& map)  { _live_gen = map;  }
1816   void set_live_kill(const ResourceBitMap& map)  { _live_kill = map; }
1817   void set_fpu_register_usage(const ResourceBitMap& map) { _fpu_register_usage = map; }
1818   void set_fpu_stack_state(intArray* state)      { _fpu_stack_state = state;  }
1819   void set_first_lir_instruction_id(int id)      { _first_lir_instruction_id = id;  }
1820   void set_last_lir_instruction_id(int id)       { _last_lir_instruction_id = id;  }
1821   void increment_total_preds(int n = 1)          { _total_preds += n; }
1822   void init_stores_to_locals(int locals_count)   { _stores_to_locals.initialize(locals_count); }
1823 
1824   // generic
1825   virtual void state_values_do(ValueVisitor* f);
1826 
1827   // successors and predecessors
1828   int number_of_sux() const;
1829   BlockBegin* sux_at(int i) const;
1830   void add_successor(BlockBegin* sux);
1831   void remove_successor(BlockBegin* pred);
1832   bool is_successor(BlockBegin* sux) const       { return _successors.contains(sux); }
1833 
1834   void add_predecessor(BlockBegin* pred);
1835   void remove_predecessor(BlockBegin* pred);
1836   bool is_predecessor(BlockBegin* pred) const    { return _predecessors.contains(pred); }
1837   int number_of_preds() const                    { return _predecessors.length(); }
1838   BlockBegin* pred_at(int i) const               { return _predecessors.at(i); }
1839 
1840   // exception handlers potentially invoked by this block
1841   void add_exception_handler(BlockBegin* b);
1842   bool is_exception_handler(BlockBegin* b) const { return _exception_handlers.contains(b); }
1843   int  number_of_exception_handlers() const      { return _exception_handlers.length(); }
1844   BlockBegin* exception_handler_at(int i) const  { return _exception_handlers.at(i); }
1845 
1846   // states of the instructions that have an edge to this exception handler
1847   int number_of_exception_states()               { assert(is_set(exception_entry_flag), "only for xhandlers"); return _exception_states == NULL ? 0 : _exception_states->length(); }
1848   ValueStack* exception_state_at(int idx) const  { assert(is_set(exception_entry_flag), "only for xhandlers"); return _exception_states->at(idx); }
1849   int add_exception_state(ValueStack* state);
1850 
1851   // flags
1852   enum Flag {
1853     no_flag                       = 0,
1854     std_entry_flag                = 1 << 0,
1855     osr_entry_flag                = 1 << 1,
1856     exception_entry_flag          = 1 << 2,
1857     subroutine_entry_flag         = 1 << 3,
1858     backward_branch_target_flag   = 1 << 4,
1859     is_on_work_list_flag          = 1 << 5,
1860     was_visited_flag              = 1 << 6,
1861     parser_loop_header_flag       = 1 << 7,  // set by parser to identify blocks where phi functions can not be created on demand
1862     critical_edge_split_flag      = 1 << 8, // set for all blocks that are introduced when critical edges are split
1863     linear_scan_loop_header_flag  = 1 << 9, // set during loop-detection for LinearScan
1864     linear_scan_loop_end_flag     = 1 << 10, // set during loop-detection for LinearScan
1865     donot_eliminate_range_checks  = 1 << 11  // Should be try to eliminate range checks in this block
1866   };
1867 
1868   void set(Flag f)                               { _flags |= f; }
1869   void clear(Flag f)                             { _flags &= ~f; }
1870   bool is_set(Flag f) const                      { return (_flags & f) != 0; }
1871   bool is_entry_block() const {
1872     const int entry_mask = std_entry_flag | osr_entry_flag | exception_entry_flag;
1873     return (_flags & entry_mask) != 0;
1874   }
1875 
1876   // iteration
1877   void iterate_preorder   (BlockClosure* closure);
1878   void iterate_postorder  (BlockClosure* closure);
1879 
1880   void block_values_do(ValueVisitor* f);
1881 
1882   // loops
1883   void set_loop_index(int ix)                    { _loop_index = ix;        }
1884   int  loop_index() const                        { return _loop_index;      }
1885 
1886   // merging
1887   bool try_merge(ValueStack* state);             // try to merge states at block begin
1888   void merge(ValueStack* state)                  { bool b = try_merge(state); assert(b, "merge failed"); }
1889 
1890   // debugging
1891   void print_block()                             PRODUCT_RETURN;
1892   void print_block(InstructionPrinter& ip, bool live_only = false) PRODUCT_RETURN;
1893 };
1894 
1895 
1896 BASE(BlockEnd, StateSplit)
1897  private:
1898   BlockList*  _sux;
1899 
1900  protected:
1901   BlockList* sux() const                         { return _sux; }
1902 
1903   void set_sux(BlockList* sux) {
1904 #ifdef ASSERT
1905     assert(sux != NULL, "sux must exist");
1906     for (int i = sux->length() - 1; i >= 0; i--) assert(sux->at(i) != NULL, "sux must exist");
1907 #endif
1908     _sux = sux;
1909   }
1910 
1911  public:
1912   // creation
1913   BlockEnd(ValueType* type, ValueStack* state_before, bool is_safepoint)
1914   : StateSplit(type, state_before)
1915   , _sux(NULL)
1916   {
1917     set_flag(IsSafepointFlag, is_safepoint);
1918   }
1919 
1920   // accessors
1921   bool is_safepoint() const                      { return check_flag(IsSafepointFlag); }
1922   // For compatibility with old code, for new code use block()
1923   BlockBegin* begin() const                      { return _block; }
1924 
1925   // manipulation
1926   void set_begin(BlockBegin* begin);
1927 
1928   // successors
1929   int number_of_sux() const                      { return _sux != NULL ? _sux->length() : 0; }
1930   BlockBegin* sux_at(int i) const                { return _sux->at(i); }
1931   BlockBegin* default_sux() const                { return sux_at(number_of_sux() - 1); }
1932   BlockBegin** addr_sux_at(int i) const          { return _sux->adr_at(i); }
1933   int sux_index(BlockBegin* sux) const           { return _sux->find(sux); }
1934   void substitute_sux(BlockBegin* old_sux, BlockBegin* new_sux);
1935 };
1936 
1937 
1938 LEAF(Goto, BlockEnd)
1939  public:
1940   enum Direction {
1941     none,            // Just a regular goto
1942     taken, not_taken // Goto produced from If
1943   };
1944  private:
1945   ciMethod*   _profiled_method;
1946   int         _profiled_bci;
1947   Direction   _direction;
1948  public:
1949   // creation
1950   Goto(BlockBegin* sux, ValueStack* state_before, bool is_safepoint = false)
1951     : BlockEnd(illegalType, state_before, is_safepoint)
1952     , _profiled_method(NULL)
1953     , _profiled_bci(0)
1954     , _direction(none) {
1955     BlockList* s = new BlockList(1);
1956     s->append(sux);
1957     set_sux(s);
1958   }
1959 
1960   Goto(BlockBegin* sux, bool is_safepoint) : BlockEnd(illegalType, NULL, is_safepoint)
1961                                            , _profiled_method(NULL)
1962                                            , _profiled_bci(0)
1963                                            , _direction(none) {
1964     BlockList* s = new BlockList(1);
1965     s->append(sux);
1966     set_sux(s);
1967   }
1968 
1969   bool should_profile() const                    { return check_flag(ProfileMDOFlag); }
1970   ciMethod* profiled_method() const              { return _profiled_method; } // set only for profiled branches
1971   int profiled_bci() const                       { return _profiled_bci; }
1972   Direction direction() const                    { return _direction; }
1973 
1974   void set_should_profile(bool value)            { set_flag(ProfileMDOFlag, value); }
1975   void set_profiled_method(ciMethod* method)     { _profiled_method = method; }
1976   void set_profiled_bci(int bci)                 { _profiled_bci = bci; }
1977   void set_direction(Direction d)                { _direction = d; }
1978 };
1979 
1980 #ifdef ASSERT
1981 LEAF(Assert, Instruction)
1982   private:
1983   Value       _x;
1984   Condition   _cond;
1985   Value       _y;
1986   char        *_message;
1987 
1988  public:
1989   // creation
1990   // unordered_is_true is valid for float/double compares only
1991    Assert(Value x, Condition cond, bool unordered_is_true, Value y);
1992 
1993   // accessors
1994   Value x() const                                { return _x; }
1995   Condition cond() const                         { return _cond; }
1996   bool unordered_is_true() const                 { return check_flag(UnorderedIsTrueFlag); }
1997   Value y() const                                { return _y; }
1998   const char *message() const                    { return _message; }
1999 
2000   // generic
2001   virtual void input_values_do(ValueVisitor* f)  { f->visit(&_x); f->visit(&_y); }
2002 };
2003 #endif
2004 
2005 LEAF(RangeCheckPredicate, StateSplit)
2006  private:
2007   Value       _x;
2008   Condition   _cond;
2009   Value       _y;
2010 
2011   void check_state();
2012 
2013  public:
2014   // creation
2015   // unordered_is_true is valid for float/double compares only
2016    RangeCheckPredicate(Value x, Condition cond, bool unordered_is_true, Value y, ValueStack* state) : StateSplit(illegalType)
2017   , _x(x)
2018   , _cond(cond)
2019   , _y(y)
2020   {
2021     ASSERT_VALUES
2022     set_flag(UnorderedIsTrueFlag, unordered_is_true);
2023     assert(x->type()->tag() == y->type()->tag(), "types must match");
2024     this->set_state(state);
2025     check_state();
2026   }
2027 
2028   // Always deoptimize
2029   RangeCheckPredicate(ValueStack* state) : StateSplit(illegalType)
2030   {
2031     this->set_state(state);
2032     _x = _y = NULL;
2033     check_state();
2034   }
2035 
2036   // accessors
2037   Value x() const                                { return _x; }
2038   Condition cond() const                         { return _cond; }
2039   bool unordered_is_true() const                 { return check_flag(UnorderedIsTrueFlag); }
2040   Value y() const                                { return _y; }
2041 
2042   void always_fail()                             { _x = _y = NULL; }
2043 
2044   // generic
2045   virtual void input_values_do(ValueVisitor* f)  { StateSplit::input_values_do(f); f->visit(&_x); f->visit(&_y); }
2046   HASHING3(RangeCheckPredicate, true, x()->subst(), y()->subst(), cond())
2047 };
2048 
2049 LEAF(If, BlockEnd)
2050  private:
2051   Value       _x;
2052   Condition   _cond;
2053   Value       _y;
2054   ciMethod*   _profiled_method;
2055   int         _profiled_bci; // Canonicalizer may alter bci of If node
2056   bool        _swapped;      // Is the order reversed with respect to the original If in the
2057                              // bytecode stream?
2058  public:
2059   // creation
2060   // unordered_is_true is valid for float/double compares only
2061   If(Value x, Condition cond, bool unordered_is_true, Value y, BlockBegin* tsux, BlockBegin* fsux, ValueStack* state_before, bool is_safepoint)
2062     : BlockEnd(illegalType, state_before, is_safepoint)
2063   , _x(x)
2064   , _cond(cond)
2065   , _y(y)
2066   , _profiled_method(NULL)
2067   , _profiled_bci(0)
2068   , _swapped(false)
2069   {
2070     ASSERT_VALUES
2071     set_flag(UnorderedIsTrueFlag, unordered_is_true);
2072     assert(x->type()->tag() == y->type()->tag(), "types must match");
2073     BlockList* s = new BlockList(2);
2074     s->append(tsux);
2075     s->append(fsux);
2076     set_sux(s);
2077   }
2078 
2079   // accessors
2080   Value x() const                                { return _x; }
2081   Condition cond() const                         { return _cond; }
2082   bool unordered_is_true() const                 { return check_flag(UnorderedIsTrueFlag); }
2083   Value y() const                                { return _y; }
2084   BlockBegin* sux_for(bool is_true) const        { return sux_at(is_true ? 0 : 1); }
2085   BlockBegin* tsux() const                       { return sux_for(true); }
2086   BlockBegin* fsux() const                       { return sux_for(false); }
2087   BlockBegin* usux() const                       { return sux_for(unordered_is_true()); }
2088   bool should_profile() const                    { return check_flag(ProfileMDOFlag); }
2089   ciMethod* profiled_method() const              { return _profiled_method; } // set only for profiled branches
2090   int profiled_bci() const                       { return _profiled_bci; }    // set for profiled branches and tiered
2091   bool is_swapped() const                        { return _swapped; }
2092 
2093   // manipulation
2094   void swap_operands() {
2095     Value t = _x; _x = _y; _y = t;
2096     _cond = mirror(_cond);
2097   }
2098 
2099   void swap_sux() {
2100     assert(number_of_sux() == 2, "wrong number of successors");
2101     BlockList* s = sux();
2102     BlockBegin* t = s->at(0); s->at_put(0, s->at(1)); s->at_put(1, t);
2103     _cond = negate(_cond);
2104     set_flag(UnorderedIsTrueFlag, !check_flag(UnorderedIsTrueFlag));
2105   }
2106 
2107   void set_should_profile(bool value)             { set_flag(ProfileMDOFlag, value); }
2108   void set_profiled_method(ciMethod* method)      { _profiled_method = method; }
2109   void set_profiled_bci(int bci)                  { _profiled_bci = bci;       }
2110   void set_swapped(bool value)                    { _swapped = value;         }
2111   // generic
2112   virtual void input_values_do(ValueVisitor* f)   { BlockEnd::input_values_do(f); f->visit(&_x); f->visit(&_y); }
2113 };
2114 
2115 
2116 LEAF(IfInstanceOf, BlockEnd)
2117  private:
2118   ciKlass* _klass;
2119   Value    _obj;
2120   bool     _test_is_instance;                    // jump if instance
2121   int      _instanceof_bci;
2122 
2123  public:
2124   IfInstanceOf(ciKlass* klass, Value obj, bool test_is_instance, int instanceof_bci, BlockBegin* tsux, BlockBegin* fsux)
2125   : BlockEnd(illegalType, NULL, false) // temporary set to false
2126   , _klass(klass)
2127   , _obj(obj)
2128   , _test_is_instance(test_is_instance)
2129   , _instanceof_bci(instanceof_bci)
2130   {
2131     ASSERT_VALUES
2132     assert(instanceof_bci >= 0, "illegal bci");
2133     BlockList* s = new BlockList(2);
2134     s->append(tsux);
2135     s->append(fsux);
2136     set_sux(s);
2137   }
2138 
2139   // accessors
2140   //
2141   // Note 1: If test_is_instance() is true, IfInstanceOf tests if obj *is* an
2142   //         instance of klass; otherwise it tests if it is *not* and instance
2143   //         of klass.
2144   //
2145   // Note 2: IfInstanceOf instructions are created by combining an InstanceOf
2146   //         and an If instruction. The IfInstanceOf bci() corresponds to the
2147   //         bci that the If would have had; the (this->) instanceof_bci() is
2148   //         the bci of the original InstanceOf instruction.
2149   ciKlass* klass() const                         { return _klass; }
2150   Value obj() const                              { return _obj; }
2151   int instanceof_bci() const                     { return _instanceof_bci; }
2152   bool test_is_instance() const                  { return _test_is_instance; }
2153   BlockBegin* sux_for(bool is_true) const        { return sux_at(is_true ? 0 : 1); }
2154   BlockBegin* tsux() const                       { return sux_for(true); }
2155   BlockBegin* fsux() const                       { return sux_for(false); }
2156 
2157   // manipulation
2158   void swap_sux() {
2159     assert(number_of_sux() == 2, "wrong number of successors");
2160     BlockList* s = sux();
2161     BlockBegin* t = s->at(0); s->at_put(0, s->at(1)); s->at_put(1, t);
2162     _test_is_instance = !_test_is_instance;
2163   }
2164 
2165   // generic
2166   virtual void input_values_do(ValueVisitor* f)   { BlockEnd::input_values_do(f); f->visit(&_obj); }
2167 };
2168 
2169 
2170 BASE(Switch, BlockEnd)
2171  private:
2172   Value       _tag;
2173 
2174  public:
2175   // creation
2176   Switch(Value tag, BlockList* sux, ValueStack* state_before, bool is_safepoint)
2177   : BlockEnd(illegalType, state_before, is_safepoint)
2178   , _tag(tag) {
2179     ASSERT_VALUES
2180     set_sux(sux);
2181   }
2182 
2183   // accessors
2184   Value tag() const                              { return _tag; }
2185   int length() const                             { return number_of_sux() - 1; }
2186 
2187   virtual bool needs_exception_state() const     { return false; }
2188 
2189   // generic
2190   virtual void input_values_do(ValueVisitor* f)   { BlockEnd::input_values_do(f); f->visit(&_tag); }
2191 };
2192 
2193 
2194 LEAF(TableSwitch, Switch)
2195  private:
2196   int _lo_key;
2197 
2198  public:
2199   // creation
2200   TableSwitch(Value tag, BlockList* sux, int lo_key, ValueStack* state_before, bool is_safepoint)
2201     : Switch(tag, sux, state_before, is_safepoint)
2202   , _lo_key(lo_key) { assert(_lo_key <= hi_key(), "integer overflow"); }
2203 
2204   // accessors
2205   int lo_key() const                             { return _lo_key; }
2206   int hi_key() const                             { return _lo_key + (length() - 1); }
2207 };
2208 
2209 
2210 LEAF(LookupSwitch, Switch)
2211  private:
2212   intArray* _keys;
2213 
2214  public:
2215   // creation
2216   LookupSwitch(Value tag, BlockList* sux, intArray* keys, ValueStack* state_before, bool is_safepoint)
2217   : Switch(tag, sux, state_before, is_safepoint)
2218   , _keys(keys) {
2219     assert(keys != NULL, "keys must exist");
2220     assert(keys->length() == length(), "sux & keys have incompatible lengths");
2221   }
2222 
2223   // accessors
2224   int key_at(int i) const                        { return _keys->at(i); }
2225 };
2226 
2227 
2228 LEAF(Return, BlockEnd)
2229  private:
2230   Value _result;
2231 
2232  public:
2233   // creation
2234   Return(Value result) :
2235     BlockEnd(result == NULL ? voidType : result->type()->base(), NULL, true),
2236     _result(result) {}
2237 
2238   // accessors
2239   Value result() const                           { return _result; }
2240   bool has_result() const                        { return result() != NULL; }
2241 
2242   // generic
2243   virtual void input_values_do(ValueVisitor* f) {
2244     BlockEnd::input_values_do(f);
2245     if (has_result()) f->visit(&_result);
2246   }
2247 };
2248 
2249 
2250 LEAF(Throw, BlockEnd)
2251  private:
2252   Value _exception;
2253 
2254  public:
2255   // creation
2256   Throw(Value exception, ValueStack* state_before) : BlockEnd(illegalType, state_before, true), _exception(exception) {
2257     ASSERT_VALUES
2258   }
2259 
2260   // accessors
2261   Value exception() const                        { return _exception; }
2262 
2263   // generic
2264   virtual bool can_trap() const                  { return true; }
2265   virtual void input_values_do(ValueVisitor* f)   { BlockEnd::input_values_do(f); f->visit(&_exception); }
2266 };
2267 
2268 
2269 LEAF(Base, BlockEnd)
2270  public:
2271   // creation
2272   Base(BlockBegin* std_entry, BlockBegin* osr_entry) : BlockEnd(illegalType, NULL, false) {
2273     assert(std_entry->is_set(BlockBegin::std_entry_flag), "std entry must be flagged");
2274     assert(osr_entry == NULL || osr_entry->is_set(BlockBegin::osr_entry_flag), "osr entry must be flagged");
2275     BlockList* s = new BlockList(2);
2276     if (osr_entry != NULL) s->append(osr_entry);
2277     s->append(std_entry); // must be default sux!
2278     set_sux(s);
2279   }
2280 
2281   // accessors
2282   BlockBegin* std_entry() const                  { return default_sux(); }
2283   BlockBegin* osr_entry() const                  { return number_of_sux() < 2 ? NULL : sux_at(0); }
2284 };
2285 
2286 
2287 LEAF(OsrEntry, Instruction)
2288  public:
2289   // creation
2290 #ifdef _LP64
2291   OsrEntry() : Instruction(longType) { pin(); }
2292 #else
2293   OsrEntry() : Instruction(intType)  { pin(); }
2294 #endif
2295 
2296   // generic
2297   virtual void input_values_do(ValueVisitor* f)   { }
2298 };
2299 
2300 
2301 // Models the incoming exception at a catch site
2302 LEAF(ExceptionObject, Instruction)
2303  public:
2304   // creation
2305   ExceptionObject() : Instruction(objectType) {
2306     pin();
2307   }
2308 
2309   // generic
2310   virtual void input_values_do(ValueVisitor* f)   { }
2311 };
2312 
2313 
2314 // Models needed rounding for floating-point values on Intel.
2315 // Currently only used to represent rounding of double-precision
2316 // values stored into local variables, but could be used to model
2317 // intermediate rounding of single-precision values as well.
2318 LEAF(RoundFP, Instruction)
2319  private:
2320   Value _input;             // floating-point value to be rounded
2321 
2322  public:
2323   RoundFP(Value input)
2324   : Instruction(input->type()) // Note: should not be used for constants
2325   , _input(input)
2326   {
2327     ASSERT_VALUES
2328   }
2329 
2330   // accessors
2331   Value input() const                            { return _input; }
2332 
2333   // generic
2334   virtual void input_values_do(ValueVisitor* f)   { f->visit(&_input); }
2335 };
2336 
2337 
2338 BASE(UnsafeOp, Instruction)
2339  private:
2340   BasicType _basic_type;    // ValueType can not express byte-sized integers
2341 
2342  protected:
2343   // creation
2344   UnsafeOp(BasicType basic_type, bool is_put)
2345   : Instruction(is_put ? voidType : as_ValueType(basic_type))
2346   , _basic_type(basic_type)
2347   {
2348     //Note:  Unsafe ops are not not guaranteed to throw NPE.
2349     // Convservatively, Unsafe operations must be pinned though we could be
2350     // looser about this if we wanted to..
2351     pin();
2352   }
2353 
2354  public:
2355   // accessors
2356   BasicType basic_type()                         { return _basic_type; }
2357 
2358   // generic
2359   virtual void input_values_do(ValueVisitor* f)   { }
2360 };
2361 
2362 
2363 BASE(UnsafeRawOp, UnsafeOp)
2364  private:
2365   Value _base;                                   // Base address (a Java long)
2366   Value _index;                                  // Index if computed by optimizer; initialized to NULL
2367   int   _log2_scale;                             // Scale factor: 0, 1, 2, or 3.
2368                                                  // Indicates log2 of number of bytes (1, 2, 4, or 8)
2369                                                  // to scale index by.
2370 
2371  protected:
2372   UnsafeRawOp(BasicType basic_type, Value addr, bool is_put)
2373   : UnsafeOp(basic_type, is_put)
2374   , _base(addr)
2375   , _index(NULL)
2376   , _log2_scale(0)
2377   {
2378     // Can not use ASSERT_VALUES because index may be NULL
2379     assert(addr != NULL && addr->type()->is_long(), "just checking");
2380   }
2381 
2382   UnsafeRawOp(BasicType basic_type, Value base, Value index, int log2_scale, bool is_put)
2383   : UnsafeOp(basic_type, is_put)
2384   , _base(base)
2385   , _index(index)
2386   , _log2_scale(log2_scale)
2387   {
2388   }
2389 
2390  public:
2391   // accessors
2392   Value base()                                   { return _base; }
2393   Value index()                                  { return _index; }
2394   bool  has_index()                              { return (_index != NULL); }
2395   int   log2_scale()                             { return _log2_scale; }
2396 
2397   // setters
2398   void set_base (Value base)                     { _base  = base; }
2399   void set_index(Value index)                    { _index = index; }
2400   void set_log2_scale(int log2_scale)            { _log2_scale = log2_scale; }
2401 
2402   // generic
2403   virtual void input_values_do(ValueVisitor* f)   { UnsafeOp::input_values_do(f);
2404                                                    f->visit(&_base);
2405                                                    if (has_index()) f->visit(&_index); }
2406 };
2407 
2408 
2409 LEAF(UnsafeGetRaw, UnsafeRawOp)
2410  private:
2411  bool _may_be_unaligned, _is_wide;  // For OSREntry
2412 
2413  public:
2414  UnsafeGetRaw(BasicType basic_type, Value addr, bool may_be_unaligned, bool is_wide = false)
2415   : UnsafeRawOp(basic_type, addr, false) {
2416     _may_be_unaligned = may_be_unaligned;
2417     _is_wide = is_wide;
2418   }
2419 
2420  UnsafeGetRaw(BasicType basic_type, Value base, Value index, int log2_scale, bool may_be_unaligned, bool is_wide = false)
2421   : UnsafeRawOp(basic_type, base, index, log2_scale, false) {
2422     _may_be_unaligned = may_be_unaligned;
2423     _is_wide = is_wide;
2424   }
2425 
2426   bool may_be_unaligned()                         { return _may_be_unaligned; }
2427   bool is_wide()                                  { return _is_wide; }
2428 };
2429 
2430 
2431 LEAF(UnsafePutRaw, UnsafeRawOp)
2432  private:
2433   Value _value;                                  // Value to be stored
2434 
2435  public:
2436   UnsafePutRaw(BasicType basic_type, Value addr, Value value)
2437   : UnsafeRawOp(basic_type, addr, true)
2438   , _value(value)
2439   {
2440     assert(value != NULL, "just checking");
2441     ASSERT_VALUES
2442   }
2443 
2444   UnsafePutRaw(BasicType basic_type, Value base, Value index, int log2_scale, Value value)
2445   : UnsafeRawOp(basic_type, base, index, log2_scale, true)
2446   , _value(value)
2447   {
2448     assert(value != NULL, "just checking");
2449     ASSERT_VALUES
2450   }
2451 
2452   // accessors
2453   Value value()                                  { return _value; }
2454 
2455   // generic
2456   virtual void input_values_do(ValueVisitor* f)   { UnsafeRawOp::input_values_do(f);
2457                                                    f->visit(&_value); }
2458 };
2459 
2460 
2461 BASE(UnsafeObjectOp, UnsafeOp)
2462  private:
2463   Value _object;                                 // Object to be fetched from or mutated
2464   Value _offset;                                 // Offset within object
2465   bool  _is_volatile;                            // true if volatile - dl/JSR166
2466  public:
2467   UnsafeObjectOp(BasicType basic_type, Value object, Value offset, bool is_put, bool is_volatile)
2468     : UnsafeOp(basic_type, is_put), _object(object), _offset(offset), _is_volatile(is_volatile)
2469   {
2470   }
2471 
2472   // accessors
2473   Value object()                                 { return _object; }
2474   Value offset()                                 { return _offset; }
2475   bool  is_volatile()                            { return _is_volatile; }
2476   // generic
2477   virtual void input_values_do(ValueVisitor* f)   { UnsafeOp::input_values_do(f);
2478                                                    f->visit(&_object);
2479                                                    f->visit(&_offset); }
2480 };
2481 
2482 
2483 LEAF(UnsafeGetObject, UnsafeObjectOp)
2484  public:
2485   UnsafeGetObject(BasicType basic_type, Value object, Value offset, bool is_volatile)
2486   : UnsafeObjectOp(basic_type, object, offset, false, is_volatile)
2487   {
2488     ASSERT_VALUES
2489   }
2490 };
2491 
2492 
2493 LEAF(UnsafePutObject, UnsafeObjectOp)
2494  private:
2495   Value _value;                                  // Value to be stored
2496  public:
2497   UnsafePutObject(BasicType basic_type, Value object, Value offset, Value value, bool is_volatile)
2498   : UnsafeObjectOp(basic_type, object, offset, true, is_volatile)
2499     , _value(value)
2500   {
2501     ASSERT_VALUES
2502   }
2503 
2504   // accessors
2505   Value value()                                  { return _value; }
2506 
2507   // generic
2508   virtual void input_values_do(ValueVisitor* f)   { UnsafeObjectOp::input_values_do(f);
2509                                                    f->visit(&_value); }
2510 };
2511 
2512 LEAF(UnsafeGetAndSetObject, UnsafeObjectOp)
2513  private:
2514   Value _value;                                  // Value to be stored
2515   bool  _is_add;
2516  public:
2517   UnsafeGetAndSetObject(BasicType basic_type, Value object, Value offset, Value value, bool is_add)
2518   : UnsafeObjectOp(basic_type, object, offset, false, false)
2519     , _value(value)
2520     , _is_add(is_add)
2521   {
2522     ASSERT_VALUES
2523   }
2524 
2525   // accessors
2526   bool is_add() const                            { return _is_add; }
2527   Value value()                                  { return _value; }
2528 
2529   // generic
2530   virtual void input_values_do(ValueVisitor* f)   { UnsafeObjectOp::input_values_do(f);
2531                                                    f->visit(&_value); }
2532 };
2533 
2534 LEAF(ProfileCall, Instruction)
2535  private:
2536   ciMethod*        _method;
2537   int              _bci_of_invoke;
2538   ciMethod*        _callee;         // the method that is called at the given bci
2539   Value            _recv;
2540   ciKlass*         _known_holder;
2541   Values*          _obj_args;       // arguments for type profiling
2542   ArgsNonNullState _nonnull_state;  // Do we know whether some arguments are never null?
2543   bool             _inlined;        // Are we profiling a call that is inlined
2544 
2545  public:
2546   ProfileCall(ciMethod* method, int bci, ciMethod* callee, Value recv, ciKlass* known_holder, Values* obj_args, bool inlined)
2547     : Instruction(voidType)
2548     , _method(method)
2549     , _bci_of_invoke(bci)
2550     , _callee(callee)
2551     , _recv(recv)
2552     , _known_holder(known_holder)
2553     , _obj_args(obj_args)
2554     , _inlined(inlined)
2555   {
2556     // The ProfileCall has side-effects and must occur precisely where located
2557     pin();
2558   }
2559 
2560   ciMethod* method()             const { return _method; }
2561   int bci_of_invoke()            const { return _bci_of_invoke; }
2562   ciMethod* callee()             const { return _callee; }
2563   Value recv()                   const { return _recv; }
2564   ciKlass* known_holder()        const { return _known_holder; }
2565   int nb_profiled_args()         const { return _obj_args == NULL ? 0 : _obj_args->length(); }
2566   Value profiled_arg_at(int i)   const { return _obj_args->at(i); }
2567   bool arg_needs_null_check(int i) const {
2568     return _nonnull_state.arg_needs_null_check(i);
2569   }
2570   bool inlined()                 const { return _inlined; }
2571 
2572   void set_arg_needs_null_check(int i, bool check) {
2573     _nonnull_state.set_arg_needs_null_check(i, check);
2574   }
2575 
2576   virtual void input_values_do(ValueVisitor* f)   {
2577     if (_recv != NULL) {
2578       f->visit(&_recv);
2579     }
2580     for (int i = 0; i < nb_profiled_args(); i++) {
2581       f->visit(_obj_args->adr_at(i));
2582     }
2583   }
2584 };
2585 
2586 LEAF(ProfileReturnType, Instruction)
2587  private:
2588   ciMethod*        _method;
2589   ciMethod*        _callee;
2590   int              _bci_of_invoke;
2591   Value            _ret;
2592 
2593  public:
2594   ProfileReturnType(ciMethod* method, int bci, ciMethod* callee, Value ret)
2595     : Instruction(voidType)
2596     , _method(method)
2597     , _callee(callee)
2598     , _bci_of_invoke(bci)
2599     , _ret(ret)
2600   {
2601     set_needs_null_check(true);
2602     // The ProfileType has side-effects and must occur precisely where located
2603     pin();
2604   }
2605 
2606   ciMethod* method()             const { return _method; }
2607   ciMethod* callee()             const { return _callee; }
2608   int bci_of_invoke()            const { return _bci_of_invoke; }
2609   Value ret()                    const { return _ret; }
2610 
2611   virtual void input_values_do(ValueVisitor* f)   {
2612     if (_ret != NULL) {
2613       f->visit(&_ret);
2614     }
2615   }
2616 };
2617 
2618 // Call some C runtime function that doesn't safepoint,
2619 // optionally passing the current thread as the first argument.
2620 LEAF(RuntimeCall, Instruction)
2621  private:
2622   const char* _entry_name;
2623   address     _entry;
2624   Values*     _args;
2625   bool        _pass_thread;  // Pass the JavaThread* as an implicit first argument
2626 
2627  public:
2628   RuntimeCall(ValueType* type, const char* entry_name, address entry, Values* args, bool pass_thread = true)
2629     : Instruction(type)
2630     , _entry_name(entry_name)
2631     , _entry(entry)
2632     , _args(args)
2633     , _pass_thread(pass_thread) {
2634     ASSERT_VALUES
2635     pin();
2636   }
2637 
2638   const char* entry_name() const  { return _entry_name; }
2639   address entry() const           { return _entry; }
2640   int number_of_arguments() const { return _args->length(); }
2641   Value argument_at(int i) const  { return _args->at(i); }
2642   bool pass_thread() const        { return _pass_thread; }
2643 
2644   virtual void input_values_do(ValueVisitor* f)   {
2645     for (int i = 0; i < _args->length(); i++) f->visit(_args->adr_at(i));
2646   }
2647 };
2648 
2649 // Use to trip invocation counter of an inlined method
2650 
2651 LEAF(ProfileInvoke, Instruction)
2652  private:
2653   ciMethod*   _inlinee;
2654   ValueStack* _state;
2655 
2656  public:
2657   ProfileInvoke(ciMethod* inlinee,  ValueStack* state)
2658     : Instruction(voidType)
2659     , _inlinee(inlinee)
2660     , _state(state)
2661   {
2662     // The ProfileInvoke has side-effects and must occur precisely where located QQQ???
2663     pin();
2664   }
2665 
2666   ciMethod* inlinee()      { return _inlinee; }
2667   ValueStack* state()      { return _state; }
2668   virtual void input_values_do(ValueVisitor*)   {}
2669   virtual void state_values_do(ValueVisitor*);
2670 };
2671 
2672 LEAF(MemBar, Instruction)
2673  private:
2674   LIR_Code _code;
2675 
2676  public:
2677   MemBar(LIR_Code code)
2678     : Instruction(voidType)
2679     , _code(code)
2680   {
2681     pin();
2682   }
2683 
2684   LIR_Code code()           { return _code; }
2685 
2686   virtual void input_values_do(ValueVisitor*)   {}
2687 };
2688 
2689 class BlockPair: public CompilationResourceObj {
2690  private:
2691   BlockBegin* _from;
2692   BlockBegin* _to;
2693  public:
2694   BlockPair(BlockBegin* from, BlockBegin* to): _from(from), _to(to) {}
2695   BlockBegin* from() const { return _from; }
2696   BlockBegin* to() const   { return _to;   }
2697   bool is_same(BlockBegin* from, BlockBegin* to) const { return  _from == from && _to == to; }
2698   bool is_same(BlockPair* p) const { return  _from == p->from() && _to == p->to(); }
2699   void set_to(BlockBegin* b)   { _to = b; }
2700   void set_from(BlockBegin* b) { _from = b; }
2701 };
2702 
2703 typedef GrowableArray<BlockPair*> BlockPairList;
2704 
2705 inline int         BlockBegin::number_of_sux() const            { assert(_end == NULL || _end->number_of_sux() == _successors.length(), "mismatch"); return _successors.length(); }
2706 inline BlockBegin* BlockBegin::sux_at(int i) const              { assert(_end == NULL || _end->sux_at(i) == _successors.at(i), "mismatch");          return _successors.at(i); }
2707 inline void        BlockBegin::add_successor(BlockBegin* sux)   { assert(_end == NULL, "Would create mismatch with successors of BlockEnd");         _successors.append(sux); }
2708 
2709 #undef ASSERT_VALUES
2710 
2711 #endif // SHARE_C1_C1_INSTRUCTION_HPP