Print this page
rev 6907 : 8056071: compiler/whitebox/IsMethodCompilableTest.java fails with 'method() is not compilable after 3 iterations'
Summary: Always use MDO if valid and always compile trivial methods with C1 if available.
Reviewed-by: kvn, iveresov

Split Split Close
Expand all
Collapse all
          --- old/hotspot/src/share/vm/runtime/simpleThresholdPolicy.inline.hpp
          +++ new/hotspot/src/share/vm/runtime/simpleThresholdPolicy.inline.hpp
↓ open down ↓ 46 lines elided ↑ open up ↑
  47   47      return b > Tier3BackEdgeThreshold * scale;
  48   48    case CompLevel_full_profile:
  49   49      return b > Tier4BackEdgeThreshold * scale;
  50   50    }
  51   51    return true;
  52   52  }
  53   53  
  54   54  // Simple methods are as good being compiled with C1 as C2.
  55   55  // Determine if a given method is such a case.
  56   56  bool SimpleThresholdPolicy::is_trivial(Method* method) {
  57      -  if (method->is_accessor()) return true;
  58      -  if (method->code() != NULL) {
  59      -    MethodData* mdo = method->method_data();
  60      -    if (mdo != NULL && mdo->num_loops() == 0 &&
  61      -        (method->code_size() < 5  || (mdo->num_blocks() < 4) && (method->code_size() < 15))) {
  62      -      return !mdo->would_profile();
  63      -    }
       57 +  if (method->is_accessor() ||
       58 +      method->is_constant_getter()) {
       59 +    return true;
       60 +  }
       61 +  if (method->has_loops() || method->code_size() >= 15) {
       62 +    return false;
       63 +  }
       64 +  MethodData* mdo = method->method_data();
       65 +  if (mdo != NULL && !mdo->would_profile() &&
       66 +      (method->code_size() < 5  || (mdo->num_blocks() < 4))) {
       67 +    return true;
  64   68    }
  65   69    return false;
  66   70  }
  67   71  
  68   72  #endif // SHARE_VM_RUNTIME_SIMPLETHRESHOLDPOLICY_INLINE_HPP
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX