hotspot/src/share/vm/c1/c1_Canonicalizer.hpp
author iveresov
Thu, 02 Dec 2010 17:21:12 -0800
changeset 7432 f06f1253c317
parent 7397 5b173b4ca846
child 8065 7ca689ce3d32
permissions -rw-r--r--
7003554: (tiered) assert(is_null_object() || handle() != NULL) failed: cannot embed null pointer Summary: C1 with profiling doesn't check whether the MDO has been really allocated, which can silently fail if the perm gen is full. The solution is to check if the allocation failed and bailout out of inlining or compilation. Reviewed-by: kvn, never
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 5547
diff changeset
     2
 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    25
#ifndef SHARE_VM_C1_C1_CANONICALIZER_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    26
#define SHARE_VM_C1_C1_CANONICALIZER_HPP
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    27
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    28
#include "c1/c1_Instruction.hpp"
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
    29
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
class Canonicalizer: InstructionVisitor {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
 private:
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 5547
diff changeset
    32
  Compilation *_compilation;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
  Instruction* _canonical;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
  int _bci;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 5547
diff changeset
    36
  Compilation *compilation()                     { return _compilation; }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
  void set_canonical(Value x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
  void set_bci(int bci)                          { _bci = bci; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
  void set_constant(jint x)                      { set_canonical(new Constant(new IntConstant(x))); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
  void set_constant(jlong x)                     { set_canonical(new Constant(new LongConstant(x))); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
  void set_constant(jfloat x)                    { set_canonical(new Constant(new FloatConstant(x))); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
  void set_constant(jdouble x)                   { set_canonical(new Constant(new DoubleConstant(x))); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
  void move_const_to_right(Op2* x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
  void do_Op2(Op2* x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
  void do_UnsafeRawOp(UnsafeRawOp* x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
  void unsafe_raw_match(UnsafeRawOp* x,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
                        Instruction** base,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
                        Instruction** index,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
                        int* scale);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
 public:
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 5547
diff changeset
    53
  Canonicalizer(Compilation* c, Value x, int bci) : _compilation(c), _canonical(x), _bci(bci) {
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 5547
diff changeset
    54
    if (CanonicalizeNodes) x->visit(this);
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 5547
diff changeset
    55
  }
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
  Value canonical() const                        { return _canonical; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  int bci() const                                { return _bci; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
  virtual void do_Phi            (Phi*             x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
  virtual void do_Constant       (Constant*        x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
  virtual void do_Local          (Local*           x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
  virtual void do_LoadField      (LoadField*       x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
  virtual void do_StoreField     (StoreField*      x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
  virtual void do_ArrayLength    (ArrayLength*     x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
  virtual void do_LoadIndexed    (LoadIndexed*     x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
  virtual void do_StoreIndexed   (StoreIndexed*    x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
  virtual void do_NegateOp       (NegateOp*        x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
  virtual void do_ArithmeticOp   (ArithmeticOp*    x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
  virtual void do_ShiftOp        (ShiftOp*         x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
  virtual void do_LogicOp        (LogicOp*         x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
  virtual void do_CompareOp      (CompareOp*       x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
  virtual void do_IfOp           (IfOp*            x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
  virtual void do_IfInstanceOf   (IfInstanceOf*    x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
  virtual void do_Convert        (Convert*         x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
  virtual void do_NullCheck      (NullCheck*       x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
  virtual void do_Invoke         (Invoke*          x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
  virtual void do_NewInstance    (NewInstance*     x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
  virtual void do_NewTypeArray   (NewTypeArray*    x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
  virtual void do_NewObjectArray (NewObjectArray*  x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
  virtual void do_NewMultiArray  (NewMultiArray*   x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
  virtual void do_CheckCast      (CheckCast*       x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
  virtual void do_InstanceOf     (InstanceOf*      x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
  virtual void do_MonitorEnter   (MonitorEnter*    x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
  virtual void do_MonitorExit    (MonitorExit*     x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
  virtual void do_Intrinsic      (Intrinsic*       x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
  virtual void do_BlockBegin     (BlockBegin*      x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
  virtual void do_Goto           (Goto*            x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
  virtual void do_If             (If*              x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
  virtual void do_TableSwitch    (TableSwitch*     x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
  virtual void do_LookupSwitch   (LookupSwitch*    x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
  virtual void do_Return         (Return*          x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
  virtual void do_Throw          (Throw*           x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
  virtual void do_Base           (Base*            x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
  virtual void do_OsrEntry       (OsrEntry*        x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
  virtual void do_ExceptionObject(ExceptionObject* x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
  virtual void do_RoundFP        (RoundFP*         x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
  virtual void do_UnsafeGetRaw   (UnsafeGetRaw*    x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
  virtual void do_UnsafePutRaw   (UnsafePutRaw*    x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
  virtual void do_UnsafeGetObject(UnsafeGetObject* x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
  virtual void do_UnsafePutObject(UnsafePutObject* x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
  virtual void do_UnsafePrefetchRead (UnsafePrefetchRead*  x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
  virtual void do_UnsafePrefetchWrite(UnsafePrefetchWrite* x);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
  virtual void do_ProfileCall    (ProfileCall*     x);
6453
970dc585ab63 6953144: Tiered compilation
iveresov
parents: 5547
diff changeset
   104
  virtual void do_ProfileInvoke  (ProfileInvoke*   x);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
};
7397
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
   106
5b173b4ca846 6989984: Use standard include model for Hospot
stefank
parents: 6453
diff changeset
   107
#endif // SHARE_VM_C1_C1_CANONICALIZER_HPP