Details

    • Type: CSR
    • Status: Closed
    • Priority: P4
    • Resolution: Approved
    • Fix Version/s: 15
    • Component/s: hotspot
    • Labels:
      None
    • Subcomponent:
    • Compatibility Kind:
      behavioral
    • Compatibility Risk:
      minimal
    • Compatibility Risk Description:
      The flag is unlikely to have been used a lot in the wild, especially on platforms other than SPARC.
    • Interface Kind:
      add/remove/modify command line option
    • Scope:
      Implementation

      Description

      Summary

      Obsolete the -XX:+LIRFillDelaySlot flag.

      Problem

      After the removal of Solaris and SPARC in JDK-8241787 the LIRFillDelaySlot flag no longer has any relevant effect and should be removed. Since the flag was only really used for SPARC the flag will go directly to obsolete, skipping the deprecation step.

      Solution

      The LIRFillDelaySlot flag will be obsoleted, meaning it will still be recognized but a warning will be generated at startup if it is specified on the command line.

      Specification

      Mark the flag as obsoleted:

      diff -r 99b3e9be062a src/hotspot/share/runtime/arguments.cpp
      --- a/src/hotspot/share/runtime/arguments.cpp   Wed May 27 14:31:23 2020 -0700
      +++ b/src/hotspot/share/runtime/arguments.cpp   Wed May 27 15:31:59 2020 -0700
      @@ -564,6 +564,7 @@
         { "UseBarriersForVolatile",        JDK_Version::undefined(), JDK_Version::jdk(15), JDK_Version::jdk(16) },
       #endif
         { "UseLWPSynchronization",         JDK_Version::undefined(), JDK_Version::jdk(15), JDK_Version::jdk(16) },
      +  { "LIRFillDelaySlots",             JDK_Version::undefined(), JDK_Version::jdk(15), JDK_Version::jdk(16) },
      
       #ifdef TEST_VERIFY_SPECIAL_JVM_FLAGS
         // These entries will generate build errors.  Their purpose is to test the macros.

      And remove it from the C1 global flags:

      diff -r 99b3e9be062a src/hotspot/share/c1/c1_globals.hpp
      --- a/src/hotspot/share/c1/c1_globals.hpp       Wed May 27 14:31:23 2020 -0700
      +++ b/src/hotspot/share/c1/c1_globals.hpp       Wed May 27 15:31:59 2020 -0700
      @@ -211,9 +211,6 @@
         develop(bool, LIRTraceExecution, false,                                   \
                 "add LIR code which logs the execution of blocks")                \
                                                                                   \
      -  product_pd(bool, LIRFillDelaySlots,                                       \
      -             "fill delays on on SPARC with LIR")                            \
      -                                                                            \
         develop_pd(bool, CSEArrayLength,                                          \
                 "Create separate nodes for length in array accesses")             \
                                                                                   \

      Remove all the platform specific flag initialization code, for example for x86 (the same pattern repeats for the other CPU architectures):

      diff -r 99b3e9be062a src/hotspot/cpu/x86/c1_globals_x86.hpp
      --- a/src/hotspot/cpu/x86/c1_globals_x86.hpp    Wed May 27 14:31:23 2020 -0700
      +++ b/src/hotspot/cpu/x86/c1_globals_x86.hpp    Wed May 27 15:31:59 2020 -0700
      @@ -60,7 +60,6 @@
       #endif // !TIERED
       define_pd_global(bool, UseTypeProfile,                 false);
      
      -define_pd_global(bool, LIRFillDelaySlots,              false);
       define_pd_global(bool, OptimizeSinglePrecision,        true );
       define_pd_global(bool, CSEArrayLength,                 false);
       define_pd_global(bool, TwoOperandLIRForm,              true );

      And finally, remove the only actual use of the flag:

      diff -r 99b3e9be062a src/hotspot/share/c1/c1_LIR.hpp
      --- a/src/hotspot/share/c1/c1_LIR.hpp   Wed May 27 14:31:23 2020 -0700
      +++ b/src/hotspot/share/c1/c1_LIR.hpp   Wed May 27 15:31:59 2020 -0700
      @@ -1805,7 +1805,7 @@
         LIR_OpDelay(LIR_Op* op, CodeEmitInfo* info):
           LIR_Op(lir_delay_slot, LIR_OprFact::illegalOpr, info),
           _op(op) {
      -    assert(op->code() == lir_nop || LIRFillDelaySlots, "should be filling with nops");
      +    assert(op->code() == lir_nop, "should be filling with nops");
         }
         virtual void emit_code(LIR_Assembler* masm);
         virtual LIR_OpDelay* as_OpDelay() { return this; }

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                mikael Mikael Vidstedt
                Reporter:
                mikael Mikael Vidstedt
                Reviewed By:
                David Holmes
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: