hotspot/src/share/vm/opto/memnode.hpp
changeset 25930 eae8b7490d2c
parent 24345 616bc709c0e4
child 27637 cf68c0af6882
equal deleted inserted replaced
25929:4fd732076fe1 25930:eae8b7490d2c
     1 /*
     1 /*
     2  * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
     2  * Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     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
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
   331   virtual int Opcode() const;
   331   virtual int Opcode() const;
   332   virtual uint ideal_reg() const { return Op_RegL; }
   332   virtual uint ideal_reg() const { return Op_RegL; }
   333   virtual int store_Opcode() const { return Op_StoreL; }
   333   virtual int store_Opcode() const { return Op_StoreL; }
   334   virtual BasicType memory_type() const { return T_LONG; }
   334   virtual BasicType memory_type() const { return T_LONG; }
   335   bool require_atomic_access() const { return _require_atomic_access; }
   335   bool require_atomic_access() const { return _require_atomic_access; }
   336   static LoadLNode* make_atomic(Compile *C, Node* ctl, Node* mem, Node* adr, const TypePtr* adr_type,
   336   static LoadLNode* make_atomic(Node* ctl, Node* mem, Node* adr, const TypePtr* adr_type,
   337                                 const Type* rt, MemOrd mo);
   337                                 const Type* rt, MemOrd mo);
   338 #ifndef PRODUCT
   338 #ifndef PRODUCT
   339   virtual void dump_spec(outputStream *st) const {
   339   virtual void dump_spec(outputStream *st) const {
   340     LoadNode::dump_spec(st);
   340     LoadNode::dump_spec(st);
   341     if (_require_atomic_access)  st->print(" Atomic!");
   341     if (_require_atomic_access)  st->print(" Atomic!");
   382   virtual int Opcode() const;
   382   virtual int Opcode() const;
   383   virtual uint ideal_reg() const { return Op_RegD; }
   383   virtual uint ideal_reg() const { return Op_RegD; }
   384   virtual int store_Opcode() const { return Op_StoreD; }
   384   virtual int store_Opcode() const { return Op_StoreD; }
   385   virtual BasicType memory_type() const { return T_DOUBLE; }
   385   virtual BasicType memory_type() const { return T_DOUBLE; }
   386   bool require_atomic_access() const { return _require_atomic_access; }
   386   bool require_atomic_access() const { return _require_atomic_access; }
   387   static LoadDNode* make_atomic(Compile *C, Node* ctl, Node* mem, Node* adr, const TypePtr* adr_type,
   387   static LoadDNode* make_atomic(Node* ctl, Node* mem, Node* adr, const TypePtr* adr_type,
   388                                 const Type* rt, MemOrd mo);
   388                                 const Type* rt, MemOrd mo);
   389 #ifndef PRODUCT
   389 #ifndef PRODUCT
   390   virtual void dump_spec(outputStream *st) const {
   390   virtual void dump_spec(outputStream *st) const {
   391     LoadNode::dump_spec(st);
   391     LoadNode::dump_spec(st);
   392     if (_require_atomic_access)  st->print(" Atomic!");
   392     if (_require_atomic_access)  st->print(" Atomic!");
   591   StoreLNode(Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, MemOrd mo, bool require_atomic_access = false)
   591   StoreLNode(Node *c, Node *mem, Node *adr, const TypePtr* at, Node *val, MemOrd mo, bool require_atomic_access = false)
   592     : StoreNode(c, mem, adr, at, val, mo), _require_atomic_access(require_atomic_access) {}
   592     : StoreNode(c, mem, adr, at, val, mo), _require_atomic_access(require_atomic_access) {}
   593   virtual int Opcode() const;
   593   virtual int Opcode() const;
   594   virtual BasicType memory_type() const { return T_LONG; }
   594   virtual BasicType memory_type() const { return T_LONG; }
   595   bool require_atomic_access() const { return _require_atomic_access; }
   595   bool require_atomic_access() const { return _require_atomic_access; }
   596   static StoreLNode* make_atomic(Compile *C, Node* ctl, Node* mem, Node* adr, const TypePtr* adr_type, Node* val, MemOrd mo);
   596   static StoreLNode* make_atomic(Node* ctl, Node* mem, Node* adr, const TypePtr* adr_type, Node* val, MemOrd mo);
   597 #ifndef PRODUCT
   597 #ifndef PRODUCT
   598   virtual void dump_spec(outputStream *st) const {
   598   virtual void dump_spec(outputStream *st) const {
   599     StoreNode::dump_spec(st);
   599     StoreNode::dump_spec(st);
   600     if (_require_atomic_access)  st->print(" Atomic!");
   600     if (_require_atomic_access)  st->print(" Atomic!");
   601   }
   601   }
   627              MemOrd mo, bool require_atomic_access = false)
   627              MemOrd mo, bool require_atomic_access = false)
   628     : StoreNode(c, mem, adr, at, val, mo), _require_atomic_access(require_atomic_access) {}
   628     : StoreNode(c, mem, adr, at, val, mo), _require_atomic_access(require_atomic_access) {}
   629   virtual int Opcode() const;
   629   virtual int Opcode() const;
   630   virtual BasicType memory_type() const { return T_DOUBLE; }
   630   virtual BasicType memory_type() const { return T_DOUBLE; }
   631   bool require_atomic_access() const { return _require_atomic_access; }
   631   bool require_atomic_access() const { return _require_atomic_access; }
   632   static StoreDNode* make_atomic(Compile *C, Node* ctl, Node* mem, Node* adr, const TypePtr* adr_type, Node* val, MemOrd mo);
   632   static StoreDNode* make_atomic(Node* ctl, Node* mem, Node* adr, const TypePtr* adr_type, Node* val, MemOrd mo);
   633 #ifndef PRODUCT
   633 #ifndef PRODUCT
   634   virtual void dump_spec(outputStream *st) const {
   634   virtual void dump_spec(outputStream *st) const {
   635     StoreNode::dump_spec(st);
   635     StoreNode::dump_spec(st);
   636     if (_require_atomic_access)  st->print(" Atomic!");
   636     if (_require_atomic_access)  st->print(" Atomic!");
   637   }
   637   }
  1136 
  1136 
  1137 public:
  1137 public:
  1138   // If the input is a whole memory state, clone it with all its slices intact.
  1138   // If the input is a whole memory state, clone it with all its slices intact.
  1139   // Otherwise, make a new memory state with just that base memory input.
  1139   // Otherwise, make a new memory state with just that base memory input.
  1140   // In either case, the result is a newly created MergeMem.
  1140   // In either case, the result is a newly created MergeMem.
  1141   static MergeMemNode* make(Compile* C, Node* base_memory);
  1141   static MergeMemNode* make(Node* base_memory);
  1142 
  1142 
  1143   virtual int Opcode() const;
  1143   virtual int Opcode() const;
  1144   virtual Node *Identity( PhaseTransform *phase );
  1144   virtual Node *Identity( PhaseTransform *phase );
  1145   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
  1145   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
  1146   virtual uint ideal_reg() const { return NotAMachineReg; }
  1146   virtual uint ideal_reg() const { return NotAMachineReg; }