# HG changeset patch # User rbackman # Date 1403523203 -7200 # Node ID 42460b71ba70cfce9e526ed2ce9fd9fff44b0740 # Parent f6f9aec27858371ae906f1decfecde0bdffb515f 8046289: compiler/6340864/TestLongVect.java timeout with Reviewed-by: iveresov, vlivanov diff -r f6f9aec27858 -r 42460b71ba70 src/share/vm/opto/parse.hpp --- a/src/share/vm/opto/parse.hpp Wed Sep 10 12:39:11 2014 +0200 +++ b/src/share/vm/opto/parse.hpp Mon Jun 23 13:33:23 2014 +0200 @@ -551,8 +551,9 @@ float dynamic_branch_prediction(float &cnt); float branch_prediction(float &cnt, BoolTest::mask btest, int target_bci); - bool seems_never_taken(float prob); - bool seems_stable_comparison(BoolTest::mask btest, Node* c); + bool seems_never_taken(float prob) const; + bool path_is_suitable_for_uncommon_trap(float prob) const; + bool seems_stable_comparison() const; void do_ifnull(BoolTest::mask btest, Node* c); void do_if(BoolTest::mask btest, Node* c); diff -r f6f9aec27858 -r 42460b71ba70 src/share/vm/opto/parse2.cpp --- a/src/share/vm/opto/parse2.cpp Wed Sep 10 12:39:11 2014 +0200 +++ b/src/share/vm/opto/parse2.cpp Mon Jun 23 13:33:23 2014 +0200 @@ -884,7 +884,7 @@ // some branches (e.g., _213_javac.Assembler.eliminate) validly produce // very small but nonzero probabilities, which if confused with zero // counts would keep the program recompiling indefinitely. -bool Parse::seems_never_taken(float prob) { +bool Parse::seems_never_taken(float prob) const { return prob < PROB_MIN; } @@ -896,7 +896,7 @@ // already acting in a stable fashion. If the comparison // seems stable, we will put an expensive uncommon trap // on the untaken path. -bool Parse::seems_stable_comparison(BoolTest::mask btest, Node* cmp) { +bool Parse::seems_stable_comparison() const { if (C->too_many_traps(method(), bci(), Deoptimization::Reason_unstable_if)) { return false; } @@ -1125,6 +1125,14 @@ } } +bool Parse::path_is_suitable_for_uncommon_trap(float prob) const { + // Don't want to speculate on uncommon traps when running with -Xcomp + if (!UseInterpreter) { + return false; + } + return (seems_never_taken(prob) && seems_stable_comparison()); +} + //----------------------------adjust_map_after_if------------------------------ // Adjust the JVM state to reflect the result of taking this path. // Basically, it means inspecting the CmpNode controlling this @@ -1138,7 +1146,7 @@ bool is_fallthrough = (path == successor_for_bci(iter().next_bci())); - if (seems_never_taken(prob) && seems_stable_comparison(btest, c)) { + if (path_is_suitable_for_uncommon_trap(prob)) { repush_if_args(); uncommon_trap(Deoptimization::Reason_unstable_if, Deoptimization::Action_reinterpret,