< prev index next >
hotspot/src/share/vm/opto/machnode.hpp
Print this page
rev 7082 : 8068881: SIGBUS in C2 compiled method weblogic.wsee.jaxws.framework.jaxrpc.EnvironmentFactory$SimulatedWsdlDefinitions.<init>
Summary: Use MachMerge to hook together defs of the same multidef value in a block
Reviewed-by: kvn, vlivanov
*** 556,565 ****
--- 556,588 ----
virtual const char *Name() const { return "MachSpillCopy"; }
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() {
< prev index next >