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