src/share/vm/opto/mathexactnode.hpp

Wed, 08 Jan 2014 10:25:50 -0800

author
kvn
date
Wed, 08 Jan 2014 10:25:50 -0800
changeset 6217
849eb7bfceac
parent 6102
b957c650babb
child 6375
085b304a1cc5
permissions
-rw-r--r--

8028468: Add inlining information into ciReplay
Summary: Allow dump and replay inlining for specified method during a program execution.
Reviewed-by: roland, twisti

     1 /*
     2  * Copyright (c) 2013, 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  */
    25 #ifndef SHARE_VM_OPTO_MATHEXACTNODE_HPP
    26 #define SHARE_VM_OPTO_MATHEXACTNODE_HPP
    28 #include "opto/multnode.hpp"
    29 #include "opto/node.hpp"
    30 #include "opto/subnode.hpp"
    31 #include "opto/type.hpp"
    33 class BoolNode;
    34 class IfNode;
    35 class Node;
    37 class PhaseGVN;
    38 class PhaseTransform;
    40 class MathExactNode : public MultiNode {
    41 public:
    42   MathExactNode(Node* ctrl, Node* in1);
    43   MathExactNode(Node* ctrl, Node* in1, Node* in2);
    44   enum {
    45     result_proj_node = 0,
    46     flags_proj_node = 1
    47   };
    48   virtual int Opcode() const;
    49   virtual Node* Identity(PhaseTransform* phase) { return this; }
    50   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape) { return NULL; }
    51   virtual const Type* Value(PhaseTransform* phase) const { return bottom_type(); }
    52   virtual uint hash() const { return NO_HASH; }
    53   virtual bool is_CFG() const { return false; }
    54   virtual uint ideal_reg() const { return NotAMachineReg; }
    56   ProjNode* result_node() const { return proj_out(result_proj_node); }
    57   ProjNode* flags_node() const { return proj_out(flags_proj_node); }
    58   Node* control_node() const;
    59   Node* non_throwing_branch() const;
    60 protected:
    61   IfNode* if_node() const;
    62   BoolNode* bool_node() const;
    63   Node* no_overflow(PhaseGVN *phase, Node* new_result);
    64 };
    66 class MathExactINode : public MathExactNode {
    67  public:
    68   MathExactINode(Node* ctrl, Node* in1) : MathExactNode(ctrl, in1) {}
    69   MathExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactNode(ctrl, in1, in2) {}
    70   virtual int Opcode() const;
    71   virtual Node* match(const ProjNode* proj, const Matcher* m);
    72   virtual const Type* bottom_type() const { return TypeTuple::INT_CC_PAIR; }
    73 };
    75 class MathExactLNode : public MathExactNode {
    76 public:
    77   MathExactLNode(Node* ctrl, Node* in1) : MathExactNode(ctrl, in1) {}
    78   MathExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactNode(ctrl, in1, in2) {}
    79   virtual int Opcode() const;
    80   virtual Node* match(const ProjNode* proj, const Matcher* m);
    81   virtual const Type* bottom_type() const { return TypeTuple::LONG_CC_PAIR; }
    82 };
    84 class AddExactINode : public MathExactINode {
    85 public:
    86   AddExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactINode(ctrl, in1, in2) {}
    87   virtual int Opcode() const;
    88   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
    89 };
    91 class AddExactLNode : public MathExactLNode {
    92 public:
    93   AddExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactLNode(ctrl, in1, in2) {}
    94   virtual int Opcode() const;
    95   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
    96 };
    98 class SubExactINode : public MathExactINode {
    99 public:
   100   SubExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactINode(ctrl, in1, in2) {}
   101   virtual int Opcode() const;
   102   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
   103 };
   105 class SubExactLNode : public MathExactLNode {
   106 public:
   107   SubExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactLNode(ctrl, in1, in2) {}
   108   virtual int Opcode() const;
   109   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
   110 };
   112 class NegExactINode : public MathExactINode {
   113 public:
   114   NegExactINode(Node* ctrl, Node* in1) : MathExactINode(ctrl, in1) {}
   115   virtual int Opcode() const;
   116   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
   117 };
   119 class NegExactLNode : public MathExactLNode {
   120 public:
   121   NegExactLNode(Node* ctrl, Node* in1) : MathExactLNode(ctrl, in1) {}
   122   virtual int Opcode() const;
   123   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
   124 };
   126 class MulExactINode : public MathExactINode {
   127 public:
   128   MulExactINode(Node* ctrl, Node* in1, Node* in2) : MathExactINode(ctrl, in1, in2) {}
   129   virtual int Opcode() const;
   130   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
   131 };
   133 class MulExactLNode : public MathExactLNode {
   134 public:
   135   MulExactLNode(Node* ctrl, Node* in1, Node* in2) : MathExactLNode(ctrl, in1, in2) {}
   136   virtual int Opcode() const;
   137   virtual Node* Ideal(PhaseGVN* phase, bool can_reshape);
   138 };
   140 class FlagsProjNode : public ProjNode {
   141 public:
   142   FlagsProjNode(Node* src, uint con) : ProjNode(src, con) {
   143     init_class_id(Class_FlagsProj);
   144   }
   146   virtual int Opcode() const;
   147   virtual bool is_CFG() const { return false; }
   148   virtual const Type* bottom_type() const { return TypeInt::CC; }
   149   virtual uint ideal_reg() const { return Op_RegFlags; }
   150 };
   153 #endif

mercurial