923 next_block->next_path_num(); |
923 next_block->next_path_num(); |
924 } |
924 } |
925 return; |
925 return; |
926 } |
926 } |
927 |
927 |
928 // If this is a backwards branch in the bytecodes, add Safepoint |
|
929 maybe_add_safepoint(target_bci); |
|
930 |
|
931 explicit_null_checks_inserted++; |
928 explicit_null_checks_inserted++; |
932 |
929 |
933 // Generate real control flow |
930 // Generate real control flow |
934 Node *tst = _gvn.transform( new (C, 2) BoolNode( c, btest ) ); |
931 Node *tst = _gvn.transform( new (C, 2) BoolNode( c, btest ) ); |
935 |
932 |
1006 branch_block->next_path_num(); |
1003 branch_block->next_path_num(); |
1007 next_block->next_path_num(); |
1004 next_block->next_path_num(); |
1008 } |
1005 } |
1009 return; |
1006 return; |
1010 } |
1007 } |
1011 |
|
1012 // If this is a backwards branch in the bytecodes, add Safepoint |
|
1013 maybe_add_safepoint(target_bci); |
|
1014 |
1008 |
1015 // Sanity check the probability value |
1009 // Sanity check the probability value |
1016 assert(0.0f < prob && prob < 1.0f,"Bad probability in Parser"); |
1010 assert(0.0f < prob && prob < 1.0f,"Bad probability in Parser"); |
1017 |
1011 |
1018 bool taken_if_true = true; |
1012 bool taken_if_true = true; |
2098 } |
2092 } |
2099 |
2093 |
2100 case Bytecodes::_ifnull: btest = BoolTest::eq; goto handle_if_null; |
2094 case Bytecodes::_ifnull: btest = BoolTest::eq; goto handle_if_null; |
2101 case Bytecodes::_ifnonnull: btest = BoolTest::ne; goto handle_if_null; |
2095 case Bytecodes::_ifnonnull: btest = BoolTest::ne; goto handle_if_null; |
2102 handle_if_null: |
2096 handle_if_null: |
|
2097 // If this is a backwards branch in the bytecodes, add Safepoint |
|
2098 maybe_add_safepoint(iter().get_dest()); |
2103 a = null(); |
2099 a = null(); |
2104 b = pop(); |
2100 b = pop(); |
2105 c = _gvn.transform( new (C, 3) CmpPNode(b, a) ); |
2101 c = _gvn.transform( new (C, 3) CmpPNode(b, a) ); |
2106 do_ifnull(btest, c); |
2102 do_ifnull(btest, c); |
2107 break; |
2103 break; |
2108 |
2104 |
2109 case Bytecodes::_if_acmpeq: btest = BoolTest::eq; goto handle_if_acmp; |
2105 case Bytecodes::_if_acmpeq: btest = BoolTest::eq; goto handle_if_acmp; |
2110 case Bytecodes::_if_acmpne: btest = BoolTest::ne; goto handle_if_acmp; |
2106 case Bytecodes::_if_acmpne: btest = BoolTest::ne; goto handle_if_acmp; |
2111 handle_if_acmp: |
2107 handle_if_acmp: |
|
2108 // If this is a backwards branch in the bytecodes, add Safepoint |
|
2109 maybe_add_safepoint(iter().get_dest()); |
2112 a = pop(); |
2110 a = pop(); |
2113 b = pop(); |
2111 b = pop(); |
2114 c = _gvn.transform( new (C, 3) CmpPNode(b, a) ); |
2112 c = _gvn.transform( new (C, 3) CmpPNode(b, a) ); |
2115 do_if(btest, c); |
2113 do_if(btest, c); |
2116 break; |
2114 break; |
2120 case Bytecodes::_iflt: btest = BoolTest::lt; goto handle_ifxx; |
2118 case Bytecodes::_iflt: btest = BoolTest::lt; goto handle_ifxx; |
2121 case Bytecodes::_ifle: btest = BoolTest::le; goto handle_ifxx; |
2119 case Bytecodes::_ifle: btest = BoolTest::le; goto handle_ifxx; |
2122 case Bytecodes::_ifgt: btest = BoolTest::gt; goto handle_ifxx; |
2120 case Bytecodes::_ifgt: btest = BoolTest::gt; goto handle_ifxx; |
2123 case Bytecodes::_ifge: btest = BoolTest::ge; goto handle_ifxx; |
2121 case Bytecodes::_ifge: btest = BoolTest::ge; goto handle_ifxx; |
2124 handle_ifxx: |
2122 handle_ifxx: |
|
2123 // If this is a backwards branch in the bytecodes, add Safepoint |
|
2124 maybe_add_safepoint(iter().get_dest()); |
2125 a = _gvn.intcon(0); |
2125 a = _gvn.intcon(0); |
2126 b = pop(); |
2126 b = pop(); |
2127 c = _gvn.transform( new (C, 3) CmpINode(b, a) ); |
2127 c = _gvn.transform( new (C, 3) CmpINode(b, a) ); |
2128 do_if(btest, c); |
2128 do_if(btest, c); |
2129 break; |
2129 break; |
2133 case Bytecodes::_if_icmplt: btest = BoolTest::lt; goto handle_if_icmp; |
2133 case Bytecodes::_if_icmplt: btest = BoolTest::lt; goto handle_if_icmp; |
2134 case Bytecodes::_if_icmple: btest = BoolTest::le; goto handle_if_icmp; |
2134 case Bytecodes::_if_icmple: btest = BoolTest::le; goto handle_if_icmp; |
2135 case Bytecodes::_if_icmpgt: btest = BoolTest::gt; goto handle_if_icmp; |
2135 case Bytecodes::_if_icmpgt: btest = BoolTest::gt; goto handle_if_icmp; |
2136 case Bytecodes::_if_icmpge: btest = BoolTest::ge; goto handle_if_icmp; |
2136 case Bytecodes::_if_icmpge: btest = BoolTest::ge; goto handle_if_icmp; |
2137 handle_if_icmp: |
2137 handle_if_icmp: |
|
2138 // If this is a backwards branch in the bytecodes, add Safepoint |
|
2139 maybe_add_safepoint(iter().get_dest()); |
2138 a = pop(); |
2140 a = pop(); |
2139 b = pop(); |
2141 b = pop(); |
2140 c = _gvn.transform( new (C, 3) CmpINode( b, a ) ); |
2142 c = _gvn.transform( new (C, 3) CmpINode( b, a ) ); |
2141 do_if(btest, c); |
2143 do_if(btest, c); |
2142 break; |
2144 break; |