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

src/share/vm/opto/machnode.hpp

Print this page

        

*** 614,623 **** --- 614,646 ---- virtual void format( PhaseRegAlloc *, outputStream *st ) const; #endif }; + // MachMergeNode is similar to a PhiNode in a sense it merges multiple values, + // however it doesn't have a control input and is more like a MergeMem. + // It is inserted after the register allocation is done to ensure that nodes use single + // definition of a multidef lrg in a block. + class MachMergeNode : public MachIdealNode { + public: + MachMergeNode(Node *n1) { + init_class_id(Class_MachMerge); + add_req(NULL); + add_req(n1); + } + virtual const RegMask &out_RegMask() const { return in(1)->out_RegMask(); } + virtual const RegMask &in_RegMask(uint idx) const { return in(1)->in_RegMask(idx); } + virtual const class Type *bottom_type() const { return in(1)->bottom_type(); } + virtual uint ideal_reg() const { return bottom_type()->ideal_reg(); } + virtual uint oper_input_base() const { return 1; } + virtual void emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const { } + virtual uint size(PhaseRegAlloc *ra_) const { return 0; } + #ifndef PRODUCT + virtual const char *Name() const { return "MachMerge"; } + #endif + }; + //------------------------------MachBranchNode-------------------------------- // Abstract machine branch Node class MachBranchNode : public MachIdealNode { public: MachBranchNode() : MachIdealNode() {
src/share/vm/opto/machnode.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File