322 }; 323 324 // -----------------------------IdealLoopTree---------------------------------- 325 class IdealLoopTree : public ResourceObj { 326 public: 327 IdealLoopTree *_parent; // Parent in loop tree 328 IdealLoopTree *_next; // Next sibling in loop tree 329 IdealLoopTree *_child; // First child in loop tree 330 331 // The head-tail backedge defines the loop. 332 // If tail is NULL then this loop has multiple backedges as part of the 333 // same loop. During cleanup I'll peel off the multiple backedges; merge 334 // them at the loop bottom and flow 1 real backedge into the loop. 335 Node *_head; // Head of loop 336 Node *_tail; // Tail of loop 337 inline Node *tail(); // Handle lazy update of _tail field 338 PhaseIdealLoop* _phase; 339 340 Node_List _body; // Loop body for inner loops 341 342 uint8 _nest; // Nesting depth 343 uint8 _irreducible:1, // True if irreducible 344 _has_call:1, // True if has call safepoint 345 _has_sfpt:1, // True if has non-call safepoint 346 _rce_candidate:1; // True if candidate for range check elimination 347 348 Node_List* _safepts; // List of safepoints in this loop 349 Node_List* _required_safept; // A inner loop cannot delete these safepts; 350 bool _allow_optimizations; // Allow loop optimizations 351 352 IdealLoopTree( PhaseIdealLoop* phase, Node *head, Node *tail ) 353 : _parent(0), _next(0), _child(0), 354 _head(head), _tail(tail), 355 _phase(phase), 356 _safepts(NULL), 357 _required_safept(NULL), 358 _allow_optimizations(true), 359 _nest(0), _irreducible(0), _has_call(0), _has_sfpt(0), _rce_candidate(0) 360 { } 361 362 // Is 'l' a member of 'this'? 363 int is_member( const IdealLoopTree *l ) const; // Test for nested membership | 322 }; 323 324 // -----------------------------IdealLoopTree---------------------------------- 325 class IdealLoopTree : public ResourceObj { 326 public: 327 IdealLoopTree *_parent; // Parent in loop tree 328 IdealLoopTree *_next; // Next sibling in loop tree 329 IdealLoopTree *_child; // First child in loop tree 330 331 // The head-tail backedge defines the loop. 332 // If tail is NULL then this loop has multiple backedges as part of the 333 // same loop. During cleanup I'll peel off the multiple backedges; merge 334 // them at the loop bottom and flow 1 real backedge into the loop. 335 Node *_head; // Head of loop 336 Node *_tail; // Tail of loop 337 inline Node *tail(); // Handle lazy update of _tail field 338 PhaseIdealLoop* _phase; 339 340 Node_List _body; // Loop body for inner loops 341 342 uint8_t _nest; // Nesting depth 343 uint8_t _irreducible:1, // True if irreducible 344 _has_call:1, // True if has call safepoint 345 _has_sfpt:1, // True if has non-call safepoint 346 _rce_candidate:1; // True if candidate for range check elimination 347 348 Node_List* _safepts; // List of safepoints in this loop 349 Node_List* _required_safept; // A inner loop cannot delete these safepts; 350 bool _allow_optimizations; // Allow loop optimizations 351 352 IdealLoopTree( PhaseIdealLoop* phase, Node *head, Node *tail ) 353 : _parent(0), _next(0), _child(0), 354 _head(head), _tail(tail), 355 _phase(phase), 356 _safepts(NULL), 357 _required_safept(NULL), 358 _allow_optimizations(true), 359 _nest(0), _irreducible(0), _has_call(0), _has_sfpt(0), _rce_candidate(0) 360 { } 361 362 // Is 'l' a member of 'this'? 363 int is_member( const IdealLoopTree *l ) const; // Test for nested membership |