588 }
589 assert(rp < rnum, "not too many ranges");
590
591 if (trim_ranges) {
592 merge_ranges(ranges, rp);
593 }
594
595 // Safepoint in case backward branch observed
596 if (makes_backward_branch && UseLoopSafepoints)
597 add_safepoint();
598
599 jump_switch_ranges(lookup, &ranges[0], &ranges[rp]);
600 }
601
602 static float if_prob(float taken_cnt, float total_cnt) {
603 assert(taken_cnt <= total_cnt, "");
604 if (total_cnt == 0) {
605 return PROB_FAIR;
606 }
607 float p = taken_cnt / total_cnt;
608 return MIN2(MAX2(p, PROB_MIN), PROB_MAX);
609 }
610
611 static float if_cnt(float cnt) {
612 if (cnt == 0) {
613 return COUNT_UNKNOWN;
614 }
615 return cnt;
616 }
617
618 static float sum_of_cnts(SwitchRange *lo, SwitchRange *hi) {
619 float total_cnt = 0;
620 for (SwitchRange* sr = lo; sr <= hi; sr++) {
621 total_cnt += sr->cnt();
622 }
623 return total_cnt;
624 }
625
626 class SwitchRanges : public ResourceObj {
627 public:
628 SwitchRange* _lo;
|
588 }
589 assert(rp < rnum, "not too many ranges");
590
591 if (trim_ranges) {
592 merge_ranges(ranges, rp);
593 }
594
595 // Safepoint in case backward branch observed
596 if (makes_backward_branch && UseLoopSafepoints)
597 add_safepoint();
598
599 jump_switch_ranges(lookup, &ranges[0], &ranges[rp]);
600 }
601
602 static float if_prob(float taken_cnt, float total_cnt) {
603 assert(taken_cnt <= total_cnt, "");
604 if (total_cnt == 0) {
605 return PROB_FAIR;
606 }
607 float p = taken_cnt / total_cnt;
608 return clamp(p, PROB_MIN, PROB_MAX);
609 }
610
611 static float if_cnt(float cnt) {
612 if (cnt == 0) {
613 return COUNT_UNKNOWN;
614 }
615 return cnt;
616 }
617
618 static float sum_of_cnts(SwitchRange *lo, SwitchRange *hi) {
619 float total_cnt = 0;
620 for (SwitchRange* sr = lo; sr <= hi; sr++) {
621 total_cnt += sr->cnt();
622 }
623 return total_cnt;
624 }
625
626 class SwitchRanges : public ResourceObj {
627 public:
628 SwitchRange* _lo;
|