< prev index next >

src/hotspot/share/opto/loopnode.hpp

Print this page




 135   LoopNode(Node *entry, Node *backedge)
 136     : RegionNode(3), _loop_flags(0), _unswitch_count(0),
 137       _postloop_flags(0), _profile_trip_cnt(COUNT_UNKNOWN)  {
 138     init_class_id(Class_Loop);
 139     init_req(EntryControl, entry);
 140     init_req(LoopBackControl, backedge);
 141   }
 142 
 143   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
 144   virtual int Opcode() const;
 145   bool can_be_counted_loop(PhaseTransform* phase) const {
 146     return req() == 3 && in(0) != NULL &&
 147       in(1) != NULL && phase->type(in(1)) != Type::TOP &&
 148       in(2) != NULL && phase->type(in(2)) != Type::TOP;
 149   }
 150   bool is_valid_counted_loop() const;
 151 #ifndef PRODUCT
 152   virtual void dump_spec(outputStream *st) const;
 153 #endif
 154 
 155   void verify_strip_mined(int expect_skeleton) const;
 156   virtual LoopNode* skip_strip_mined(int expect_skeleton = 1) { return this; }
 157   virtual IfTrueNode* outer_loop_tail() const { ShouldNotReachHere(); return NULL; }
 158   virtual OuterStripMinedLoopEndNode* outer_loop_end() const { ShouldNotReachHere(); return NULL; }
 159   virtual IfFalseNode* outer_loop_exit() const { ShouldNotReachHere(); return NULL; }
 160   virtual SafePointNode* outer_safepoint() const { ShouldNotReachHere(); return NULL; }
 161 };
 162 
 163 //------------------------------Counted Loops----------------------------------
 164 // Counted loops are all trip-counted loops, with exactly 1 trip-counter exit
 165 // path (and maybe some other exit paths).  The trip-counter exit is always
 166 // last in the loop.  The trip-counter have to stride by a constant;
 167 // the exit value is also loop invariant.
 168 
 169 // CountedLoopNodes and CountedLoopEndNodes come in matched pairs.  The
 170 // CountedLoopNode has the incoming loop control and the loop-back-control
 171 // which is always the IfTrue before the matching CountedLoopEndNode.  The
 172 // CountedLoopEndNode has an incoming control (possibly not the
 173 // CountedLoopNode if there is control flow in the loop), the post-increment
 174 // trip-counter value, and the limit.  The trip-counter value is always of
 175 // the form (Op old-trip-counter stride).  The old-trip-counter is produced




 135   LoopNode(Node *entry, Node *backedge)
 136     : RegionNode(3), _loop_flags(0), _unswitch_count(0),
 137       _postloop_flags(0), _profile_trip_cnt(COUNT_UNKNOWN)  {
 138     init_class_id(Class_Loop);
 139     init_req(EntryControl, entry);
 140     init_req(LoopBackControl, backedge);
 141   }
 142 
 143   virtual Node *Ideal(PhaseGVN *phase, bool can_reshape);
 144   virtual int Opcode() const;
 145   bool can_be_counted_loop(PhaseTransform* phase) const {
 146     return req() == 3 && in(0) != NULL &&
 147       in(1) != NULL && phase->type(in(1)) != Type::TOP &&
 148       in(2) != NULL && phase->type(in(2)) != Type::TOP;
 149   }
 150   bool is_valid_counted_loop() const;
 151 #ifndef PRODUCT
 152   virtual void dump_spec(outputStream *st) const;
 153 #endif
 154 
 155   void verify_strip_mined(int expect_skeleton) const NOT_DEBUG_RETURN;
 156   virtual LoopNode* skip_strip_mined(int expect_skeleton = 1) { return this; }
 157   virtual IfTrueNode* outer_loop_tail() const { ShouldNotReachHere(); return NULL; }
 158   virtual OuterStripMinedLoopEndNode* outer_loop_end() const { ShouldNotReachHere(); return NULL; }
 159   virtual IfFalseNode* outer_loop_exit() const { ShouldNotReachHere(); return NULL; }
 160   virtual SafePointNode* outer_safepoint() const { ShouldNotReachHere(); return NULL; }
 161 };
 162 
 163 //------------------------------Counted Loops----------------------------------
 164 // Counted loops are all trip-counted loops, with exactly 1 trip-counter exit
 165 // path (and maybe some other exit paths).  The trip-counter exit is always
 166 // last in the loop.  The trip-counter have to stride by a constant;
 167 // the exit value is also loop invariant.
 168 
 169 // CountedLoopNodes and CountedLoopEndNodes come in matched pairs.  The
 170 // CountedLoopNode has the incoming loop control and the loop-back-control
 171 // which is always the IfTrue before the matching CountedLoopEndNode.  The
 172 // CountedLoopEndNode has an incoming control (possibly not the
 173 // CountedLoopNode if there is control flow in the loop), the post-increment
 174 // trip-counter value, and the limit.  The trip-counter value is always of
 175 // the form (Op old-trip-counter stride).  The old-trip-counter is produced


< prev index next >