< prev index next >

src/share/vm/opto/machnode.hpp

Print this page




 510 class MachNopNode : public MachIdealNode {
 511 private:
 512   int _count;
 513 public:
 514   MachNopNode( ) : _count(1) {}
 515   MachNopNode( int count ) : _count(count) {}
 516   virtual void emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const;
 517   virtual uint size(PhaseRegAlloc *ra_) const;
 518 
 519   virtual const class Type *bottom_type() const { return Type::CONTROL; }
 520 
 521   virtual int ideal_Opcode() const { return Op_Con; } // bogus; see output.cpp
 522   virtual const Pipeline *pipeline() const;
 523 #ifndef PRODUCT
 524   virtual const char *Name() const { return "Nop"; }
 525   virtual void format( PhaseRegAlloc *, outputStream *st ) const;
 526   virtual void dump_spec(outputStream *st) const { } // No per-operand info
 527 #endif
 528 };
 529 





















 530 //------------------------------MachSpillCopyNode------------------------------
 531 // Machine SpillCopy Node.  Copies 1 or 2 words from any location to any
 532 // location (stack or register).
 533 class MachSpillCopyNode : public MachIdealNode {
 534 public:
 535   enum SpillType {
 536     TwoAddress,                        // Inserted when coalescing of a two-address-instruction node and its input fails
 537     PhiInput,                          // Inserted when coalescing of a phi node and its input fails
 538     DebugUse,                          // Inserted as debug info spills to safepoints in non-frequent blocks
 539     LoopPhiInput,                      // Pre-split compares of loop-phis
 540     Definition,                        // An lrg marked as spilled will be spilled to memory right after its definition,
 541                                        // if in high pressure region or the lrg is bound
 542     RegToReg,                          // A register to register move
 543     RegToMem,                          // A register to memory move
 544     MemToReg,                          // A memory to register move
 545     PhiLocationDifferToInputLocation,  // When coalescing phi nodes in PhaseChaitin::Split(), a move spill is inserted if
 546                                        // the phi and its input resides at different locations (i.e. reg or mem)
 547     BasePointerToMem,                  // Spill base pointer to memory at safepoint
 548     InputToRematerialization,          // When rematerializing a node we stretch the inputs live ranges, and they might be
 549                                        // stretched beyond a new definition point, therefore we split out new copies instead




 510 class MachNopNode : public MachIdealNode {
 511 private:
 512   int _count;
 513 public:
 514   MachNopNode( ) : _count(1) {}
 515   MachNopNode( int count ) : _count(count) {}
 516   virtual void emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const;
 517   virtual uint size(PhaseRegAlloc *ra_) const;
 518 
 519   virtual const class Type *bottom_type() const { return Type::CONTROL; }
 520 
 521   virtual int ideal_Opcode() const { return Op_Con; } // bogus; see output.cpp
 522   virtual const Pipeline *pipeline() const;
 523 #ifndef PRODUCT
 524   virtual const char *Name() const { return "Nop"; }
 525   virtual void format( PhaseRegAlloc *, outputStream *st ) const;
 526   virtual void dump_spec(outputStream *st) const { } // No per-operand info
 527 #endif
 528 };
 529 
 530 //------------------------------MachMskNode-----------------------------------
 531 // Machine function Msk Node
 532 class MachMskNode : public MachIdealNode {
 533 private:
 534   int _restore;
 535 public:
 536   MachMskNode() : _restore(true) {}
 537   MachMskNode(bool restore) : _restore(restore) {}
 538   virtual void emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const;
 539   virtual uint size(PhaseRegAlloc *ra_) const;
 540 
 541   virtual const class Type *bottom_type() const { return Type::CONTROL; }
 542 
 543   virtual int ideal_Opcode() const { return Op_Con; } // bogus; see output.cpp
 544 #ifndef PRODUCT
 545   virtual const char *Name() const { return "Msk"; }
 546   virtual void format(PhaseRegAlloc *, outputStream *st) const;
 547   virtual void dump_spec(outputStream *st) const { } // No per-operand info
 548 #endif
 549 };
 550 
 551 //------------------------------MachSpillCopyNode------------------------------
 552 // Machine SpillCopy Node.  Copies 1 or 2 words from any location to any
 553 // location (stack or register).
 554 class MachSpillCopyNode : public MachIdealNode {
 555 public:
 556   enum SpillType {
 557     TwoAddress,                        // Inserted when coalescing of a two-address-instruction node and its input fails
 558     PhiInput,                          // Inserted when coalescing of a phi node and its input fails
 559     DebugUse,                          // Inserted as debug info spills to safepoints in non-frequent blocks
 560     LoopPhiInput,                      // Pre-split compares of loop-phis
 561     Definition,                        // An lrg marked as spilled will be spilled to memory right after its definition,
 562                                        // if in high pressure region or the lrg is bound
 563     RegToReg,                          // A register to register move
 564     RegToMem,                          // A register to memory move
 565     MemToReg,                          // A memory to register move
 566     PhiLocationDifferToInputLocation,  // When coalescing phi nodes in PhaseChaitin::Split(), a move spill is inserted if
 567                                        // the phi and its input resides at different locations (i.e. reg or mem)
 568     BasePointerToMem,                  // Spill base pointer to memory at safepoint
 569     InputToRematerialization,          // When rematerializing a node we stretch the inputs live ranges, and they might be
 570                                        // stretched beyond a new definition point, therefore we split out new copies instead


< prev index next >