Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8246024

Obsolete LIRFillDelaySlot

XMLWordPrintable

    • Icon: CSR CSR
    • Resolution: Approved
    • Icon: P4 P4
    • 15
    • hotspot
    • None
    • behavioral
    • minimal
    • The flag is unlikely to have been used a lot in the wild, especially on platforms other than SPARC.
    • add/remove/modify command line option
    • Implementation

      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; }

            mikael Mikael Vidstedt
            mikael Mikael Vidstedt
            David Holmes
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: