RFR(S): Remove some dead code in C2

Vladimir Kozlov vladimir.kozlov at oracle.com
Tue Jun 16 16:38:41 UTC 2020


Hi Ludovic,

Looks good.

Yes, in 8148994 Vladimir Ivanov enable late inlining [1]:

"But after JDK-8072008 there's no problem with delaying inlining. C2 can decide whether to keep the direct call or 
inline through it. So, I enabled late inlining for all linkers. (Surprisingly, no significant performance difference on 
nashorn.)"

I created RFE https://bugs.openjdk.java.net/browse/JDK-8247697 for this.

Thanks,
Vladimir

[1] https://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2016-February/021137.html

PS: Does someone in your group have OpenJDK Author status so he can file issues in JBS?

On 6/15/20 4:58 PM, Ludovic Henry wrote:
> Hi,
> 
> As I was exploring code in src/hotspot/share/opto/doCall.cpp, I noticed the `delayed_forbidden` parameter to `Compile::call_generator` never to be used.
> 
>  From doing some mercurial archeology, the change was introduced with https://hg.openjdk.java.net/jdk/jdk/rev/823590505eb4, and later modified with https://hg.openjdk.java.net/jdk/jdk/rev/e1685e30beca which removed all uses of `delayed_forbidden`.
> 
> As I am not an author, please find following the patch removing the dead code.
> 
> Thank you,
> 
> --
> Ludovic
> 
> diff --git a/src/hotspot/share/opto/callGenerator.cpp b/src/hotspot/share/opto/callGenerator.cpp
> index 1092d582184..606325d4dd6 100644
> --- a/src/hotspot/share/opto/callGenerator.cpp
> +++ b/src/hotspot/share/opto/callGenerator.cpp
> @@ -821,13 +821,13 @@ JVMState* PredictedCallGenerator::generate(JVMState* jvms) {
>   }
> 
> 
> -CallGenerator* CallGenerator::for_method_handle_call(JVMState* jvms, ciMethod* caller, ciMethod* callee, bool delayed_forbidden) {
> +CallGenerator* CallGenerator::for_method_handle_call(JVMState* jvms, ciMethod* caller, ciMethod* callee) {
>     assert(callee->is_method_handle_intrinsic(), "for_method_handle_call mismatch");
>     bool input_not_const;
>     CallGenerator* cg = CallGenerator::for_method_handle_inline(jvms, caller, callee, input_not_const);
>     Compile* C = Compile::current();
>     if (cg != NULL) {
> -    if (!delayed_forbidden && AlwaysIncrementalInline) {
> +    if (AlwaysIncrementalInline) {
>         return CallGenerator::for_late_inline(callee, cg);
>       } else {
>         return cg;
> diff --git a/src/hotspot/share/opto/callGenerator.hpp b/src/hotspot/share/opto/callGenerator.hpp
> index 46bf9f5d7f9..3a04fa4d5cd 100644
> --- a/src/hotspot/share/opto/callGenerator.hpp
> +++ b/src/hotspot/share/opto/callGenerator.hpp
> @@ -124,7 +124,7 @@ class CallGenerator : public ResourceObj {
>     static CallGenerator* for_direct_call(ciMethod* m, bool separate_io_projs = false);   // static, special
>     static CallGenerator* for_virtual_call(ciMethod* m, int vtable_index);  // virtual, interface
> 
> -  static CallGenerator* for_method_handle_call(  JVMState* jvms, ciMethod* caller, ciMethod* callee, bool delayed_forbidden);
> +  static CallGenerator* for_method_handle_call(  JVMState* jvms, ciMethod* caller, ciMethod* callee);
>     static CallGenerator* for_method_handle_inline(JVMState* jvms, ciMethod* caller, ciMethod* callee, bool& input_not_const);
> 
>     // How to generate a replace a direct call with an inline version
> diff --git a/src/hotspot/share/opto/compile.hpp b/src/hotspot/share/opto/compile.hpp
> index a922a905707..bd0def2997c 100644
> --- a/src/hotspot/share/opto/compile.hpp
> +++ b/src/hotspot/share/opto/compile.hpp
> @@ -854,7 +854,7 @@ class Compile : public Phase {
>     // The profile factor is a discount to apply to this site's interp. profile.
>     CallGenerator*    call_generator(ciMethod* call_method, int vtable_index, bool call_does_dispatch,
>                                      JVMState* jvms, bool allow_inline, float profile_factor, ciKlass* speculative_receiver_type = NULL,
> -                                   bool allow_intrinsics = true, bool delayed_forbidden = false);
> +                                   bool allow_intrinsics = true);
>     bool should_delay_inlining(ciMethod* call_method, JVMState* jvms) {
>       return should_delay_string_inlining(call_method, jvms) ||
>              should_delay_boxing_inlining(call_method, jvms);
> diff --git a/src/hotspot/share/opto/doCall.cpp b/src/hotspot/share/opto/doCall.cpp
> index c26dc4b682d..c4d55d0d4c4 100644
> --- a/src/hotspot/share/opto/doCall.cpp
> +++ b/src/hotspot/share/opto/doCall.cpp
> @@ -65,7 +65,7 @@ void trace_type_profile(Compile* C, ciMethod *method, int depth, int bci, ciMeth
>   CallGenerator* Compile::call_generator(ciMethod* callee, int vtable_index, bool call_does_dispatch,
>                                          JVMState* jvms, bool allow_inline,
>                                          float prof_factor, ciKlass* speculative_receiver_type,
> -                                       bool allow_intrinsics, bool delayed_forbidden) {
> +                                       bool allow_intrinsics) {
>     ciMethod*       caller   = jvms->method();
>     int             bci      = jvms->bci();
>     Bytecodes::Code bytecode = caller->java_code_at_bci(bci);
> @@ -145,8 +145,8 @@ CallGenerator* Compile::call_generator(ciMethod* callee, int vtable_index, bool
>     // MethodHandle.invoke* are native methods which obviously don't
>     // have bytecodes and so normal inlining fails.
>     if (callee->is_method_handle_intrinsic()) {
> -    CallGenerator* cg = CallGenerator::for_method_handle_call(jvms, caller, callee, delayed_forbidden);
> -    assert(cg == NULL || !delayed_forbidden || !cg->is_late_inline() || cg->is_mh_late_inline(), "unexpected CallGenerator");
> +    CallGenerator* cg = CallGenerator::for_method_handle_call(jvms, caller, callee);
> +    assert(cg == NULL || !cg->is_late_inline() || cg->is_mh_late_inline(), "unexpected CallGenerator");
>       return cg;
>     }
> 
> @@ -182,12 +182,10 @@ CallGenerator* Compile::call_generator(ciMethod* callee, int vtable_index, bool
>             // opportunity to perform some high level optimizations
>             // first.
>             if (should_delay_string_inlining(callee, jvms)) {
> -            assert(!delayed_forbidden, "strange");
>               return CallGenerator::for_string_late_inline(callee, cg);
>             } else if (should_delay_boxing_inlining(callee, jvms)) {
> -            assert(!delayed_forbidden, "strange");
>               return CallGenerator::for_boxing_late_inline(callee, cg);
> -          } else if ((should_delay || AlwaysIncrementalInline) && !delayed_forbidden) {
> +          } else if ((should_delay || AlwaysIncrementalInline)) {
>               return CallGenerator::for_late_inline(callee, cg);
>             }
>           }
> 
> 


More information about the hotspot-compiler-dev mailing list