Mercurial > hg > truffle
comparison src/share/vm/opto/loopTransform.cpp @ 17810:62c54fcc0a35
Merge
author | kvn |
---|---|
date | Tue, 25 Mar 2014 17:07:36 -0700 |
parents | a9becfeecd1b 606acabe7b5c |
children | cd3c534f8f4a |
comparison
equal
deleted
inserted
replaced
17809:a433eb716ce1 | 17810:62c54fcc0a35 |
---|---|
615 case Op_StrIndexOf: | 615 case Op_StrIndexOf: |
616 case Op_EncodeISOArray: | 616 case Op_EncodeISOArray: |
617 case Op_AryEq: { | 617 case Op_AryEq: { |
618 return false; | 618 return false; |
619 } | 619 } |
620 #if INCLUDE_RTM_OPT | |
621 case Op_FastLock: | |
622 case Op_FastUnlock: { | |
623 // Don't unroll RTM locking code because it is large. | |
624 if (UseRTMLocking) { | |
625 return false; | |
626 } | |
627 } | |
628 #endif | |
620 } // switch | 629 } // switch |
621 } | 630 } |
622 | 631 |
623 return true; // Do maximally unroll | 632 return true; // Do maximally unroll |
624 } | 633 } |
711 switch (n->Opcode()) { | 720 switch (n->Opcode()) { |
712 case Op_XorI: xors_in_loop++; break; // CRC32 java code | 721 case Op_XorI: xors_in_loop++; break; // CRC32 java code |
713 case Op_ModL: body_size += 30; break; | 722 case Op_ModL: body_size += 30; break; |
714 case Op_DivL: body_size += 30; break; | 723 case Op_DivL: body_size += 30; break; |
715 case Op_MulL: body_size += 10; break; | 724 case Op_MulL: body_size += 10; break; |
716 case Op_FlagsProj: | |
717 // Can't handle unrolling of loops containing | |
718 // nodes that generate a FlagsProj at the moment | |
719 return false; | |
720 case Op_StrComp: | 725 case Op_StrComp: |
721 case Op_StrEquals: | 726 case Op_StrEquals: |
722 case Op_StrIndexOf: | 727 case Op_StrIndexOf: |
723 case Op_EncodeISOArray: | 728 case Op_EncodeISOArray: |
724 case Op_AryEq: { | 729 case Op_AryEq: { |
725 // Do not unroll a loop with String intrinsics code. | 730 // Do not unroll a loop with String intrinsics code. |
726 // String intrinsics are large and have loops. | 731 // String intrinsics are large and have loops. |
727 return false; | 732 return false; |
728 } | 733 } |
734 #if INCLUDE_RTM_OPT | |
735 case Op_FastLock: | |
736 case Op_FastUnlock: { | |
737 // Don't unroll RTM locking code because it is large. | |
738 if (UseRTMLocking) { | |
739 return false; | |
740 } | |
741 } | |
742 #endif | |
729 } // switch | 743 } // switch |
730 } | 744 } |
731 | 745 |
732 // Check for being too big | 746 // Check for being too big |
733 if (body_size > (uint)LoopUnrollLimit) { | 747 if (body_size > (uint)LoopUnrollLimit) { |
778 } | 792 } |
779 if (bol->as_Bool()->_test._test == BoolTest::ne) | 793 if (bol->as_Bool()->_test._test == BoolTest::ne) |
780 continue; // not RC | 794 continue; // not RC |
781 | 795 |
782 Node *cmp = bol->in(1); | 796 Node *cmp = bol->in(1); |
783 if (cmp->is_FlagsProj()) { | |
784 continue; | |
785 } | |
786 | |
787 Node *rc_exp = cmp->in(1); | 797 Node *rc_exp = cmp->in(1); |
788 Node *limit = cmp->in(2); | 798 Node *limit = cmp->in(2); |
789 | 799 |
790 Node *limit_c = phase->get_ctrl(limit); | 800 Node *limit_c = phase->get_ctrl(limit); |
791 if( limit_c == phase->C->top() ) | 801 if( limit_c == phase->C->top() ) |