src/share/vm/opto/machnode.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/machnode.hpp	Wed Jan 29 11:56:23 2014
--- new/src/share/vm/opto/machnode.hpp	Wed Jan 29 11:56:23 2014

*** 479,494 **** --- 479,515 ---- //------------------------------MachSpillCopyNode------------------------------ // Machine SpillCopy Node. Copies 1 or 2 words from any location to any // location (stack or register). class MachSpillCopyNode : public MachIdealNode { + public: + enum SpillType { + TwoAddress, // Inserted when coalescing of a two-address-instruction node and its input fails + PhiInput, // Inserted when coalescing of a phi node and its input fails + DebugUse, // Inserted as debug info spills to safepoints in non-frequent blocks + LoopPhiInput, // Pre-split compares of loop-phis + Definition, // An lrg marked as spilled will be spilled to memory right after its definition, + // if in high pressure region or the lrg is bound + RegToReg, // A register to register move + RegToMem, // A register to memory move + MemToReg, // A memory to register move + PhiLocationDifferToInputLocation, // When coalescing phi nodes in PhaseChaitin::Split(), a move spill is inserted if + // the phi and its input resides at different locations (i.e. reg or mem) + BasePointerToMem, // Spill base pointer to memory at safepoint + InputToRematerialization, // When rematerializing a node we stretch the inputs live ranges, and they might be + // stretched beyond a new definition point, therefore we split out new copies instead + CallUse, // Spill use at a call + Bound // An lrg marked as spill that is bound and needs to be spilled at a use + }; + private: const RegMask *_in; // RegMask for input const RegMask *_out; // RegMask for output const Type *_type; + const SpillType _spill_type; public: ! MachSpillCopyNode(SpillType spill_type, Node *n, const RegMask &in, const RegMask &out ) : ! MachIdealNode(), _spill_type(spill_type), _in(&in), _out(&out), _type(n->bottom_type()) { init_class_id(Class_MachSpillCopy); init_flags(Flag_is_Copy); add_req(NULL); add_req(n); }
*** 503,514 **** --- 524,568 ---- uint implementation( CodeBuffer *cbuf, PhaseRegAlloc *ra_, bool do_size, outputStream* st ) const; virtual void emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const; virtual uint size(PhaseRegAlloc *ra_) const; + #ifndef PRODUCT - virtual const char *Name() const { return "MachSpillCopy"; } + switch (_spill_type) { + case TwoAddress: + return "TwoAddressSpillNode"; + case PhiInput: + return "PhiInputSpillNode"; + case DebugUse: + return "DebugUseSpillNode"; + case LoopPhiInput: + return "LoopPhiInputSpillNode"; + case Definition: + return "DefinitionSpillNode"; + case RegToReg: + return "RegToRegSpillNode"; + case RegToMem: + return "RegToMem"; + case MemToReg: + return "MemToReg"; + case PhiLocationDifferToInputLocation: + return "PhiLocationDifferToInputLocationSpillNode"; + case BasePointerToMem: + return "BasePointerToMemSpillNode"; + case InputToRematerialization: + return "InputToRematerializationSpillNode"; + case CallUse: + return "CallUseSpillNode"; + case Bound: + return "BoundSpillNode"; + default: + assert(false, "Must have valid spill type"); + } + } + virtual void format( PhaseRegAlloc *, outputStream *st ) const; #endif }; //------------------------------MachBranchNode--------------------------------

src/share/vm/opto/machnode.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File