Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/loopTransform.cpp @ 12027:bcc4f6f54d83
8022993: Convert MAX_UNROLL constant to LoopMaxUnroll C2 flag
Summary: Replace MAX_UNROLL constant with new C2 LoopMaxUnroll flag.
Reviewed-by: roland
author | kvn |
---|---|
date | Wed, 14 Aug 2013 10:21:26 -0700 |
parents | a59625d96f71 |
children | c9ccd7b85f20 cfd05ec74089 |
comparison
equal
deleted
inserted
replaced
12026:11237ee74aae | 12027:bcc4f6f54d83 |
---|---|
622 | 622 |
623 return true; // Do maximally unroll | 623 return true; // Do maximally unroll |
624 } | 624 } |
625 | 625 |
626 | 626 |
627 #define MAX_UNROLL 16 // maximum number of unrolls for main loop | |
628 | |
629 //------------------------------policy_unroll---------------------------------- | 627 //------------------------------policy_unroll---------------------------------- |
630 // Return TRUE or FALSE if the loop should be unrolled or not. Unroll if | 628 // Return TRUE or FALSE if the loop should be unrolled or not. Unroll if |
631 // the loop is a CountedLoop and the body is small enough. | 629 // the loop is a CountedLoop and the body is small enough. |
632 bool IdealLoopTree::policy_unroll( PhaseIdealLoop *phase ) const { | 630 bool IdealLoopTree::policy_unroll( PhaseIdealLoop *phase ) const { |
633 | 631 |
640 // Protect against over-unrolling. | 638 // Protect against over-unrolling. |
641 // After split at least one iteration will be executed in pre-loop. | 639 // After split at least one iteration will be executed in pre-loop. |
642 if (cl->trip_count() <= (uint)(cl->is_normal_loop() ? 2 : 1)) return false; | 640 if (cl->trip_count() <= (uint)(cl->is_normal_loop() ? 2 : 1)) return false; |
643 | 641 |
644 int future_unroll_ct = cl->unrolled_count() * 2; | 642 int future_unroll_ct = cl->unrolled_count() * 2; |
645 if (future_unroll_ct > MAX_UNROLL) return false; | 643 if (future_unroll_ct > LoopMaxUnroll) return false; |
646 | 644 |
647 // Check for initial stride being a small enough constant | 645 // Check for initial stride being a small enough constant |
648 if (abs(cl->stride_con()) > (1<<2)*future_unroll_ct) return false; | 646 if (abs(cl->stride_con()) > (1<<2)*future_unroll_ct) return false; |
649 | 647 |
650 // Don't unroll if the next round of unrolling would push us | 648 // Don't unroll if the next round of unrolling would push us |