8157560: Reserve space for allocation prefetch only in builds that support allocation prefetching
authorzmajo
Tue, 24 May 2016 09:07:22 +0200
changeset 38651 c86a9e9079fb
parent 38647 e17e25c51396
child 38652 ba8be1a71dec
child 38654 a7d6ba3bcfa5
8157560: Reserve space for allocation prefetch only in builds that support allocation prefetching Summary: Create the reserved area only in C2-enabled builds. Reviewed-by: kvn, thartmann
hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp
hotspot/test/runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java
--- a/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp	Mon May 23 09:57:17 2016 +0200
+++ b/hotspot/src/share/vm/gc/shared/threadLocalAllocBuffer.cpp	Tue May 24 09:07:22 2016 +0200
@@ -216,8 +216,10 @@
 
   _global_stats = new GlobalTLABStats();
 
-  // Need extra space at the end of TLAB, otherwise prefetching
-  // instructions will fault (due to accessing memory outside of heap).
+#ifdef COMPILER2
+  // If the C2 compiler is present, extra space is needed at the end of
+  // TLABs, otherwise prefetching instructions generated by the C2
+  // compiler will fault (due to accessing memory outside of heap).
   // The amount of space is the max of the number of lines to
   // prefetch for array and for instance allocations. (Extra space must be
   // reserved to accommodate both types of allocations.)
@@ -227,11 +229,14 @@
   // AllocatePrefetchInstr==1). To be on the safe side, however,
   // extra space is reserved for all combinations of
   // AllocatePrefetchStyle and AllocatePrefetchInstr.
+  //
+  // If the C2 compiler is not present, no space is reserved.
 
   // +1 for rounding up to next cache line, +1 to be safe
   int lines =  MAX2(AllocatePrefetchLines, AllocateInstancePrefetchLines) + 2;
   _reserve_for_allocation_prefetch = (AllocatePrefetchDistance + AllocatePrefetchStepSize * lines) /
                                      (int)HeapWordSize;
+#endif
 
   // During jvm startup, the main (primordial) thread is initialized
   // before the heap is initialized.  So reinitialize it now.
--- a/hotspot/test/runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java	Mon May 23 09:57:17 2016 +0200
+++ b/hotspot/test/runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java	Tue May 24 09:07:22 2016 +0200
@@ -90,14 +90,6 @@
         excludeTestMaxRange("CICompilerCount");
 
         /*
-         * JDK-8156679
-         * Temporarily exclude from range testing as the range is not
-         * valid for all platforms
-         */
-        excludeTestRange("AllocatePrefetchLines");
-        excludeTestRange("AllocateInstancePrefetchLines");
-
-        /*
          * JDK-8136766
          * Temporarily remove ThreadStackSize from testing because Windows can set it to 0
          * (for default OS size) but other platforms insist it must be greater than 0