1.1 --- a/src/share/vm/opto/machnode.hpp Thu Nov 07 11:47:11 2013 +0100 1.2 +++ b/src/share/vm/opto/machnode.hpp Thu Nov 14 19:24:59 2013 -0800 1.3 @@ -155,7 +155,15 @@ 1.4 virtual void ext_format(PhaseRegAlloc *,const MachNode *node,int idx, outputStream *st) const=0; 1.5 1.6 virtual void dump_spec(outputStream *st) const; // Print per-operand info 1.7 -#endif 1.8 + 1.9 + // Check whether o is a valid oper. 1.10 + static bool notAnOper(const MachOper *o) { 1.11 + if (o == NULL) return true; 1.12 + if (((intptr_t)o & 1) != 0) return true; 1.13 + if (*(address*)o == badAddress) return true; // kill by Node::destruct 1.14 + return false; 1.15 + } 1.16 +#endif // !PRODUCT 1.17 }; 1.18 1.19 //------------------------------MachNode--------------------------------------- 1.20 @@ -220,6 +228,12 @@ 1.21 1.22 // Emit bytes into cbuf 1.23 virtual void emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const; 1.24 + // Expand node after register allocation. 1.25 + // Node is replaced by several nodes in the postalloc expand phase. 1.26 + // Corresponding methods are generated for nodes if they specify 1.27 + // postalloc_expand. See block.cpp for more documentation. 1.28 + virtual bool requires_postalloc_expand() const { return false; } 1.29 + virtual void postalloc_expand(GrowableArray <Node *> *nodes, PhaseRegAlloc *ra_); 1.30 // Size of instruction in bytes 1.31 virtual uint size(PhaseRegAlloc *ra_) const; 1.32 // Helper function that computes size by emitting code 1.33 @@ -356,6 +370,9 @@ 1.34 virtual uint ideal_reg() const { return Op_RegP; } 1.35 virtual uint oper_input_base() const { return 1; } 1.36 1.37 + virtual bool requires_postalloc_expand() const; 1.38 + virtual void postalloc_expand(GrowableArray <Node *> *nodes, PhaseRegAlloc *ra_); 1.39 + 1.40 virtual void emit(CodeBuffer& cbuf, PhaseRegAlloc* ra_) const; 1.41 virtual uint size(PhaseRegAlloc* ra_) const; 1.42 virtual bool pinned() const { return UseRDPCForConstantTableBase; }