Update to 11.0.9+11 (GA)

This commit is contained in:
Noah 2020-10-22 22:22:56 +08:00 committed by noah
parent 54df02de10
commit e025993356
14 changed files with 359 additions and 723 deletions

View File

@ -1,14 +1,5 @@
commit 21a400b0cecd92cbaf446ac3581df4ff17b1fde1
Date: Tue Sep 15 19:52:43 2020 +0800
8204947: Port ShenandoahTaskTerminator to mainline and make it default
Summary: <gc>: Improve gc performance, port ShenandoahTaskTerminator to mainline and make it default
LLT: jtreg
Bug url: https://bugs.openjdk.java.net/browse/JDK-8204947
diff --git a/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp b/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp
index c98691ea7..5fc5ee83e 100644
index c98691e..5fc5ee8 100644
--- a/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp
+++ b/src/hotspot/share/gc/cms/concurrentMarkSweepGeneration.cpp
@@ -55,6 +55,7 @@
@ -175,7 +166,7 @@ index c98691ea7..5fc5ee83e 100644
};
diff --git a/src/hotspot/share/gc/cms/parNewGeneration.cpp b/src/hotspot/share/gc/cms/parNewGeneration.cpp
index f6c55900f..0febc5292 100644
index f6c5590..0febc52 100644
--- a/src/hotspot/share/gc/cms/parNewGeneration.cpp
+++ b/src/hotspot/share/gc/cms/parNewGeneration.cpp
@@ -74,7 +74,7 @@ ParScanThreadState::ParScanThreadState(Space* to_space_,
@ -250,7 +241,7 @@ index f6c55900f..0febc5292 100644
*to(), *this, *_old_gen, *task_queues(),
_overflow_stacks, _preserved_marks_set,
diff --git a/src/hotspot/share/gc/cms/parNewGeneration.hpp b/src/hotspot/share/gc/cms/parNewGeneration.hpp
index b3e7c5a7d..7bf37e535 100644
index b3e7c5a..7bf37e5 100644
--- a/src/hotspot/share/gc/cms/parNewGeneration.hpp
+++ b/src/hotspot/share/gc/cms/parNewGeneration.hpp
@@ -134,7 +134,7 @@ class ParScanThreadState {
@ -263,7 +254,7 @@ index b3e7c5a7d..7bf37e535 100644
public:
AgeTable* age_table() {return &_ageTable;}
diff --git a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
index a987377ae..130f8ec0a 100644
index a987377..130f8ec 100644
--- a/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
+++ b/src/hotspot/share/gc/g1/g1CollectedHeap.cpp
@@ -3241,7 +3241,7 @@ protected:
@ -296,7 +287,7 @@ index a987377ae..130f8ec0a 100644
_workers->run_task(&proc_task_proxy, ergo_workers);
}
diff --git a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp
index eff6b7b02..920f796b5 100644
index eff6b7b..920f796 100644
--- a/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp
+++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.cpp
@@ -366,7 +366,7 @@ G1ConcurrentMark::G1ConcurrentMark(G1CollectedHeap* g1h,
@ -318,7 +309,7 @@ index eff6b7b02..920f796b5 100644
_second_overflow_barrier_sync.set_n_workers((int) active_tasks);
}
diff --git a/src/hotspot/share/gc/g1/g1ConcurrentMark.hpp b/src/hotspot/share/gc/g1/g1ConcurrentMark.hpp
index 6707537fd..dd253bbdf 100644
index 6707537..dd253bb 100644
--- a/src/hotspot/share/gc/g1/g1ConcurrentMark.hpp
+++ b/src/hotspot/share/gc/g1/g1ConcurrentMark.hpp
@@ -322,8 +322,8 @@ class G1ConcurrentMark : public CHeapObj<mtGC> {
@ -348,7 +339,7 @@ index 6707537fd..dd253bbdf 100644
// Claims the next available region to be scanned by a marking
// task/thread. It might return NULL if the next region is empty or
diff --git a/src/hotspot/share/gc/g1/g1FullGCMarkTask.cpp b/src/hotspot/share/gc/g1/g1FullGCMarkTask.cpp
index 34025dce0..d2c4b8d60 100644
index 34025dc..d2c4b8d 100644
--- a/src/hotspot/share/gc/g1/g1FullGCMarkTask.cpp
+++ b/src/hotspot/share/gc/g1/g1FullGCMarkTask.cpp
@@ -60,7 +60,7 @@ void G1FullGCMarkTask::work(uint worker_id) {
@ -361,7 +352,7 @@ index 34025dce0..d2c4b8d60 100644
// This is the point where the entire marking should have completed.
assert(marker->oop_stack()->is_empty(), "Marking should have completed");
diff --git a/src/hotspot/share/gc/g1/g1FullGCMarkTask.hpp b/src/hotspot/share/gc/g1/g1FullGCMarkTask.hpp
index 8dfff0555..7223cee50 100644
index 8dfff05..7223cee 100644
--- a/src/hotspot/share/gc/g1/g1FullGCMarkTask.hpp
+++ b/src/hotspot/share/gc/g1/g1FullGCMarkTask.hpp
@@ -36,7 +36,7 @@
@ -374,7 +365,7 @@ index 8dfff0555..7223cee50 100644
public:
G1FullGCMarkTask(G1FullCollector* collector);
diff --git a/src/hotspot/share/gc/g1/g1FullGCReferenceProcessorExecutor.hpp b/src/hotspot/share/gc/g1/g1FullGCReferenceProcessorExecutor.hpp
index 492c783b6..d4f06f56e 100644
index 492c783..d4f06f5 100644
--- a/src/hotspot/share/gc/g1/g1FullGCReferenceProcessorExecutor.hpp
+++ b/src/hotspot/share/gc/g1/g1FullGCReferenceProcessorExecutor.hpp
@@ -32,6 +32,7 @@
@ -399,7 +390,7 @@ index 492c783b6..d4f06f56e 100644
public:
G1RefProcTaskProxy(ProcessTask& proc_task,
diff --git a/src/hotspot/share/gc/parallel/pcTasks.cpp b/src/hotspot/share/gc/parallel/pcTasks.cpp
index 57ff23550..30a0f26bc 100644
index 57ff235..30a0f26 100644
--- a/src/hotspot/share/gc/parallel/pcTasks.cpp
+++ b/src/hotspot/share/gc/parallel/pcTasks.cpp
@@ -154,14 +154,15 @@ void RefProcTaskExecutor::execute(ProcessTask& task, uint ergo_workers)
@ -421,7 +412,7 @@ index 57ff23550..30a0f26bc 100644
}
PSParallelCompact::gc_task_manager()->execute_and_wait(q);
diff --git a/src/hotspot/share/gc/parallel/psParallelCompact.cpp b/src/hotspot/share/gc/parallel/psParallelCompact.cpp
index f4cbb9f3a..f6ba28260 100644
index f4cbb9f..f6ba282 100644
--- a/src/hotspot/share/gc/parallel/psParallelCompact.cpp
+++ b/src/hotspot/share/gc/parallel/psParallelCompact.cpp
@@ -2075,7 +2075,7 @@ void PSParallelCompact::marking_phase(ParCompactionManager* cm,
@ -458,7 +449,7 @@ index f4cbb9f3a..f6ba28260 100644
{
GCTraceTime(Trace, gc, phases) tm("Par Compact", &_gc_timer);
diff --git a/src/hotspot/share/gc/parallel/psScavenge.cpp b/src/hotspot/share/gc/parallel/psScavenge.cpp
index 87b2b4cac..9022654da 100644
index 87b2b4c..9022654 100644
--- a/src/hotspot/share/gc/parallel/psScavenge.cpp
+++ b/src/hotspot/share/gc/parallel/psScavenge.cpp
@@ -166,11 +166,11 @@ void PSRefProcTaskExecutor::execute(ProcessTask& task, uint ergo_workers)
@ -497,10 +488,10 @@ index 87b2b4cac..9022654da 100644
}
diff --git a/src/hotspot/share/gc/shared/gc_globals.hpp b/src/hotspot/share/gc/shared/gc_globals.hpp
index 33ce1dadd..5f39a2671 100644
index a77964e..b7fa7f6 100644
--- a/src/hotspot/share/gc/shared/gc_globals.hpp
+++ b/src/hotspot/share/gc/shared/gc_globals.hpp
@@ -348,6 +348,10 @@
@@ -376,6 +376,10 @@
develop(uintx, PromotionFailureALotInterval, 5, \
"Total collections between promotion failures a lot") \
\
@ -513,7 +504,7 @@ index 33ce1dadd..5f39a2671 100644
\
diff --git a/src/hotspot/share/gc/shared/owstTaskTerminator.cpp b/src/hotspot/share/gc/shared/owstTaskTerminator.cpp
new file mode 100644
index 000000000..3c32ab627
index 0000000..3c32ab6
--- /dev/null
+++ b/src/hotspot/share/gc/shared/owstTaskTerminator.cpp
@@ -0,0 +1,171 @@
@ -690,7 +681,7 @@ index 000000000..3c32ab627
+}
diff --git a/src/hotspot/share/gc/shared/owstTaskTerminator.hpp b/src/hotspot/share/gc/shared/owstTaskTerminator.hpp
new file mode 100644
index 000000000..9e6fe135a
index 0000000..9e6fe13
--- /dev/null
+++ b/src/hotspot/share/gc/shared/owstTaskTerminator.hpp
@@ -0,0 +1,79 @@
@ -774,7 +765,7 @@ index 000000000..9e6fe135a
+
+#endif // SHARE_VM_GC_SHARED_OWSTTASKTERMINATOR_HPP
diff --git a/src/hotspot/share/gc/shared/taskqueue.cpp b/src/hotspot/share/gc/shared/taskqueue.cpp
index 024fbbc9b..2738d6823 100644
index 024fbbc..2738d68 100644
--- a/src/hotspot/share/gc/shared/taskqueue.cpp
+++ b/src/hotspot/share/gc/shared/taskqueue.cpp
@@ -24,6 +24,7 @@
@ -812,29 +803,29 @@ index 024fbbc9b..2738d6823 100644
+}
+
diff --git a/src/hotspot/share/gc/shared/taskqueue.hpp b/src/hotspot/share/gc/shared/taskqueue.hpp
index 877b843ab..1cafcdeb2 100644
index ad97377..8909060 100644
--- a/src/hotspot/share/gc/shared/taskqueue.hpp
+++ b/src/hotspot/share/gc/shared/taskqueue.hpp
@@ -358,6 +358,8 @@ protected:
@@ -359,6 +359,8 @@ protected:
public:
// Returns "true" if some TaskQueue in the set contains a task.
virtual bool peek() = 0;
+ // Tasks in queue
+ virtual uint tasks() const = 0;
};
template <MEMFLAGS F> class TaskQueueSetSuperImpl: public CHeapObj<F>, public TaskQueueSetSuper {
@@ -389,6 +391,7 @@ public:
#if INCLUDE_SHENANDOAHGC
virtual size_t tasks() = 0;
#endif
@@ -393,6 +395,7 @@ public:
bool steal(uint queue_num, int* seed, E& t);
bool peek();
+ uint tasks() const;
uint size() const { return _n; }
};
@@ -414,6 +417,15 @@ bool GenericTaskQueueSet<T, F>::peek() {
return false;
#if INCLUDE_SHENANDOAHGC
size_t tasks();
#endif
@@ -432,6 +435,15 @@ size_t GenericTaskQueueSet<T, F>::tasks() {
}
#endif
+template<class T, MEMFLAGS F>
+uint GenericTaskQueueSet<T, F>::tasks() const {
@ -848,7 +839,7 @@ index 877b843ab..1cafcdeb2 100644
// When to terminate from the termination protocol.
class TerminatorTerminator: public CHeapObj<mtInternal> {
public:
@@ -425,8 +437,8 @@ public:
@@ -443,8 +455,8 @@ public:
#undef TRACESPINNING
@ -856,19 +847,19 @@ index 877b843ab..1cafcdeb2 100644
-private:
+class ParallelTaskTerminator: public CHeapObj<mtGC> {
+protected:
uint _n_threads;
TaskQueueSetSuper* _queue_set;
@@ -462,7 +474,7 @@ public:
#if INCLUDE_SHENANDOAHGC
protected:
#endif
@@ -483,7 +495,7 @@ public:
// As above, but it also terminates if the should_exit_termination()
// method of the terminator parameter returns true. If terminator is
// NULL, then it is ignored.
- bool offer_termination(TerminatorTerminator* terminator);
+ virtual bool offer_termination(TerminatorTerminator* terminator);
- SHENANDOAHGC_ONLY(virtual) bool offer_termination(TerminatorTerminator* terminator);
+ SHENANDOAHGC_ONLY(virtual) virtual bool offer_termination(TerminatorTerminator* terminator);
// Reset the terminator, so that it may be reused again.
// The caller is responsible for ensuring that this is done
@@ -481,6 +493,38 @@ public:
@@ -502,6 +514,38 @@ public:
#endif
};

View File

@ -1,52 +1,8 @@
From 7995d2341ea83431d68cf36d22577074e111e32d Mon Sep 17 00:00:00 2001
Date: Mon, 13 Apr 2020 10:40:13 +0800
Subject: [PATCH] 8214527: AArch64: ZGC for Aarch64
Summary: <gc>: <Implement ZGC for AArch64>
LLT: jtreg
Bug url: https://bugs.openjdk.java.net/browse/JDK-8214527
---
make/autoconf/hotspot.m4 | 3 +-
src/hotspot/cpu/aarch64/aarch64.ad | 486 +++++++++++++++++++++
.../cpu/aarch64/c1_LIRAssembler_aarch64.cpp | 12 +-
.../aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp | 408 +++++++++++++++++
.../aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp | 92 ++++
src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp | 19 +-
.../cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp | 8 +-
.../gc/z/zAddress_linux_aarch64.inline.hpp | 31 ++
.../gc/z/zBackingFile_linux_aarch64.cpp | 426 ++++++++++++++++++
.../gc/z/zBackingFile_linux_aarch64.hpp | 63 +++
.../gc/z/zBackingPath_linux_aarch64.cpp | 149 +++++++
.../gc/z/zBackingPath_linux_aarch64.hpp | 52 +++
.../linux_aarch64/gc/z/zGlobals_linux_aarch64.cpp | 33 ++
.../linux_aarch64/gc/z/zGlobals_linux_aarch64.hpp | 88 ++++
.../gc/z/zLargePages_linux_aarch64.cpp | 38 ++
.../linux_aarch64/gc/z/zNUMA_linux_aarch64.cpp | 83 ++++
.../gc/z/zPhysicalMemoryBacking_linux_aarch64.cpp | 270 ++++++++++++
.../gc/z/zPhysicalMemoryBacking_linux_aarch64.hpp | 65 +++
.../gc/z/zVirtualMemory_linux_aarch64.cpp | 41 ++
src/hotspot/share/gc/z/c1/zBarrierSetC1.cpp | 20 +-
20 files changed, 2361 insertions(+), 20 deletions(-)
create mode 100644 src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp
create mode 100644 src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zAddress_linux_aarch64.inline.hpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.cpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.hpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.cpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.hpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.cpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.hpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zLargePages_linux_aarch64.cpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zNUMA_linux_aarch64.cpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.cpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.hpp
create mode 100644 src/hotspot/os_cpu/linux_aarch64/gc/z/zVirtualMemory_linux_aarch64.cpp
diff --git a/make/autoconf/hotspot.m4 b/make/autoconf/hotspot.m4
index 1d4c710be..6bfda33da 100644
index d598b98..61739b9 100644
--- a/make/autoconf/hotspot.m4
+++ b/make/autoconf/hotspot.m4
@@ -340,7 +340,8 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
@@ -367,7 +367,8 @@ AC_DEFUN_ONCE([HOTSPOT_SETUP_JVM_FEATURES],
# Only enable ZGC on supported platforms
AC_MSG_CHECKING([if zgc can be built])
@ -57,7 +13,7 @@ index 1d4c710be..6bfda33da 100644
else
DISABLED_JVM_FEATURES="$DISABLED_JVM_FEATURES zgc"
diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad
index f2a9207b8..57b20775e 100644
index 890e457..0625053 100644
--- a/src/hotspot/cpu/aarch64/aarch64.ad
+++ b/src/hotspot/cpu/aarch64/aarch64.ad
@@ -957,6 +957,146 @@ reg_class v3_reg(
@ -219,7 +175,7 @@ index f2a9207b8..57b20775e 100644
//----------SOURCE BLOCK-------------------------------------------------------
// This is a block of C++ code which provides values, functions, and
@@ -4732,6 +4877,258 @@ operand vRegD_V3()
@@ -4738,6 +4883,258 @@ operand vRegD_V3()
interface(REG_INTER);
%}
@ -478,7 +434,7 @@ index f2a9207b8..57b20775e 100644
// Flags register, used as output of signed compare instructions
// note that on AArch64 we also use this register as the output for
@@ -17077,6 +17474,95 @@ instruct vsrl2L_imm(vecX dst, vecX src, immI shift) %{
@@ -17078,6 +17475,95 @@ instruct vsrl2L_imm(vecX dst, vecX src, immI shift) %{
ins_pipe(vshift128_imm);
%}
@ -575,10 +531,10 @@ index f2a9207b8..57b20775e 100644
// These must follow all instruction definitions as they use the names
// defined in the instructions definitions.
diff --git a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp
index 73202f669..cf3ce0a8f 100644
index fe301df..6ab944b 100644
--- a/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/c1_LIRAssembler_aarch64.cpp
@@ -1012,7 +1012,11 @@ void LIR_Assembler::mem2reg(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_Patch
@@ -1013,7 +1013,11 @@ void LIR_Assembler::mem2reg(LIR_Opr src, LIR_Opr dest, BasicType type, LIR_Patch
if (UseCompressedOops && !wide) {
__ decode_heap_oop(dest->as_register());
}
@ -591,10 +547,10 @@ index 73202f669..cf3ce0a8f 100644
} else if (type == T_ADDRESS && addr->disp() == oopDesc::klass_offset_in_bytes()) {
if (UseCompressedClassPointers) {
__ decode_klass_not_null(dest->as_register());
@@ -2818,7 +2822,11 @@ void LIR_Assembler::negate(LIR_Opr left, LIR_Opr dest, LIR_Opr tmp) {
void LIR_Assembler::leal(LIR_Opr addr, LIR_Opr dest, LIR_PatchCode patch_code, CodeEmitInfo* info) {
@@ -2825,7 +2829,11 @@ void LIR_Assembler::leal(LIR_Opr addr, LIR_Opr dest, LIR_PatchCode patch_code, C
return;
}
#endif
- assert(patch_code == lir_patch_none, "Patch code not supported");
+ if (patch_code != lir_patch_none) {
+ deoptimize_trap(info);
@ -606,7 +562,7 @@ index 73202f669..cf3ce0a8f 100644
diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp
new file mode 100644
index 000000000..90b2b4ca7
index 0000000..90b2b4c
--- /dev/null
+++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp
@@ -0,0 +1,408 @@
@ -1020,7 +976,7 @@ index 000000000..90b2b4ca7
+}
diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp
new file mode 100644
index 000000000..7e8be01cc
index 0000000..7e8be01
--- /dev/null
+++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp
@@ -0,0 +1,92 @@
@ -1117,7 +1073,7 @@ index 000000000..7e8be01cc
+
+#endif // CPU_AARCH64_GC_Z_ZBARRIERSETASSEMBLER_AARCH64_HPP
diff --git a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp
index 89a433013..ac7eb8480 100644
index 89a4330..ac7eb84 100644
--- a/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/stubGenerator_aarch64.cpp
@@ -45,6 +45,9 @@
@ -1148,7 +1104,7 @@ index 89a433013..ac7eb8480 100644
__ mov(c_rarg3, (intptr_t) Universe::verify_oop_mask());
__ andr(c_rarg2, r0, c_rarg3);
diff --git a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp
index d2290a670..381211ecc 100644
index d2290a6..381211e 100644
--- a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp
+++ b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp
@@ -273,13 +273,13 @@ void ZBarrierSetAssembler::generate_c1_load_barrier_stub(LIR_Assembler* ce,
@ -1171,7 +1127,7 @@ index d2290a670..381211ecc 100644
assert_different_registers(ref, ref_addr, noreg);
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zAddress_linux_aarch64.inline.hpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zAddress_linux_aarch64.inline.hpp
new file mode 100644
index 000000000..936480cb5
index 0000000..936480c
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zAddress_linux_aarch64.inline.hpp
@@ -0,0 +1,31 @@
@ -1208,7 +1164,7 @@ index 000000000..936480cb5
+#endif // OS_CPU_LINUX_AARCH64_ZADDRESS_LINUX_AARCH64_INLINE_HPP
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.cpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.cpp
new file mode 100644
index 000000000..47894b5c8
index 0000000..47894b5
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.cpp
@@ -0,0 +1,426 @@
@ -1640,7 +1596,7 @@ index 000000000..47894b5c8
+}
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.hpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.hpp
new file mode 100644
index 000000000..032dbc133
index 0000000..032dbc1
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingFile_linux_aarch64.hpp
@@ -0,0 +1,63 @@
@ -1709,7 +1665,7 @@ index 000000000..032dbc133
+#endif // OS_CPU_LINUX_AARCH64_ZBACKINGFILE_LINUX_AARCH64_HPP
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.cpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.cpp
new file mode 100644
index 000000000..1adffa32b
index 0000000..1adffa3
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.cpp
@@ -0,0 +1,149 @@
@ -1864,7 +1820,7 @@ index 000000000..1adffa32b
+}
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.hpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.hpp
new file mode 100644
index 000000000..a03aaf960
index 0000000..a03aaf9
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zBackingPath_linux_aarch64.hpp
@@ -0,0 +1,52 @@
@ -1922,7 +1878,7 @@ index 000000000..a03aaf960
+#endif // OS_CPU_LINUX_AARCH64_ZBACKINGPATH_LINUX_AARCH64_HPP
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.cpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.cpp
new file mode 100644
index 000000000..5d2480993
index 0000000..5d24809
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.cpp
@@ -0,0 +1,33 @@
@ -1961,7 +1917,7 @@ index 000000000..5d2480993
+}
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.hpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.hpp
new file mode 100644
index 000000000..93c18067b
index 0000000..93c1806
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zGlobals_linux_aarch64.hpp
@@ -0,0 +1,88 @@
@ -2055,7 +2011,7 @@ index 000000000..93c18067b
+#endif // OS_CPU_LINUX_AARCH64_ZGLOBALS_LINUX_AARCH64_HPP
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zLargePages_linux_aarch64.cpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zLargePages_linux_aarch64.cpp
new file mode 100644
index 000000000..c79195cd1
index 0000000..c79195c
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zLargePages_linux_aarch64.cpp
@@ -0,0 +1,38 @@
@ -2099,7 +2055,7 @@ index 000000000..c79195cd1
+}
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zNUMA_linux_aarch64.cpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zNUMA_linux_aarch64.cpp
new file mode 100644
index 000000000..10706fac2
index 0000000..10706fa
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zNUMA_linux_aarch64.cpp
@@ -0,0 +1,83 @@
@ -2188,7 +2144,7 @@ index 000000000..10706fac2
+}
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.cpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.cpp
new file mode 100644
index 000000000..55c2a16e0
index 0000000..55c2a16
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.cpp
@@ -0,0 +1,270 @@
@ -2464,7 +2420,7 @@ index 000000000..55c2a16e0
+}
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.hpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.hpp
new file mode 100644
index 000000000..c55b7b17c
index 0000000..c55b7b1
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zPhysicalMemoryBacking_linux_aarch64.hpp
@@ -0,0 +1,65 @@
@ -2535,7 +2491,7 @@ index 000000000..c55b7b17c
+#endif // OS_CPU_LINUX_AARCH64_ZPHYSICALMEMORYBACKING_LINUX_AARCH64_HPP
diff --git a/src/hotspot/os_cpu/linux_aarch64/gc/z/zVirtualMemory_linux_aarch64.cpp b/src/hotspot/os_cpu/linux_aarch64/gc/z/zVirtualMemory_linux_aarch64.cpp
new file mode 100644
index 000000000..68df40191
index 0000000..68df401
--- /dev/null
+++ b/src/hotspot/os_cpu/linux_aarch64/gc/z/zVirtualMemory_linux_aarch64.cpp
@@ -0,0 +1,41 @@
@ -2581,7 +2537,7 @@ index 000000000..68df40191
+ return true;
+}
diff --git a/src/hotspot/share/gc/z/c1/zBarrierSetC1.cpp b/src/hotspot/share/gc/z/c1/zBarrierSetC1.cpp
index 9f8ce7424..0abd3980f 100644
index 9f8ce74..0abd398 100644
--- a/src/hotspot/share/gc/z/c1/zBarrierSetC1.cpp
+++ b/src/hotspot/share/gc/z/c1/zBarrierSetC1.cpp
@@ -38,21 +38,15 @@ ZLoadBarrierStubC1::ZLoadBarrierStubC1(LIRAccess& access, LIR_Opr ref, address r
@ -2613,6 +2569,3 @@ index 9f8ce7424..0abd3980f 100644
}
DecoratorSet ZLoadBarrierStubC1::decorators() const {
--
2.19.1

View File

@ -1,28 +1,10 @@
From 12c28e19bf70b610a723828ce8395902381436fb Mon Sep 17 00:00:00 2001
Date: Tue, 18 Feb 2020 18:03:42 +0800
Subject: [PATCH] 8217856: ZGC: Break out C2 matching rules into separate AD
file
Summary: <gc>: <separate AD files to handle C2 matching rules>
LLT: jtreg
Bug url: https://bugs.openjdk.java.net/browse/JDK-8217856
---
make/hotspot/gensrc/GensrcAdlc.gmk | 6 +
src/hotspot/cpu/aarch64/aarch64.ad | 244 ---------------------------
src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad | 268 ++++++++++++++++++++++++++++++
src/hotspot/cpu/x86/gc/z/z_x86_64.ad | 168 +++++++++++++++++++
src/hotspot/cpu/x86/x86_64.ad | 151 -----------------
5 files changed, 442 insertions(+), 395 deletions(-)
create mode 100644 src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad
create mode 100644 src/hotspot/cpu/x86/gc/z/z_x86_64.ad
diff --git a/make/hotspot/gensrc/GensrcAdlc.gmk b/make/hotspot/gensrc/GensrcAdlc.gmk
index 92b030b69..1eaed25d9 100644
index 6878962..bb9721c 100644
--- a/make/hotspot/gensrc/GensrcAdlc.gmk
+++ b/make/hotspot/gensrc/GensrcAdlc.gmk
@@ -136,6 +136,12 @@ ifeq ($(call check-jvm-feature, compiler2), true)
$d/os_cpu/$(HOTSPOT_TARGET_OS)_$(HOTSPOT_TARGET_CPU_ARCH)/$(HOTSPOT_TARGET_OS)_$(HOTSPOT_TARGET_CPU_ARCH).ad \
)))
@@ -146,6 +146,12 @@ ifeq ($(call check-jvm-feature, compiler2), true)
)))
endif
+ ifeq ($(call check-jvm-feature, zgc), true)
+ AD_SRC_FILES += $(call uniq, $(wildcard $(foreach d, $(AD_SRC_ROOTS), \
@ -34,7 +16,7 @@ index 92b030b69..1eaed25d9 100644
INSERT_FILENAME_AWK_SCRIPT := \
diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad
index 93dd78e51..3cca2da5b 100644
index 05b36e2..18e774f 100644
--- a/src/hotspot/cpu/aarch64/aarch64.ad
+++ b/src/hotspot/cpu/aarch64/aarch64.ad
@@ -1128,13 +1128,6 @@ definitions %{
@ -51,7 +33,7 @@ index 93dd78e51..3cca2da5b 100644
//----------SOURCE BLOCK-------------------------------------------------------
// This is a block of C++ code which provides values, functions, and
// definitions necessary in the rest of the architecture description
@@ -17487,243 +17480,6 @@ instruct vsrl2L_imm(vecX dst, vecX src, immI shift) %{
@@ -17488,243 +17481,6 @@ instruct vsrl2L_imm(vecX dst, vecX src, immI shift) %{
ins_pipe(vshift128_imm);
%}
@ -297,7 +279,7 @@ index 93dd78e51..3cca2da5b 100644
// These must follow all instruction definitions as they use the names
diff --git a/src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad b/src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad
new file mode 100644
index 000000000..50cc6f924
index 0000000..50cc6f9
--- /dev/null
+++ b/src/hotspot/cpu/aarch64/gc/z/z_aarch64.ad
@@ -0,0 +1,268 @@
@ -571,7 +553,7 @@ index 000000000..50cc6f924
+
diff --git a/src/hotspot/cpu/x86/gc/z/z_x86_64.ad b/src/hotspot/cpu/x86/gc/z/z_x86_64.ad
new file mode 100644
index 000000000..38c2e926b
index 0000000..38c2e92
--- /dev/null
+++ b/src/hotspot/cpu/x86/gc/z/z_x86_64.ad
@@ -0,0 +1,168 @@
@ -744,7 +726,7 @@ index 000000000..38c2e926b
+%}
+
diff --git a/src/hotspot/cpu/x86/x86_64.ad b/src/hotspot/cpu/x86/x86_64.ad
index f795fb823..7879547ce 100644
index d127732..fce1b85 100644
--- a/src/hotspot/cpu/x86/x86_64.ad
+++ b/src/hotspot/cpu/x86/x86_64.ad
@@ -538,19 +538,6 @@ reg_class int_rdi_reg(RDI);
@ -787,7 +769,7 @@ index f795fb823..7879547ce 100644
%}
//----------ENCODING BLOCK-----------------------------------------------------
@@ -12520,131 +12494,6 @@ instruct RethrowException()
@@ -12555,131 +12529,6 @@ instruct RethrowException()
ins_pipe(pipe_jmp);
%}
@ -919,6 +901,3 @@ index f795fb823..7879547ce 100644
// ============================================================================
// This name is KNOWN by the ADLC and cannot be changed.
// The ADLC forces a 'TypeRawPtr::BOTTOM' output type
--
2.12.3

View File

@ -1,48 +1,8 @@
From f9885f88585a8299760f905b420af1adb5bcca44 Mon Sep 17 00:00:00 2001
Date: Mon, 13 Apr 2020 10:46:11 +0800
Subject: [PATCH] 8224675: Late GC barrier insertion for ZGC
Summary: <gc>: <Insert ZGC load barriers after loop optimizations, before macro expansion.>
LLT: jtreg
Bug url: https://bugs.openjdk.java.net/browse/JDK-8224675
---
src/hotspot/cpu/aarch64/aarch64.ad | 60 +-
.../aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp | 1 -
src/hotspot/cpu/x86/x86_64.ad | 77 +-
src/hotspot/share/adlc/formssel.cpp | 9 +-
src/hotspot/share/compiler/compilerDirectives.hpp | 2 +-
src/hotspot/share/gc/shared/c2/barrierSetC2.hpp | 4 +-
src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp | 1768 ++++++++---------
src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp | 116 +-
src/hotspot/share/gc/z/zHeap.cpp | 26 -
src/hotspot/share/gc/z/z_globals.hpp | 3 -
src/hotspot/share/opto/classes.hpp | 5 +-
src/hotspot/share/opto/compile.cpp | 43 +-
src/hotspot/share/opto/compile.hpp | 23 +-
src/hotspot/share/opto/escape.cpp | 8 -
src/hotspot/share/opto/idealGraphPrinter.cpp | 18 +-
src/hotspot/share/opto/idealGraphPrinter.hpp | 14 +-
src/hotspot/share/opto/lcm.cpp | 1 -
src/hotspot/share/opto/loopnode.cpp | 43 +-
src/hotspot/share/opto/loopnode.hpp | 6 +-
src/hotspot/share/opto/loopopts.cpp | 6 -
src/hotspot/share/opto/matcher.cpp | 27 +
src/hotspot/share/opto/memnode.cpp | 21 +-
src/hotspot/share/opto/memnode.hpp | 11 +-
src/hotspot/share/opto/node.cpp | 13 +-
src/hotspot/share/opto/node.hpp | 7 +-
src/hotspot/share/opto/phaseX.cpp | 3 -
src/hotspot/share/opto/phasetype.hpp | 6 +
src/hotspot/share/opto/vectornode.cpp | 1 -
src/hotspot/share/runtime/stackValue.cpp | 8 +-
src/hotspot/share/utilities/growableArray.hpp | 37 +
30 files changed, 1259 insertions(+), 1108 deletions(-)
diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad
index 57b20775e..a6d2e6609 100644
index 0625053..af3e593 100644
--- a/src/hotspot/cpu/aarch64/aarch64.ad
+++ b/src/hotspot/cpu/aarch64/aarch64.ad
@@ -17517,7 +17517,7 @@ instruct loadBarrierSlowReg(iRegP dst, memory mem, rFlagsReg cr,
@@ -17518,7 +17518,7 @@ instruct loadBarrierSlowReg(iRegP dst, memory mem, rFlagsReg cr,
vRegD_V25 v25, vRegD_V26 v26, vRegD_V27 v27, vRegD_V28 v28, vRegD_V29 v29,
vRegD_V30 v30, vRegD_V31 v31) %{
match(Set dst (LoadBarrierSlowReg mem));
@ -51,7 +11,7 @@ index 57b20775e..a6d2e6609 100644
effect(DEF dst, KILL cr,
KILL v0, KILL v1, KILL v2, KILL v3, KILL v4, KILL v5, KILL v6, KILL v7,
@@ -17546,7 +17546,7 @@ instruct loadBarrierWeakSlowReg(iRegP dst, memory mem, rFlagsReg cr,
@@ -17547,7 +17547,7 @@ instruct loadBarrierWeakSlowReg(iRegP dst, memory mem, rFlagsReg cr,
vRegD_V25 v25, vRegD_V26 v26, vRegD_V27 v27, vRegD_V28 v28, vRegD_V29 v29,
vRegD_V30 v30, vRegD_V31 v31) %{
match(Set dst (LoadBarrierSlowReg mem));
@ -60,7 +20,7 @@ index 57b20775e..a6d2e6609 100644
effect(DEF dst, KILL cr,
KILL v0, KILL v1, KILL v2, KILL v3, KILL v4, KILL v5, KILL v6, KILL v7,
@@ -17563,6 +17563,62 @@ instruct loadBarrierWeakSlowReg(iRegP dst, memory mem, rFlagsReg cr,
@@ -17564,6 +17564,62 @@ instruct loadBarrierWeakSlowReg(iRegP dst, memory mem, rFlagsReg cr,
ins_pipe(pipe_slow);
%}
@ -124,7 +84,7 @@ index 57b20775e..a6d2e6609 100644
// These must follow all instruction definitions as they use the names
// defined in the instructions definitions.
diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp
index 90b2b4ca7..8e169ace4 100644
index 90b2b4c..8e169ac 100644
--- a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp
@@ -245,7 +245,6 @@ void ZBarrierSetAssembler::generate_c1_load_barrier_stub(LIR_Assembler* ce,
@ -136,23 +96,23 @@ index 90b2b4ca7..8e169ace4 100644
ref_addr = tmp = stub->tmp()->as_pointer_register();
} else {
diff --git a/src/hotspot/cpu/x86/x86_64.ad b/src/hotspot/cpu/x86/x86_64.ad
index 9d9eda84b..97c396875 100644
index 3f92fdf..e256e22 100644
--- a/src/hotspot/cpu/x86/x86_64.ad
+++ b/src/hotspot/cpu/x86/x86_64.ad
@@ -538,6 +538,12 @@ reg_class int_rdi_reg(RDI);
@@ -539,6 +539,12 @@ reg_class int_rdi_reg(RDI);
%}
+source_hpp %{
source_hpp %{
+
+#include "gc/z/c2/zBarrierSetC2.hpp"
+
+%}
+
source_hpp %{
+source_hpp %{
#if INCLUDE_ZGC
#include "gc/z/zBarrierSetAssembler.hpp"
@@ -12630,7 +12636,7 @@ instruct RethrowException()
#endif
@@ -12665,7 +12671,7 @@ instruct RethrowException()
instruct loadBarrierSlowRegNoVec(rRegP dst, memory mem, rFlagsReg cr) %{
match(Set dst (LoadBarrierSlowReg mem));
@ -161,7 +121,7 @@ index 9d9eda84b..97c396875 100644
effect(DEF dst, KILL cr);
@@ -12661,7 +12667,7 @@ instruct loadBarrierSlowRegXmmAndYmm(rRegP dst, memory mem, rFlagsReg cr,
@@ -12696,7 +12702,7 @@ instruct loadBarrierSlowRegXmmAndYmm(rRegP dst, memory mem, rFlagsReg cr,
rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15) %{
match(Set dst (LoadBarrierSlowReg mem));
@ -170,7 +130,7 @@ index 9d9eda84b..97c396875 100644
effect(DEF dst, KILL cr,
KILL x0, KILL x1, KILL x2, KILL x3,
@@ -12700,7 +12706,7 @@ instruct loadBarrierSlowRegZmm(rRegP dst, memory mem, rFlagsReg cr,
@@ -12735,7 +12741,7 @@ instruct loadBarrierSlowRegZmm(rRegP dst, memory mem, rFlagsReg cr,
rxmm28 x28, rxmm29 x29, rxmm30 x30, rxmm31 x31) %{
match(Set dst (LoadBarrierSlowReg mem));
@ -179,7 +139,7 @@ index 9d9eda84b..97c396875 100644
effect(DEF dst, KILL cr,
KILL x0, KILL x1, KILL x2, KILL x3,
@@ -12739,7 +12745,7 @@ instruct loadBarrierSlowRegZmm(rRegP dst, memory mem, rFlagsReg cr,
@@ -12774,7 +12780,7 @@ instruct loadBarrierSlowRegZmm(rRegP dst, memory mem, rFlagsReg cr,
instruct loadBarrierWeakSlowRegNoVec(rRegP dst, memory mem, rFlagsReg cr) %{
match(Set dst (LoadBarrierSlowReg mem));
@ -188,7 +148,7 @@ index 9d9eda84b..97c396875 100644
effect(DEF dst, KILL cr);
@@ -12769,8 +12775,8 @@ instruct loadBarrierWeakSlowRegXmmAndYmm(rRegP dst, memory mem, rFlagsReg cr,
@@ -12804,8 +12810,8 @@ instruct loadBarrierWeakSlowRegXmmAndYmm(rRegP dst, memory mem, rFlagsReg cr,
rxmm8 x8, rxmm9 x9, rxmm10 x10, rxmm11 x11,
rxmm12 x12, rxmm13 x13, rxmm14 x14, rxmm15 x15) %{
@ -199,7 +159,7 @@ index 9d9eda84b..97c396875 100644
effect(DEF dst, KILL cr,
KILL x0, KILL x1, KILL x2, KILL x3,
@@ -12808,8 +12814,8 @@ instruct loadBarrierWeakSlowRegZmm(rRegP dst, memory mem, rFlagsReg cr,
@@ -12843,8 +12849,8 @@ instruct loadBarrierWeakSlowRegZmm(rRegP dst, memory mem, rFlagsReg cr,
rxmm24 x24, rxmm25 x25, rxmm26 x26, rxmm27 x27,
rxmm28 x28, rxmm29 x29, rxmm30 x30, rxmm31 x31) %{
@ -210,7 +170,7 @@ index 9d9eda84b..97c396875 100644
effect(DEF dst, KILL cr,
KILL x0, KILL x1, KILL x2, KILL x3,
@@ -12840,6 +12846,61 @@ instruct loadBarrierWeakSlowRegZmm(rRegP dst, memory mem, rFlagsReg cr,
@@ -12875,6 +12881,61 @@ instruct loadBarrierWeakSlowRegZmm(rRegP dst, memory mem, rFlagsReg cr,
ins_pipe(pipe_slow);
%}
@ -273,7 +233,7 @@ index 9d9eda84b..97c396875 100644
// This name is KNOWN by the ADLC and cannot be changed.
// The ADLC forces a 'TypeRawPtr::BOTTOM' output type
diff --git a/src/hotspot/share/adlc/formssel.cpp b/src/hotspot/share/adlc/formssel.cpp
index 466880d19..2845cf6d8 100644
index 3c02c51..ef704f4 100644
--- a/src/hotspot/share/adlc/formssel.cpp
+++ b/src/hotspot/share/adlc/formssel.cpp
@@ -775,8 +775,9 @@ bool InstructForm::captures_bottom_type(FormDict &globals) const {
@ -285,11 +245,11 @@ index 466880d19..2845cf6d8 100644
!strcmp(_matrule->_rChild->_opType,"LoadBarrierSlowReg") ||
- !strcmp(_matrule->_rChild->_opType,"LoadBarrierWeakSlowReg") ||
#endif
!strcmp(_matrule->_rChild->_opType,"CompareAndExchangeP") ||
!strcmp(_matrule->_rChild->_opType,"CompareAndExchangeN"))) return true;
@@ -3503,10 +3504,12 @@ int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
"WeakCompareAndSwapB", "WeakCompareAndSwapS", "WeakCompareAndSwapI", "WeakCompareAndSwapL", "WeakCompareAndSwapP", "WeakCompareAndSwapN",
"CompareAndExchangeB", "CompareAndExchangeS", "CompareAndExchangeI", "CompareAndExchangeL", "CompareAndExchangeP", "CompareAndExchangeN",
#if INCLUDE_SHENANDOAHGC
!strcmp(_matrule->_rChild->_opType,"ShenandoahCompareAndExchangeP") ||
@@ -3510,10 +3511,12 @@ int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
"ShenandoahCompareAndSwapN", "ShenandoahCompareAndSwapP", "ShenandoahWeakCompareAndSwapP", "ShenandoahWeakCompareAndSwapN", "ShenandoahCompareAndExchangeP", "ShenandoahCompareAndExchangeN",
#endif
"StoreCM",
- "ClearArray",
"GetAndSetB", "GetAndSetS", "GetAndAddI", "GetAndSetI", "GetAndSetP",
@ -303,7 +263,7 @@ index 466880d19..2845cf6d8 100644
int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
if( strcmp(_opType,"PrefetchAllocation")==0 )
diff --git a/src/hotspot/share/compiler/compilerDirectives.hpp b/src/hotspot/share/compiler/compilerDirectives.hpp
index b4de7faed..8eba28f94 100644
index b4de7fa..8eba28f 100644
--- a/src/hotspot/share/compiler/compilerDirectives.hpp
+++ b/src/hotspot/share/compiler/compilerDirectives.hpp
@@ -67,7 +67,7 @@ NOT_PRODUCT(cflags(TraceOptoOutput, bool, TraceOptoOutput, TraceOptoOutput))
@ -316,7 +276,7 @@ index b4de7faed..8eba28f94 100644
#define compilerdirectives_c2_flags(cflags)
#endif
diff --git a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
index 8baf4d9de..eea74674f 100644
index 8baf4d9..eea7467 100644
--- a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
+++ b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
@@ -208,15 +208,17 @@ public:
@ -339,7 +299,7 @@ index 8baf4d9de..eea74674f 100644
#endif // SHARE_GC_SHARED_C2_BARRIERSETC2_HPP
diff --git a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp
index 221ab4c2f..bf0bd43af 100644
index 221ab4c..bf0bd43 100644
--- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp
+++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp
@@ -22,14 +22,21 @@
@ -2331,7 +2291,7 @@ index 221ab4c2f..bf0bd43af 100644
+ return true;
+}
diff --git a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp
index fc9dadd67..bef6a7048 100644
index fc9dadd..bef6a70 100644
--- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp
+++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp
@@ -29,14 +29,33 @@
@ -2525,7 +2485,7 @@ index fc9dadd67..bef6a7048 100644
#endif // SHARE_GC_Z_C2_ZBARRIERSETC2_HPP
diff --git a/src/hotspot/share/gc/z/zHeap.cpp b/src/hotspot/share/gc/z/zHeap.cpp
index eb72707e0..62f97d2a2 100644
index eb72707..62f97d2 100644
--- a/src/hotspot/share/gc/z/zHeap.cpp
+++ b/src/hotspot/share/gc/z/zHeap.cpp
@@ -304,35 +304,9 @@ void ZHeap::mark_flush_and_free(Thread* thread) {
@ -2565,7 +2525,7 @@ index eb72707e0..62f97d2a2 100644
if (!_mark.end()) {
// Marking not completed, continue concurrent mark
diff --git a/src/hotspot/share/gc/z/z_globals.hpp b/src/hotspot/share/gc/z/z_globals.hpp
index a75329372..9e0f8985b 100644
index a753293..9e0f898 100644
--- a/src/hotspot/share/gc/z/z_globals.hpp
+++ b/src/hotspot/share/gc/z/z_globals.hpp
@@ -94,9 +94,6 @@
@ -2579,7 +2539,7 @@ index a75329372..9e0f8985b 100644
"Verify that reference loads are followed by barriers")
diff --git a/src/hotspot/share/opto/classes.hpp b/src/hotspot/share/opto/classes.hpp
index 4314edd96..f6b588685 100644
index 6b7050d..69f8a3c 100644
--- a/src/hotspot/share/opto/classes.hpp
+++ b/src/hotspot/share/opto/classes.hpp
@@ -196,7 +196,10 @@ macro(LoadS)
@ -2595,10 +2555,10 @@ index 4314edd96..f6b588685 100644
macro(Loop)
macro(LoopLimit)
diff --git a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp
index dc92af402..ef4a6ab13 100644
index 147ce88..45e2d11 100644
--- a/src/hotspot/share/opto/compile.cpp
+++ b/src/hotspot/share/opto/compile.cpp
@@ -2207,8 +2207,8 @@ void Compile::Optimize() {
@@ -2213,8 +2213,8 @@ void Compile::Optimize() {
#endif
@ -2608,7 +2568,7 @@ index dc92af402..ef4a6ab13 100644
bs->verify_gc_barriers(true);
#endif
@@ -2380,12 +2380,6 @@ void Compile::Optimize() {
@@ -2386,12 +2386,6 @@ void Compile::Optimize() {
return;
}
@ -2621,7 +2581,7 @@ index dc92af402..ef4a6ab13 100644
if (failing()) return;
// Ensure that major progress is now clear
@@ -2405,7 +2399,13 @@ void Compile::Optimize() {
@@ -2411,7 +2405,13 @@ void Compile::Optimize() {
}
#ifdef ASSERT
@ -2636,7 +2596,7 @@ index dc92af402..ef4a6ab13 100644
bs->verify_gc_barriers(false);
#endif
@@ -2953,10 +2953,6 @@ void Compile::final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc) {
@@ -2980,10 +2980,6 @@ void Compile::final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc) {
case Op_LoadL_unaligned:
case Op_LoadPLocked:
case Op_LoadP:
@ -2647,7 +2607,7 @@ index dc92af402..ef4a6ab13 100644
case Op_LoadN:
case Op_LoadRange:
case Op_LoadS: {
@@ -2973,6 +2969,29 @@ void Compile::final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc) {
@@ -3000,6 +2996,29 @@ void Compile::final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc) {
break;
}
@ -2678,7 +2638,7 @@ index dc92af402..ef4a6ab13 100644
Node *addp = n->in(AddPNode::Address);
assert( !addp->is_AddP() ||
diff --git a/src/hotspot/share/opto/compile.hpp b/src/hotspot/share/opto/compile.hpp
index a56439bbf..bfd85d032 100644
index 04ced5d..320030e 100644
--- a/src/hotspot/share/opto/compile.hpp
+++ b/src/hotspot/share/opto/compile.hpp
@@ -52,6 +52,7 @@ class C2Compiler;
@ -2689,7 +2649,7 @@ index a56439bbf..bfd85d032 100644
class InlineTree;
class Int_Array;
class LoadBarrierNode;
@@ -655,6 +656,7 @@ class Compile : public Phase {
@@ -659,6 +660,7 @@ class Compile : public Phase {
void set_inlining_incrementally(bool z) { _inlining_incrementally = z; }
int inlining_incrementally() const { return _inlining_incrementally; }
void set_major_progress() { _major_progress++; }
@ -2697,7 +2657,7 @@ index a56439bbf..bfd85d032 100644
void clear_major_progress() { _major_progress = 0; }
int num_loop_opts() const { return _num_loop_opts; }
void set_num_loop_opts(int n) { _num_loop_opts = n; }
@@ -744,7 +746,15 @@ class Compile : public Phase {
@@ -748,7 +750,15 @@ class Compile : public Phase {
C->_latest_stage_start_counter.stamp();
}
@ -2714,7 +2674,7 @@ index a56439bbf..bfd85d032 100644
EventCompilerPhase event;
if (event.should_commit()) {
event.set_starttime(C->_latest_stage_start_counter);
@@ -754,10 +764,15 @@ class Compile : public Phase {
@@ -758,10 +768,15 @@ class Compile : public Phase {
event.commit();
}
@ -2734,10 +2694,10 @@ index a56439bbf..bfd85d032 100644
#endif
C->_latest_stage_start_counter.stamp();
diff --git a/src/hotspot/share/opto/escape.cpp b/src/hotspot/share/opto/escape.cpp
index e0637ee47..235b31c4c 100644
index b709058..cd0ef26 100644
--- a/src/hotspot/share/opto/escape.cpp
+++ b/src/hotspot/share/opto/escape.cpp
@@ -453,10 +453,6 @@ void ConnectionGraph::add_node_to_connection_graph(Node *n, Unique_Node_List *de
@@ -456,10 +456,6 @@ void ConnectionGraph::add_node_to_connection_graph(Node *n, Unique_Node_List *de
break;
}
case Op_LoadP:
@ -2748,7 +2708,7 @@ index e0637ee47..235b31c4c 100644
case Op_LoadN:
case Op_LoadPLocked: {
add_objload_to_connection_graph(n, delayed_worklist);
@@ -666,10 +662,6 @@ void ConnectionGraph::add_final_edges(Node *n) {
@@ -696,10 +692,6 @@ void ConnectionGraph::add_final_edges(Node *n) {
break;
}
case Op_LoadP:
@ -2760,7 +2720,7 @@ index e0637ee47..235b31c4c 100644
case Op_LoadPLocked: {
// Using isa_ptr() instead of isa_oopptr() for LoadP and Phi because
diff --git a/src/hotspot/share/opto/idealGraphPrinter.cpp b/src/hotspot/share/opto/idealGraphPrinter.cpp
index d90f1d691..a07a51f3e 100644
index d90f1d6..a07a51f 100644
--- a/src/hotspot/share/opto/idealGraphPrinter.cpp
+++ b/src/hotspot/share/opto/idealGraphPrinter.cpp
@@ -350,14 +350,6 @@ void IdealGraphPrinter::end_method() {
@ -2800,7 +2760,7 @@ index d90f1d691..a07a51f3e 100644
// Warning, unsafe cast?
_chaitin = (PhaseChaitin *)C->regalloc();
diff --git a/src/hotspot/share/opto/idealGraphPrinter.hpp b/src/hotspot/share/opto/idealGraphPrinter.hpp
index 2f4b9faf0..10dd02f9f 100644
index 2f4b9fa..10dd02f 100644
--- a/src/hotspot/share/opto/idealGraphPrinter.hpp
+++ b/src/hotspot/share/opto/idealGraphPrinter.hpp
@@ -81,10 +81,6 @@ class IdealGraphPrinter : public CHeapObj<mtCompiler> {
@ -2846,7 +2806,7 @@ index 2f4b9faf0..10dd02f9f 100644
void set_compile(Compile* compile) {C = compile; }
};
diff --git a/src/hotspot/share/opto/lcm.cpp b/src/hotspot/share/opto/lcm.cpp
index 50c0c2dd3..05ec9fa9f 100644
index 50c0c2d..05ec9fa 100644
--- a/src/hotspot/share/opto/lcm.cpp
+++ b/src/hotspot/share/opto/lcm.cpp
@@ -170,7 +170,6 @@ void PhaseCFG::implicit_null_check(Block* block, Node *proj, Node *val, int allo
@ -2858,10 +2818,10 @@ index 50c0c2dd3..05ec9fa9f 100644
case Op_LoadS:
case Op_LoadKlass:
diff --git a/src/hotspot/share/opto/loopnode.cpp b/src/hotspot/share/opto/loopnode.cpp
index 4103fa4bd..b0b7fe185 100644
index 641c829..6aff3d5 100644
--- a/src/hotspot/share/opto/loopnode.cpp
+++ b/src/hotspot/share/opto/loopnode.cpp
@@ -986,7 +986,7 @@ void LoopNode::verify_strip_mined(int expect_skeleton) const {
@@ -990,7 +990,7 @@ void LoopNode::verify_strip_mined(int expect_skeleton) const {
wq.push(u);
bool found_sfpt = false;
for (uint next = 0; next < wq.size() && !found_sfpt; next++) {
@ -2870,7 +2830,7 @@ index 4103fa4bd..b0b7fe185 100644
for (DUIterator_Fast imax, i = n->fast_outs(imax); i < imax && !found_sfpt; i++) {
Node* u = n->fast_out(i);
if (u == sfpt) {
@@ -1000,6 +1000,19 @@ void LoopNode::verify_strip_mined(int expect_skeleton) const {
@@ -1004,6 +1004,19 @@ void LoopNode::verify_strip_mined(int expect_skeleton) const {
assert(found_sfpt, "no node in loop that's not input to safepoint");
}
}
@ -2890,7 +2850,7 @@ index 4103fa4bd..b0b7fe185 100644
CountedLoopEndNode* cle = inner_out->in(0)->as_CountedLoopEnd();
assert(cle == inner->loopexit_or_null(), "mismatch");
bool has_skeleton = outer_le->in(1)->bottom_type()->singleton() && outer_le->in(1)->bottom_type()->is_int()->get_con() == 0;
@@ -2717,7 +2730,7 @@ bool PhaseIdealLoop::process_expensive_nodes() {
@@ -2729,7 +2742,7 @@ bool PhaseIdealLoop::process_expensive_nodes() {
//----------------------------build_and_optimize-------------------------------
// Create a PhaseLoop. Build the ideal Loop tree. Map each Ideal Node to
// its corresponding LoopNode. If 'optimize' is true, do some loop cleanups.
@ -2898,18 +2858,18 @@ index 4103fa4bd..b0b7fe185 100644
+void PhaseIdealLoop::build_and_optimize(LoopOptsMode mode, bool z_barrier_insertion) {
bool do_split_ifs = (mode == LoopOptsDefault || mode == LoopOptsLastRound);
bool skip_loop_opts = (mode == LoopOptsNone);
@@ -2784,7 +2797,8 @@ void PhaseIdealLoop::build_and_optimize(LoopOptsMode mode) {
#if INCLUDE_SHENANDOAHGC
@@ -2800,7 +2813,8 @@ void PhaseIdealLoop::build_and_optimize(LoopOptsMode mode) {
}
// Nothing to do, so get out
- bool stop_early = !C->has_loops() && !skip_loop_opts && !do_split_ifs && !_verify_me && !_verify_only;
+ bool stop_early = !C->has_loops() && !skip_loop_opts && !do_split_ifs && !_verify_me && !_verify_only &&
- bool stop_early = !C->has_loops() && !skip_loop_opts && !do_split_ifs && !_verify_me && !_verify_only SHENANDOAHGC_ONLY(&& !shenandoah_opts);
+ bool stop_early = !C->has_loops() && !skip_loop_opts && !do_split_ifs && !_verify_me && !_verify_only SHENANDOAHGC_ONLY(&& !shenandoah_opts) &&
+ !z_barrier_insertion;
bool do_expensive_nodes = C->should_optimize_expensive_nodes(_igvn);
if (stop_early && !do_expensive_nodes) {
_igvn.optimize(); // Cleanup NeverBranches
@@ -2876,9 +2890,7 @@ void PhaseIdealLoop::build_and_optimize(LoopOptsMode mode) {
@@ -2892,9 +2906,7 @@ void PhaseIdealLoop::build_and_optimize(LoopOptsMode mode) {
build_loop_late( visited, worklist, nstack );
if (_verify_only) {
@ -2920,7 +2880,7 @@ index 4103fa4bd..b0b7fe185 100644
assert(C->unique() == unique, "verification mode made Nodes? ? ?");
assert(_igvn._worklist.size() == orig_worklist_size, "shouldn't push anything");
return;
@@ -2922,10 +2934,7 @@ void PhaseIdealLoop::build_and_optimize(LoopOptsMode mode) {
@@ -2938,10 +2950,7 @@ void PhaseIdealLoop::build_and_optimize(LoopOptsMode mode) {
if (skip_loop_opts) {
// restore major progress flag
@ -2932,9 +2892,9 @@ index 4103fa4bd..b0b7fe185 100644
// Cleanup any modified bits
_igvn.optimize();
@@ -2935,6 +2944,16 @@ void PhaseIdealLoop::build_and_optimize(LoopOptsMode mode) {
return;
@@ -2961,6 +2970,16 @@ void PhaseIdealLoop::build_and_optimize(LoopOptsMode mode) {
}
#endif
+ if(z_barrier_insertion) {
+ BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
@ -2949,7 +2909,7 @@ index 4103fa4bd..b0b7fe185 100644
if (ReassociateInvariants) {
// Reassociate invariants and prep for split_thru_phi
for (LoopTreeIterator iter(_ltree_root); !iter.done(); iter.next()) {
@@ -3101,8 +3120,7 @@ void PhaseIdealLoop::verify() const {
@@ -3127,8 +3146,7 @@ void PhaseIdealLoop::verify() const {
_ltree_root->verify_tree(loop_verify._ltree_root, NULL);
// Reset major-progress. It was cleared by creating a verify version of
// PhaseIdealLoop.
@ -2959,7 +2919,7 @@ index 4103fa4bd..b0b7fe185 100644
}
//------------------------------verify_compare---------------------------------
@@ -4225,7 +4243,6 @@ void PhaseIdealLoop::build_loop_late_post( Node *n ) {
@@ -4256,7 +4274,6 @@ void PhaseIdealLoop::build_loop_late_post( Node *n ) {
case Op_LoadS:
case Op_LoadP:
case Op_LoadBarrierSlowReg:
@ -2968,10 +2928,10 @@ index 4103fa4bd..b0b7fe185 100644
case Op_LoadRange:
case Op_LoadD_unaligned:
diff --git a/src/hotspot/share/opto/loopnode.hpp b/src/hotspot/share/opto/loopnode.hpp
index 5efff246d..d2c50df70 100644
index 7765ed9..53b9692 100644
--- a/src/hotspot/share/opto/loopnode.hpp
+++ b/src/hotspot/share/opto/loopnode.hpp
@@ -929,7 +929,7 @@ public:
@@ -936,7 +936,7 @@ public:
}
// build the loop tree and perform any requested optimizations
@ -2980,7 +2940,7 @@ index 5efff246d..d2c50df70 100644
// Dominators for the sea of nodes
void Dominators();
@@ -939,13 +939,13 @@ public:
@@ -946,13 +946,13 @@ public:
Node *dom_lca_internal( Node *n1, Node *n2 ) const;
// Compute the Ideal Node to Loop mapping
@ -2997,7 +2957,7 @@ index 5efff246d..d2c50df70 100644
// Verify that verify_me made the same decisions as a fresh run.
diff --git a/src/hotspot/share/opto/loopopts.cpp b/src/hotspot/share/opto/loopopts.cpp
index 567069193..5793f51f2 100644
index 5670691..5793f51 100644
--- a/src/hotspot/share/opto/loopopts.cpp
+++ b/src/hotspot/share/opto/loopopts.cpp
@@ -1420,12 +1420,6 @@ void PhaseIdealLoop::split_if_with_blocks_post(Node *n, bool last_round) {
@ -3014,10 +2974,10 @@ index 567069193..5793f51f2 100644
//------------------------------split_if_with_blocks---------------------------
diff --git a/src/hotspot/share/opto/matcher.cpp b/src/hotspot/share/opto/matcher.cpp
index 1824c89cd..bdcf9c424 100644
index 9437d37..45d2627 100644
--- a/src/hotspot/share/opto/matcher.cpp
+++ b/src/hotspot/share/opto/matcher.cpp
@@ -2279,6 +2279,33 @@ void Matcher::find_shared( Node *n ) {
@@ -2294,6 +2294,33 @@ void Matcher::find_shared( Node *n ) {
n->del_req(LoadStoreConditionalNode::ExpectedIn);
break;
}
@ -3052,10 +3012,10 @@ index 1824c89cd..bdcf9c424 100644
case Op_CMoveF:
case Op_CMoveI:
diff --git a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp
index ea33eef95..cdaf7669c 100644
index 6f88074..76e950c 100644
--- a/src/hotspot/share/opto/memnode.cpp
+++ b/src/hotspot/share/opto/memnode.cpp
@@ -927,14 +927,6 @@ static bool skip_through_membars(Compile::AliasType* atp, const TypeInstPtr* tp,
@@ -930,14 +930,6 @@ static bool skip_through_membars(Compile::AliasType* atp, const TypeInstPtr* tp,
// a load node that reads from the source array so we may be able to
// optimize out the ArrayCopy node later.
Node* LoadNode::can_see_arraycopy_value(Node* st, PhaseGVN* phase) const {
@ -3070,7 +3030,7 @@ index ea33eef95..cdaf7669c 100644
Node* ld_adr = in(MemNode::Address);
intptr_t ld_off = 0;
AllocateNode* ld_alloc = AllocateNode::Ideal_allocation(ld_adr, phase, ld_off);
@@ -2825,7 +2817,8 @@ const Type* SCMemProjNode::Value(PhaseGVN* phase) const
@@ -2833,7 +2825,8 @@ const Type* SCMemProjNode::Value(PhaseGVN* phase) const
LoadStoreNode::LoadStoreNode( Node *c, Node *mem, Node *adr, Node *val, const TypePtr* at, const Type* rt, uint required )
: Node(required),
_type(rt),
@ -3080,7 +3040,7 @@ index ea33eef95..cdaf7669c 100644
{
init_req(MemNode::Control, c );
init_req(MemNode::Memory , mem);
@@ -3119,16 +3112,6 @@ Node *MemBarNode::Ideal(PhaseGVN *phase, bool can_reshape) {
@@ -3127,16 +3120,6 @@ Node *MemBarNode::Ideal(PhaseGVN *phase, bool can_reshape) {
return NULL;
}
@ -3098,7 +3058,7 @@ index ea33eef95..cdaf7669c 100644
// Eliminate volatile MemBars for scalar replaced objects.
if (can_reshape && req() == (Precedent+1)) {
diff --git a/src/hotspot/share/opto/memnode.hpp b/src/hotspot/share/opto/memnode.hpp
index 529075761..e2bd6a6d8 100644
index 5290757..e2bd6a6 100644
--- a/src/hotspot/share/opto/memnode.hpp
+++ b/src/hotspot/share/opto/memnode.hpp
@@ -182,6 +182,8 @@ private:
@ -3148,7 +3108,7 @@ index 529075761..e2bd6a6d8 100644
class LoadStoreConditionalNode : public LoadStoreNode {
diff --git a/src/hotspot/share/opto/node.cpp b/src/hotspot/share/opto/node.cpp
index a7d26152e..9bfc3a3b9 100644
index 7d12e97..bb020c4 100644
--- a/src/hotspot/share/opto/node.cpp
+++ b/src/hotspot/share/opto/node.cpp
@@ -546,6 +546,9 @@ Node *Node::clone() const {
@ -3180,7 +3140,7 @@ index a7d26152e..9bfc3a3b9 100644
diff --git a/src/hotspot/share/opto/node.hpp b/src/hotspot/share/opto/node.hpp
index 608aa0c8f..49f415a31 100644
index b5c6168..a4c5fd8 100644
--- a/src/hotspot/share/opto/node.hpp
+++ b/src/hotspot/share/opto/node.hpp
@@ -84,8 +84,8 @@ class JumpProjNode;
@ -3193,7 +3153,7 @@ index 608aa0c8f..49f415a31 100644
class LockNode;
class LoopNode;
class MachBranchNode;
@@ -691,8 +691,7 @@ public:
@@ -696,8 +696,7 @@ public:
DEFINE_CLASS_ID(Mem, Node, 4)
DEFINE_CLASS_ID(Load, Mem, 0)
DEFINE_CLASS_ID(LoadVector, Load, 0)
@ -3203,7 +3163,7 @@ index 608aa0c8f..49f415a31 100644
DEFINE_CLASS_ID(Store, Mem, 1)
DEFINE_CLASS_ID(StoreVector, Store, 0)
DEFINE_CLASS_ID(LoadStore, Mem, 2)
@@ -834,9 +833,9 @@ public:
@@ -839,9 +838,9 @@ public:
DEFINE_CLASS_QUERY(JumpProj)
DEFINE_CLASS_QUERY(Load)
DEFINE_CLASS_QUERY(LoadStore)
@ -3215,7 +3175,7 @@ index 608aa0c8f..49f415a31 100644
DEFINE_CLASS_QUERY(Loop)
DEFINE_CLASS_QUERY(Mach)
diff --git a/src/hotspot/share/opto/phaseX.cpp b/src/hotspot/share/opto/phaseX.cpp
index 686e709c3..d1177a56e 100644
index c65121d..07b8490 100644
--- a/src/hotspot/share/opto/phaseX.cpp
+++ b/src/hotspot/share/opto/phaseX.cpp
@@ -947,9 +947,6 @@ PhaseIterGVN::PhaseIterGVN( PhaseGVN *gvn ) : PhaseGVN(gvn),
@ -3229,12 +3189,12 @@ index 686e709c3..d1177a56e 100644
/**
diff --git a/src/hotspot/share/opto/phasetype.hpp b/src/hotspot/share/opto/phasetype.hpp
index f0eac0b0b..b01b7630f 100644
index 2f0b6ae..100db17 100644
--- a/src/hotspot/share/opto/phasetype.hpp
+++ b/src/hotspot/share/opto/phasetype.hpp
@@ -53,6 +53,9 @@ enum CompilerPhaseType {
PHASE_INCREMENTAL_INLINE,
PHASE_INCREMENTAL_BOXING_INLINE,
@@ -56,6 +56,9 @@ enum CompilerPhaseType {
PHASE_BEFORE_BARRIER_EXPAND,
#endif
PHASE_BEFORE_MACRO_EXPANSION,
+ PHASE_CALL_CATCH_CLEANUP,
+ PHASE_INSERT_BARRIER,
@ -3242,9 +3202,9 @@ index f0eac0b0b..b01b7630f 100644
PHASE_END,
PHASE_FAILURE,
@@ -90,6 +93,9 @@ class CompilerPhaseTypeHelper {
case PHASE_INCREMENTAL_INLINE: return "Incremental Inline";
case PHASE_INCREMENTAL_BOXING_INLINE: return "Incremental Boxing Inline";
@@ -96,6 +99,9 @@ class CompilerPhaseTypeHelper {
case PHASE_BEFORE_BARRIER_EXPAND: return "Before Barrier Expand";
#endif
case PHASE_BEFORE_MACRO_EXPANSION: return "Before macro expansion";
+ case PHASE_CALL_CATCH_CLEANUP: return "Call catch cleanup";
+ case PHASE_INSERT_BARRIER: return "Insert barrier";
@ -3253,10 +3213,10 @@ index f0eac0b0b..b01b7630f 100644
case PHASE_FAILURE: return "Failure";
default:
diff --git a/src/hotspot/share/opto/vectornode.cpp b/src/hotspot/share/opto/vectornode.cpp
index 593baf972..b40587ba5 100644
index d85b57b..0258db3 100644
--- a/src/hotspot/share/opto/vectornode.cpp
+++ b/src/hotspot/share/opto/vectornode.cpp
@@ -253,7 +253,6 @@ void VectorNode::vector_operands(Node* n, uint* start, uint* end) {
@@ -265,7 +265,6 @@ void VectorNode::vector_operands(Node* n, uint* start, uint* end) {
case Op_LoadF: case Op_LoadD:
case Op_LoadP: case Op_LoadN:
case Op_LoadBarrierSlowReg:
@ -3265,26 +3225,24 @@ index 593baf972..b40587ba5 100644
*end = 0; // no vector operands
break;
diff --git a/src/hotspot/share/runtime/stackValue.cpp b/src/hotspot/share/runtime/stackValue.cpp
index e7a122ce1..3573555c8 100644
index acc8726..cab1de7 100644
--- a/src/hotspot/share/runtime/stackValue.cpp
+++ b/src/hotspot/share/runtime/stackValue.cpp
@@ -122,13 +122,7 @@ StackValue* StackValue::create_stack_value(const frame* fr, const RegisterMap* r
val = (oop)NULL;
@@ -139,11 +139,7 @@ StackValue* StackValue::create_stack_value(const frame* fr, const RegisterMap* r
}
#endif
-#if INCLUDE_ZGC
- // Deoptimization must make sure all oop have passed load barrier
- if (UseZGC) {
- val = ZBarrier::load_barrier_on_oop_field_preloaded((oop*)value_addr, val);
-#if INCLUDE_SHENANDOAHGC
- if (UseShenandoahGC) {
- val = ShenandoahBarrierSet::barrier_set()->load_reference_barrier(val);
- }
-#endif
-
+ assert(oopDesc::is_oop_or_null(val, false), "bad oop found");
Handle h(Thread::current(), val); // Wrap a handle around the oop
return new StackValue(h);
}
diff --git a/src/hotspot/share/utilities/growableArray.hpp b/src/hotspot/share/utilities/growableArray.hpp
index f37d94a05..6c84180a6 100644
index f37d94a..6c84180 100644
--- a/src/hotspot/share/utilities/growableArray.hpp
+++ b/src/hotspot/share/utilities/growableArray.hpp
@@ -152,6 +152,12 @@ class GenericGrowableArray : public ResourceObj {
@ -3338,6 +3296,3 @@ index f37d94a05..6c84180a6 100644
};
// Global GrowableArray methods (one instance in the library per each 'E' type).
--
2.19.1

View File

@ -1,76 +0,0 @@
From 7a656d6c14da1ec666ee5ebf55995c6b6bf4ab7f Mon Sep 17 00:00:00 2001
Date: Tue, 17 Mar 2020 11:06:41 +0800
Subject: [PATCH] 8226536: Catch OOM from deopt that fails rematerializing
objects
Summary: <test>: fix testcase, catch OOM from deopt that fails rematerializing objects
LLT: jtreg
Bug url: https://bugs.openjdk.java.net/browse/JDK-8226536
---
.../vmTestbase/nsk/share/gc/gp/GarbageUtils.java | 36 ++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java
index 333bf070b..4d18a6871 100644
--- a/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java
+++ b/test/hotspot/jtreg/vmTestbase/nsk/share/gc/gp/GarbageUtils.java
@@ -26,6 +26,7 @@ package nsk.share.gc.gp;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.lang.invoke.*;
import java.util.*;
import nsk.share.gc.gp.array.*;
import nsk.share.gc.gp.string.*;
@@ -193,6 +194,36 @@ public final class GarbageUtils {
return eatMemory(stresser, gp, initialFactor, minMemoryChunk, factor, OOM_TYPE.ANY);
}
+ static int numberOfOOMEs = 0;
+
+ /**
+ * Minimal wrapper of the main implementation. Catches any OOM
+ * that might be thrown when rematerializing Objects when deoptimizing.
+ *
+ * It is Important that the impl is not inlined.
+ */
+
+ public static int eatMemory(ExecutionController stresser, GarbageProducer gp, long initialFactor, long minMemoryChunk, long factor, OOM_TYPE type) {
+ try {
+ // Using a methodhandle invoke of eatMemoryImpl to prevent inlining of it
+ MethodHandles.Lookup lookup = MethodHandles.lookup();
+ MethodType mt = MethodType.methodType(
+ int.class,
+ ExecutionController.class,
+ GarbageProducer.class,
+ long.class,
+ long.class,
+ long.class,
+ OOM_TYPE.class);
+ MethodHandle eat = lookup.findStatic(GarbageUtils.class, "eatMemoryImpl", mt);
+ return (int) eat.invoke(stresser, gp, initialFactor, minMemoryChunk, factor, type);
+ } catch (OutOfMemoryError e) {
+ return numberOfOOMEs++;
+ } catch (Throwable t) {
+ throw new RuntimeException(t);
+ }
+ }
+
/**
* Eat memory using given garbage producer.
*
@@ -210,8 +241,9 @@ public final class GarbageUtils {
* @param type of OutOfMemory Exception: Java heap space or Metadata space
* @return number of OOME occured
*/
- public static int eatMemory(ExecutionController stresser, GarbageProducer gp, long initialFactor, long minMemoryChunk, long factor, OOM_TYPE type) {
- int numberOfOOMEs = 0;
+
+ public static int eatMemoryImpl(ExecutionController stresser, GarbageProducer gp, long initialFactor, long minMemoryChunk, long factor, OOM_TYPE type) {
+ numberOfOOMEs = 0;
try {
StringWriter sw = new StringWriter(10000);
PrintWriter pw = new PrintWriter(sw);
--
2.12.3

View File

@ -1,8 +1,8 @@
diff --git a/src/hotspot/share/opto/classes.hpp b/src/hotspot/share/opto/classes.hpp
index da01e48..6938ed2 100644
index 5ee23f7..b847caf 100644
--- a/src/hotspot/share/opto/classes.hpp
+++ b/src/hotspot/share/opto/classes.hpp
@@ -225,6 +225,8 @@ macro(NegF)
@@ -226,6 +226,8 @@ macro(NegF)
macro(NeverBranch)
macro(OnSpinWait)
macro(Opaque1)
@ -12,10 +12,10 @@ index da01e48..6938ed2 100644
macro(Opaque3)
macro(Opaque4)
diff --git a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp
index b6980c4..ac7b848 100644
index e5559a2..efe4cff 100644
--- a/src/hotspot/share/opto/compile.cpp
+++ b/src/hotspot/share/opto/compile.cpp
@@ -1981,7 +1981,17 @@ void Compile::remove_opaque4_nodes(PhaseIterGVN &igvn) {
@@ -1987,7 +1987,17 @@ void Compile::remove_opaque4_nodes(PhaseIterGVN &igvn) {
for (int i = opaque4_count(); i > 0; i--) {
Node* opaq = opaque4_node(i-1);
assert(opaq->Opcode() == Op_Opaque4, "Opaque4 only");
@ -34,10 +34,10 @@ index b6980c4..ac7b848 100644
assert(opaque4_count() == 0, "should be empty");
}
diff --git a/src/hotspot/share/opto/loopPredicate.cpp b/src/hotspot/share/opto/loopPredicate.cpp
index ee20972..e255f46 100644
index 6e85398..a6d2257 100644
--- a/src/hotspot/share/opto/loopPredicate.cpp
+++ b/src/hotspot/share/opto/loopPredicate.cpp
@@ -1244,8 +1244,9 @@ ProjNode* PhaseIdealLoop::insert_initial_skeleton_predicate(IfNode* iff, IdealLo
@@ -1243,8 +1243,9 @@ ProjNode* PhaseIdealLoop::insert_initial_skeleton_predicate(IfNode* iff, IdealLo
Node* init, Node* limit, jint stride,
Node* rng, bool &overflow,
Deoptimization::DeoptReason reason) {
@ -48,7 +48,7 @@ index ee20972..e255f46 100644
register_new_node(opaque_init, upper_bound_proj);
BoolNode* bol = rc_predicate(loop, upper_bound_proj, scale, offset, opaque_init, limit, stride, rng, (stride > 0) != (scale > 0), overflow);
Node* opaque_bol = new Opaque4Node(C, bol, _igvn.intcon(1)); // This will go away once loop opts are over
@@ -1253,6 +1254,22 @@ ProjNode* PhaseIdealLoop::insert_initial_skeleton_predicate(IfNode* iff, IdealLo
@@ -1252,6 +1253,22 @@ ProjNode* PhaseIdealLoop::insert_initial_skeleton_predicate(IfNode* iff, IdealLo
ProjNode* new_proj = create_new_if_for_predicate(predicate_proj, NULL, reason, overflow ? Op_If : iff->Opcode());
_igvn.replace_input_of(new_proj->in(0), 1, opaque_bol);
assert(opaque_init->outcnt() > 0, "should be used");
@ -72,7 +72,7 @@ index ee20972..e255f46 100644
}
diff --git a/src/hotspot/share/opto/loopTransform.cpp b/src/hotspot/share/opto/loopTransform.cpp
index 46790ef..c678544 100644
index 5e6faaa..89628bb 100644
--- a/src/hotspot/share/opto/loopTransform.cpp
+++ b/src/hotspot/share/opto/loopTransform.cpp
@@ -1080,7 +1080,7 @@ void PhaseIdealLoop::ensure_zero_trip_guard_proj(Node* node, bool is_main_loop)
@ -218,44 +218,44 @@ index 46790ef..c678544 100644
assert(!skeleton_predicate_has_opaque(prev_proj->in(0)->as_If()), "unexpected");
}
}
@@ -2594,22 +2597,22 @@ int PhaseIdealLoop::do_range_check( IdealLoopTree *loop, Node_List &old_new ) {
// (0-offset)/scale could be outside of loop iterations range.
conditional_rc = true;
@@ -2547,22 +2550,22 @@ int PhaseIdealLoop::do_range_check( IdealLoopTree *loop, Node_List &old_new ) {
// The underflow and overflow limits: 0 <= scale*I+offset < limit
add_constraint(stride_con, lscale_con, offset, zero, limit, pre_ctrl, &pre_limit, &main_limit);
Node* init = cl->init_trip();
- Node* opaque_init = new Opaque1Node(C, init);
+ Node* opaque_init = new OpaqueLoopInitNode(C, init);
register_new_node(opaque_init, predicate_proj);
+ // predicate on first value of first iteration
+ // predicate on first value of first iteration
+ predicate_proj = add_range_check_predicate(loop, cl, predicate_proj, scale_con, offset, limit, stride_con, init);
+ assert(!skeleton_predicate_has_opaque(predicate_proj->in(0)->as_If()), "unexpected");
// template predicate so it can be updated on next unrolling
predicate_proj = add_range_check_predicate(loop, cl, predicate_proj, scale_con, offset, limit, stride_con, opaque_init);
predicate_proj = add_range_check_predicate(loop, cl, predicate_proj, scale_con, int_offset, int_limit, stride_con, opaque_init);
assert(skeleton_predicate_has_opaque(predicate_proj->in(0)->as_If()), "unexpected");
- // predicate on first value of first iteration
- predicate_proj = add_range_check_predicate(loop, cl, predicate_proj, scale_con, offset, limit, stride_con, init);
- predicate_proj = add_range_check_predicate(loop, cl, predicate_proj, scale_con, int_offset, int_limit, stride_con, init);
- assert(!skeleton_predicate_has_opaque(predicate_proj->in(0)->as_If()), "unexpected");
- int init_inc = stride_con/cl->unrolled_count();
- assert(init_inc != 0, "invalid loop increment");
- Node* max_value = _igvn.intcon(stride_con - init_inc);
- max_value = new AddINode(init, max_value);
+ Node* opaque_stride = new OpaqueLoopStrideNode(C, cl->stride());
+ Node* opaque_stride = new OpaqueLoopStrideNode(C, cl->stride());
+ register_new_node(opaque_stride, predicate_proj);
+ Node* max_value = new SubINode(opaque_stride, cl->stride());
+ register_new_node(max_value, predicate_proj);
+ max_value = new AddINode(opaque_init, max_value);
+ max_value = new AddINode(opaque_init, max_value);
register_new_node(max_value, predicate_proj);
- // predicate on last value of first iteration (in case unrolling has already happened)
predicate_proj = add_range_check_predicate(loop, cl, predicate_proj, scale_con, offset, limit, stride_con, max_value);
predicate_proj = add_range_check_predicate(loop, cl, predicate_proj, scale_con, int_offset, int_limit, stride_con, max_value);
- assert(!skeleton_predicate_has_opaque(predicate_proj->in(0)->as_If()), "unexpected");
+ assert(skeleton_predicate_has_opaque(predicate_proj->in(0)->as_If()), "unexpected");
} else {
if (PrintOpto) {
tty->print_cr("missed RCE opportunity");
diff --git a/src/hotspot/share/opto/loopnode.hpp b/src/hotspot/share/opto/loopnode.hpp
index 3951259..6d68df0 100644
index 53b9692..7c54113 100644
--- a/src/hotspot/share/opto/loopnode.hpp
+++ b/src/hotspot/share/opto/loopnode.hpp
@@ -747,13 +747,13 @@ private:
@@ -748,13 +748,13 @@ private:
#ifdef ASSERT
void ensure_zero_trip_guard_proj(Node* node, bool is_main_loop);
#endif
@ -333,10 +333,10 @@ index 6b85529..adbee17 100644
if (res != NULL) {
return n;
diff --git a/src/hotspot/share/opto/macro.cpp b/src/hotspot/share/opto/macro.cpp
index 9f3cb34..5f5cc75 100644
index cf8eab1..8331d25 100644
--- a/src/hotspot/share/opto/macro.cpp
+++ b/src/hotspot/share/opto/macro.cpp
@@ -2594,9 +2594,10 @@ void PhaseMacroExpand::eliminate_macro_nodes() {
@@ -2617,9 +2617,10 @@ void PhaseMacroExpand::eliminate_macro_nodes() {
break;
case Node::Class_OuterStripMinedLoop:
break;
@ -348,7 +348,7 @@ index 9f3cb34..5f5cc75 100644
n->Opcode() == Op_Opaque2 ||
n->Opcode() == Op_Opaque3 ||
BarrierSet::barrier_set()->barrier_set_c2()->is_gc_barrier_node(n),
@@ -2638,7 +2639,7 @@ bool PhaseMacroExpand::expand_macro_nodes() {
@@ -2661,7 +2662,7 @@ bool PhaseMacroExpand::expand_macro_nodes() {
C->remove_macro_node(n);
_igvn._worklist.push(n);
success = true;
@ -358,7 +358,7 @@ index 9f3cb34..5f5cc75 100644
success = true;
#if INCLUDE_RTM_OPT
diff --git a/src/hotspot/share/opto/node.hpp b/src/hotspot/share/opto/node.hpp
index cf0975e..a36f3bb 100644
index 2a42e99..0eac634 100644
--- a/src/hotspot/share/opto/node.hpp
+++ b/src/hotspot/share/opto/node.hpp
@@ -116,6 +116,7 @@ class MulNode;
@ -369,7 +369,7 @@ index cf0975e..a36f3bb 100644
class OuterStripMinedLoopNode;
class OuterStripMinedLoopEndNode;
class Node;
@@ -608,10 +609,10 @@ public:
@@ -611,10 +612,10 @@ public:
// This enum is used only for C2 ideal and mach nodes with is_<node>() methods
// so that it's values fits into 16 bits.
enum NodeClasses {
@ -384,7 +384,7 @@ index cf0975e..a36f3bb 100644
DEFINE_CLASS_ID(Multi, Node, 0)
DEFINE_CLASS_ID(SafePoint, Multi, 0)
DEFINE_CLASS_ID(Call, SafePoint, 0)
@@ -714,6 +715,7 @@ public:
@@ -720,6 +721,7 @@ public:
DEFINE_CLASS_ID(Vector, Node, 13)
DEFINE_CLASS_ID(ClearArray, Node, 14)
DEFINE_CLASS_ID(Halt, Node, 15)
@ -392,7 +392,7 @@ index cf0975e..a36f3bb 100644
_max_classes = ClassMask_Halt
};
@@ -740,12 +742,12 @@ public:
@@ -746,12 +748,12 @@ public:
};
private:
@ -407,7 +407,7 @@ index cf0975e..a36f3bb 100644
_class_id = c; // cast out const
}
void init_flags(jushort fl) {
@@ -758,7 +760,7 @@ protected:
@@ -764,7 +766,7 @@ protected:
}
public:
@ -416,7 +416,7 @@ index cf0975e..a36f3bb 100644
const jushort flags() const { return _flags; }
@@ -859,6 +861,7 @@ public:
@@ -865,6 +867,7 @@ public:
DEFINE_CLASS_QUERY(Mul)
DEFINE_CLASS_QUERY(Multi)
DEFINE_CLASS_QUERY(MultiBranch)
@ -466,10 +466,10 @@ index f97de4a..4c00528 100644
//------------------------------Opaque2Node------------------------------------
// A node to prevent unwanted optimizations. Allows constant folding. Stops
diff --git a/src/hotspot/share/runtime/vmStructs.cpp b/src/hotspot/share/runtime/vmStructs.cpp
index 413188e..98b8ade 100644
index ad7fb42..85c4dfe 100644
--- a/src/hotspot/share/runtime/vmStructs.cpp
+++ b/src/hotspot/share/runtime/vmStructs.cpp
@@ -949,7 +949,7 @@ typedef PaddedEnd<ObjectMonitor> PaddedObjectMonitor;
@@ -951,7 +951,7 @@ typedef PaddedEnd<ObjectMonitor> PaddedObjectMonitor;
c2_nonstatic_field(Node, _outcnt, node_idx_t) \
c2_nonstatic_field(Node, _outmax, node_idx_t) \
c2_nonstatic_field(Node, _idx, const node_idx_t) \

View File

@ -1,5 +1,5 @@
diff --git a/src/hotspot/share/c1/c1_Instruction.cpp b/src/hotspot/share/c1/c1_Instruction.cpp
index ee3be899a..62d8b48bc 100644
index ee3be89..62d8b48 100644
--- a/src/hotspot/share/c1/c1_Instruction.cpp
+++ b/src/hotspot/share/c1/c1_Instruction.cpp
@@ -29,6 +29,7 @@
@ -11,7 +11,7 @@ index ee3be899a..62d8b48bc 100644
// Implementation of Instruction
diff --git a/src/hotspot/share/opto/graphKit.cpp b/src/hotspot/share/opto/graphKit.cpp
index 852b763c1..31b8ffa21 100644
index bf9179f..e0696de 100644
--- a/src/hotspot/share/opto/graphKit.cpp
+++ b/src/hotspot/share/opto/graphKit.cpp
@@ -43,6 +43,7 @@
@ -19,11 +19,11 @@ index 852b763c1..31b8ffa21 100644
#include "runtime/deoptimization.hpp"
#include "runtime/sharedRuntime.hpp"
+#include "utilities/bitMap.inline.hpp"
//----------------------------GraphKit-----------------------------------------
// Main utility constructor.
#include "utilities/macros.hpp"
#if INCLUDE_SHENANDOAHGC
#include "gc/shenandoah/c2/shenandoahBarrierSetC2.hpp"
diff --git a/src/hotspot/share/opto/parse1.cpp b/src/hotspot/share/opto/parse1.cpp
index 177663653..eae7673f9 100644
index 99b1a67..f94f028 100644
--- a/src/hotspot/share/opto/parse1.cpp
+++ b/src/hotspot/share/opto/parse1.cpp
@@ -41,6 +41,7 @@
@ -35,7 +35,7 @@ index 177663653..eae7673f9 100644
// Static array so we can figure out which bytecodes stop us from compiling
diff --git a/src/hotspot/share/utilities/bitMap.hpp b/src/hotspot/share/utilities/bitMap.hpp
index c671535c9..e26f34687 100644
index c671535..e26f346 100644
--- a/src/hotspot/share/utilities/bitMap.hpp
+++ b/src/hotspot/share/utilities/bitMap.hpp
@@ -26,6 +26,7 @@
@ -84,7 +84,7 @@ index c671535c9..e26f34687 100644
// Put the given value at the given offset. The parallel version
// will CAS the value into the bitmap and is quite a bit slower.
diff --git a/src/hotspot/share/utilities/bitMap.inline.hpp b/src/hotspot/share/utilities/bitMap.inline.hpp
index b10726d18..7a7e2ad43 100644
index b10726d..7a7e2ad 100644
--- a/src/hotspot/share/utilities/bitMap.inline.hpp
+++ b/src/hotspot/share/utilities/bitMap.inline.hpp
@@ -26,6 +26,7 @@

View File

@ -1,49 +0,0 @@
From 06fb55216b96c8c9341265dbc4d441cbabd0a66d Mon Sep 17 00:00:00 2001
Date: Fri, 31 Jul 2020 15:50:08 +0800
Subject: [PATCH] 8240360:NativeLibraryEvent has wrong library name on Linux
Summary: <jtreg>: <NativeLibraryEvent has wrong library name on Linux>
LLT: jdk11u/test/jdk/jdk/jfr/event/runtime/TestNativeLibrariesEvent.java
Bug url: https://bugs.openjdk.java.net/browse/JDK-8240360
---
src/hotspot/os/linux/os_linux.cpp | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/src/hotspot/os/linux/os_linux.cpp b/src/hotspot/os/linux/os_linux.cpp
index 6ee57c1..a101d26 100644
--- a/src/hotspot/os/linux/os_linux.cpp
+++ b/src/hotspot/os/linux/os_linux.cpp
@@ -2045,20 +2045,18 @@ int os::get_loaded_modules_info(os::LoadedModulesCallbackFunc callback, void *pa
// Read line by line from 'file'
while (fgets(line, sizeof(line), procmapsFile) != NULL) {
- u8 base, top, offset, inode;
- char permissions[5];
- char device[6];
+ u8 base, top, inode;
char name[sizeof(line)];
- // Parse fields from line
- int matches = sscanf(line, UINT64_FORMAT_X "-" UINT64_FORMAT_X " %4s " UINT64_FORMAT_X " %5s " INT64_FORMAT " %s",
- &base, &top, permissions, &offset, device, &inode, name);
- // the last entry 'name' is empty for some entries, so we might have 6 matches instead of 7 for some lines
- if (matches < 6) continue;
- if (matches == 6) name[0] = '\0';
+ // Parse fields from line, discard perms, offset and device
+ int matches = sscanf(line, UINT64_FORMAT_X "-" UINT64_FORMAT_X " %*s %*s %*s " INT64_FORMAT " %s",
+ &base, &top, &inode, name);
+ // the last entry 'name' is empty for some entries, so we might have 3 matches instead of 4 for some lines
+ if (matches < 3) continue;
+ if (matches == 3) name[0] = '\0';
- // Filter by device id '00:00' so that we only get file system mapped files.
- if (strcmp(device, "00:00") != 0) {
+ // Filter by inode 0 so that we only get file system mapped files.
+ if (inode != 0) {
// Call callback with the fields of interest
if(callback(name, (address)base, (address)top, param)) {
--
1.8.3.1

View File

@ -1,37 +0,0 @@
From 954a4ad3a2a8bb54fb64a524b53f9c87c54cb7a1 Mon Sep 17 00:00:00 2001
Date: Wed, 26 Feb 2020 09:47:33 +0800
Subject: [PATCH] aarch64: add_loadload_membar_to_avoid_loading_a_incorrect_offset
Summary: <interpreter>: <add loadload membar in fast_storefield and fast_accessfield to avoid loading a incorrect offset>
LLT: jtreg
Bug url: NA
---
src/hotspot/cpu/aarch64/templateTable_aarch64.cpp | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp
index b8a9a46a8..019a4aadd 100644
--- a/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/templateTable_aarch64.cpp
@@ -2963,6 +2963,8 @@ void TemplateTable::fast_storefield(TosState state)
// access constant pool cache
__ get_cache_and_index_at_bcp(r2, r1, 1);
+ __ membar(MacroAssembler::LoadLoad);
+
// test for volatile with r3
__ ldrw(r3, Address(r2, in_bytes(base +
ConstantPoolCacheEntry::flags_offset())));
@@ -3055,6 +3057,9 @@ void TemplateTable::fast_accessfield(TosState state)
// access constant pool cache
__ get_cache_and_index_at_bcp(r2, r1, 1);
+
+ __ membar(MacroAssembler::LoadLoad);
+
__ ldr(r1, Address(r2, in_bytes(ConstantPoolCache::base_offset() +
ConstantPoolCacheEntry::f2_offset())));
__ ldrw(r3, Address(r2, in_bytes(ConstantPoolCache::base_offset() +
--
2.12.3

View File

@ -1,15 +1,5 @@
From b61b8df19a63354db26efb582e84bc276c076e3a Mon Sep 17 00:00:00 2001
Date: Wed, 5 Feb 2020 17:26:06 +0800
Subject: [PATCH] 8230565: ZGC: Redesign C2 load barrier to expand on the
MachNode level
Summary: <gc>: <expand C2 load barrier in load instruction avoid safepoint between load and load barrier>
LLT: jtreg
Bug url: https://bugs.openjdk.java.net/browse/JDK-8230565
---
diff --git a/src/hotspot/cpu/aarch64/aarch64.ad b/src/hotspot/cpu/aarch64/aarch64.ad
index d64566b81..b6e5d7267 100644
index af3e593..05b36e2 100644
--- a/src/hotspot/cpu/aarch64/aarch64.ad
+++ b/src/hotspot/cpu/aarch64/aarch64.ad
@@ -1131,6 +1131,7 @@ definitions %{
@ -20,7 +10,7 @@ index d64566b81..b6e5d7267 100644
%}
@@ -2497,17 +2498,7 @@ void Compile::reshape_address(AddPNode* addp) {
@@ -2501,17 +2502,7 @@ void Compile::reshape_address(AddPNode* addp) {
__ INSN(REG, as_Register(BASE)); \
}
@ -39,7 +29,7 @@ index d64566b81..b6e5d7267 100644
{
Address::extend scale;
@@ -2526,16 +2517,33 @@ typedef void (MacroAssembler::* mem_vector_insn)(FloatRegister Rt,
@@ -2530,16 +2521,33 @@ typedef void (MacroAssembler::* mem_vector_insn)(FloatRegister Rt,
}
if (index == -1) {
@ -77,7 +67,7 @@ index d64566b81..b6e5d7267 100644
{
Address::extend scale;
@@ -2557,8 +2565,8 @@ typedef void (MacroAssembler::* mem_vector_insn)(FloatRegister Rt,
@@ -2561,8 +2569,8 @@ typedef void (MacroAssembler::* mem_vector_insn)(FloatRegister Rt,
}
static void loadStore(MacroAssembler masm, mem_vector_insn insn,
@ -88,7 +78,7 @@ index d64566b81..b6e5d7267 100644
{
if (index == -1) {
(masm.*insn)(reg, T, Address(base, disp));
@@ -3793,7 +3801,7 @@ frame %{
@@ -3797,7 +3805,7 @@ frame %{
static const int hi[Op_RegL + 1] = { // enum name
0, // Op_Node
0, // Op_Set
@ -97,7 +87,7 @@ index d64566b81..b6e5d7267 100644
OptoReg::Bad, // Op_RegI
R0_H_num, // Op_RegP
OptoReg::Bad, // Op_RegF
@@ -6923,7 +6931,7 @@ instruct loadRange(iRegINoSp dst, memory mem)
@@ -6929,7 +6937,7 @@ instruct loadRange(iRegINoSp dst, memory mem)
instruct loadP(iRegPNoSp dst, memory mem)
%{
match(Set dst (LoadP mem));
@ -106,7 +96,7 @@ index d64566b81..b6e5d7267 100644
ins_cost(4 * INSN_COST);
format %{ "ldr $dst, $mem\t# ptr" %}
@@ -7616,6 +7624,7 @@ instruct loadL_volatile(iRegLNoSp dst, /* sync_memory*/indirect mem)
@@ -7622,6 +7630,7 @@ instruct loadL_volatile(iRegLNoSp dst, /* sync_memory*/indirect mem)
instruct loadP_volatile(iRegPNoSp dst, /* sync_memory*/indirect mem)
%{
match(Set dst (LoadP mem));
@ -114,7 +104,7 @@ index d64566b81..b6e5d7267 100644
ins_cost(VOLATILE_REF_COST);
format %{ "ldar $dst, $mem\t# ptr" %}
@@ -8500,6 +8509,7 @@ instruct compareAndSwapL(iRegINoSp res, indirect mem, iRegLNoSp oldval, iRegLNoS
@@ -8506,6 +8515,7 @@ instruct compareAndSwapL(iRegINoSp res, indirect mem, iRegLNoSp oldval, iRegLNoS
instruct compareAndSwapP(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{
match(Set res (CompareAndSwapP mem (Binary oldval newval)));
@ -122,7 +112,7 @@ index d64566b81..b6e5d7267 100644
ins_cost(2 * VOLATILE_REF_COST);
effect(KILL cr);
@@ -8613,7 +8623,7 @@ instruct compareAndSwapLAcq(iRegINoSp res, indirect mem, iRegLNoSp oldval, iRegL
@@ -8619,7 +8629,7 @@ instruct compareAndSwapLAcq(iRegINoSp res, indirect mem, iRegLNoSp oldval, iRegL
instruct compareAndSwapPAcq(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{
@ -131,7 +121,7 @@ index d64566b81..b6e5d7267 100644
match(Set res (CompareAndSwapP mem (Binary oldval newval)));
ins_cost(VOLATILE_REF_COST);
@@ -8744,6 +8754,7 @@ instruct compareAndExchangeN(iRegNNoSp res, indirect mem, iRegN oldval, iRegN ne
@@ -8750,6 +8760,7 @@ instruct compareAndExchangeN(iRegNNoSp res, indirect mem, iRegN oldval, iRegN ne
%}
instruct compareAndExchangeP(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{
@ -139,7 +129,7 @@ index d64566b81..b6e5d7267 100644
match(Set res (CompareAndExchangeP mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
effect(TEMP_DEF res, KILL cr);
@@ -8843,7 +8854,7 @@ instruct compareAndExchangeNAcq(iRegNNoSp res, indirect mem, iRegN oldval, iRegN
@@ -8849,7 +8860,7 @@ instruct compareAndExchangeNAcq(iRegNNoSp res, indirect mem, iRegN oldval, iRegN
%}
instruct compareAndExchangePAcq(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{
@ -148,7 +138,7 @@ index d64566b81..b6e5d7267 100644
match(Set res (CompareAndExchangeP mem (Binary oldval newval)));
ins_cost(VOLATILE_REF_COST);
effect(TEMP_DEF res, KILL cr);
@@ -8944,6 +8955,7 @@ instruct weakCompareAndSwapN(iRegINoSp res, indirect mem, iRegN oldval, iRegN ne
@@ -8950,6 +8961,7 @@ instruct weakCompareAndSwapN(iRegINoSp res, indirect mem, iRegN oldval, iRegN ne
%}
instruct weakCompareAndSwapP(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{
@ -156,7 +146,7 @@ index d64566b81..b6e5d7267 100644
match(Set res (WeakCompareAndSwapP mem (Binary oldval newval)));
ins_cost(2 * VOLATILE_REF_COST);
effect(KILL cr);
@@ -9051,8 +9063,8 @@ instruct weakCompareAndSwapNAcq(iRegINoSp res, indirect mem, iRegN oldval, iRegN
@@ -9057,8 +9069,8 @@ instruct weakCompareAndSwapNAcq(iRegINoSp res, indirect mem, iRegN oldval, iRegN
%}
instruct weakCompareAndSwapPAcq(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval, rFlagsReg cr) %{
@ -166,7 +156,7 @@ index d64566b81..b6e5d7267 100644
ins_cost(VOLATILE_REF_COST);
effect(KILL cr);
format %{
@@ -9102,6 +9114,7 @@ instruct get_and_setN(indirect mem, iRegN newv, iRegINoSp prev) %{
@@ -9108,6 +9120,7 @@ instruct get_and_setN(indirect mem, iRegN newv, iRegINoSp prev) %{
%}
instruct get_and_setP(indirect mem, iRegP newv, iRegPNoSp prev) %{
@ -174,7 +164,7 @@ index d64566b81..b6e5d7267 100644
match(Set prev (GetAndSetP mem newv));
ins_cost(2 * VOLATILE_REF_COST);
format %{ "atomic_xchg $prev, $newv, [$mem]" %}
@@ -9145,7 +9158,7 @@ instruct get_and_setNAcq(indirect mem, iRegN newv, iRegINoSp prev) %{
@@ -9151,7 +9164,7 @@ instruct get_and_setNAcq(indirect mem, iRegN newv, iRegINoSp prev) %{
%}
instruct get_and_setPAcq(indirect mem, iRegP newv, iRegPNoSp prev) %{
@ -183,7 +173,7 @@ index d64566b81..b6e5d7267 100644
match(Set prev (GetAndSetP mem newv));
ins_cost(VOLATILE_REF_COST);
format %{ "atomic_xchg_acq $prev, $newv, [$mem]" %}
@@ -17465,145 +17478,238 @@ instruct vsrl2L_imm(vecX dst, vecX src, immI shift) %{
@@ -17477,145 +17490,238 @@ instruct vsrl2L_imm(vecX dst, vecX src, immI shift) %{
source %{
@ -528,7 +518,7 @@ index d64566b81..b6e5d7267 100644
ins_pipe(pipe_serial);
%}
diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp
index 8e169ace4..787c0c1af 100644
index 8e169ac..787c0c1 100644
--- a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.cpp
@@ -24,22 +24,23 @@
@ -884,7 +874,7 @@ index 8e169ace4..787c0c1af 100644
-}
+#endif // COMPILER2
diff --git a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp
index 7e8be01cc..cca873825 100644
index 7e8be01..cca8738 100644
--- a/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp
+++ b/src/hotspot/cpu/aarch64/gc/z/zBarrierSetAssembler_aarch64.hpp
@@ -24,6 +24,12 @@
@ -938,7 +928,7 @@ index 7e8be01cc..cca873825 100644
#endif // CPU_AARCH64_GC_Z_ZBARRIERSETASSEMBLER_AARCH64_HPP
diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
index c0d093191..bd6ebb28b 100644
index 279ff79..f9b2b3b 100644
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.cpp
@@ -2096,6 +2096,65 @@ int MacroAssembler::pop(unsigned int bitset, Register stack) {
@ -1008,7 +998,7 @@ index c0d093191..bd6ebb28b 100644
void MacroAssembler::verify_heapbase(const char* msg) {
#if 0
diff --git a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp
index af8056be0..44497ea7c 100644
index af8056b..44497ea 100644
--- a/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp
+++ b/src/hotspot/cpu/aarch64/macroAssembler_aarch64.hpp
@@ -440,12 +440,18 @@ private:
@ -1031,7 +1021,7 @@ index af8056be0..44497ea7c 100644
// runtime call except rscratch1 and rscratch2. (They are always
// scratch, so we don't have to protect them.) Only save the lower
diff --git a/src/hotspot/cpu/aarch64/register_aarch64.hpp b/src/hotspot/cpu/aarch64/register_aarch64.hpp
index 8cda52a0a..5f7662c89 100644
index 8cda52a..5f7662c 100644
--- a/src/hotspot/cpu/aarch64/register_aarch64.hpp
+++ b/src/hotspot/cpu/aarch64/register_aarch64.hpp
@@ -230,6 +230,11 @@ public:
@ -1047,22 +1037,22 @@ index 8cda52a0a..5f7662c89 100644
return RegSet(r1);
}
diff --git a/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp b/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp
index 2144a78f3..4ba3a6326 100644
index c162024..6e4eb1a 100644
--- a/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp
+++ b/src/hotspot/cpu/aarch64/templateInterpreterGenerator_aarch64.cpp
@@ -872,8 +872,8 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) {
@@ -880,8 +880,8 @@ void TemplateInterpreterGenerator::generate_fixed_frame(bool native_call) {
} else
#endif
{
- __ load_mirror(rscratch1, rmethod);
- __ stp(rscratch1, zr, Address(sp, 4 * wordSize));
+ __ load_mirror(r10, rmethod);
+ __ stp(r10, zr, Address(sp, 4 * wordSize));
}
// Get mirror and store it in the frame as GC root for this Method*
- __ load_mirror(rscratch1, rmethod);
- __ stp(rscratch1, zr, Address(sp, 4 * wordSize));
+ __ load_mirror(r10, rmethod);
+ __ stp(r10, zr, Address(sp, 4 * wordSize));
__ ldr(rcpool, Address(rmethod, Method::const_offset()));
__ ldr(rcpool, Address(rcpool, ConstMethod::constants_offset()));
diff --git a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp
index 381211ecc..d88ecf7b8 100644
index 381211e..d88ecf7 100644
--- a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp
+++ b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.cpp
@@ -27,16 +27,16 @@
@ -1520,7 +1510,7 @@ index 381211ecc..d88ecf7b8 100644
+
+#endif // COMPILER2
diff --git a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp
index 3687754e7..e433882a4 100644
index 3687754..e433882 100644
--- a/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp
+++ b/src/hotspot/cpu/x86/gc/z/zBarrierSetAssembler_x86.hpp
@@ -24,6 +24,14 @@
@ -1577,7 +1567,7 @@ index 3687754e7..e433882a4 100644
#endif // CPU_X86_GC_Z_ZBARRIERSETASSEMBLER_X86_HPP
diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad
index 1052ea6e3..e21074b4a 100644
index 6eefe33..8fb9a3e 100644
--- a/src/hotspot/cpu/x86/x86.ad
+++ b/src/hotspot/cpu/x86/x86.ad
@@ -1097,138 +1097,6 @@ reg_class vectorz_reg_legacy(XMM0, XMM0b, XMM0c, XMM0d, XMM0e, XMM0f, XMM0
@ -1719,7 +1709,7 @@ index 1052ea6e3..e21074b4a 100644
%}
@@ -1735,8 +1603,8 @@ static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo
@@ -1775,8 +1643,8 @@ static int vec_mov_helper(CodeBuffer *cbuf, bool do_size, int src_lo, int dst_lo
return (UseAVX > 2) ? 6 : 4;
}
@ -1731,7 +1721,7 @@ index 1052ea6e3..e21074b4a 100644
// into scratch buffer is used to get size in 64-bit VM.
LP64_ONLY( assert(!do_size, "this method calculates size only for 32-bit VM"); )
diff --git a/src/hotspot/cpu/x86/x86_64.ad b/src/hotspot/cpu/x86/x86_64.ad
index 84bed19aa..8b975311e 100644
index e256e22..d127732 100644
--- a/src/hotspot/cpu/x86/x86_64.ad
+++ b/src/hotspot/cpu/x86/x86_64.ad
@@ -541,6 +541,7 @@ reg_class int_rdi_reg(RDI);
@ -1952,7 +1942,7 @@ index 84bed19aa..8b975311e 100644
format %{ "XCHGQ $newval,[$mem]" %}
ins_encode %{
__ xchgq($newval$$Register, $mem$$Address);
@@ -11603,6 +11490,7 @@ instruct compP_rReg(rFlagsRegU cr, rRegP op1, rRegP op2)
@@ -11649,6 +11536,7 @@ instruct compP_rReg(rFlagsRegU cr, rRegP op1, rRegP op2)
instruct compP_rReg_mem(rFlagsRegU cr, rRegP op1, memory op2)
%{
match(Set cr (CmpP op1 (LoadP op2)));
@ -1960,7 +1950,7 @@ index 84bed19aa..8b975311e 100644
ins_cost(500); // XXX
format %{ "cmpq $op1, $op2\t# ptr" %}
@@ -11628,7 +11516,8 @@ instruct compP_rReg_mem(rFlagsRegU cr, rRegP op1, memory op2)
@@ -11674,7 +11562,8 @@ instruct compP_rReg_mem(rFlagsRegU cr, rRegP op1, memory op2)
// and raw pointers have no anti-dependencies.
instruct compP_mem_rReg(rFlagsRegU cr, rRegP op1, memory op2)
%{
@ -1970,7 +1960,7 @@ index 84bed19aa..8b975311e 100644
match(Set cr (CmpP op1 (LoadP op2)));
format %{ "cmpq $op1, $op2\t# raw ptr" %}
@@ -11653,7 +11542,8 @@ instruct testP_reg(rFlagsReg cr, rRegP src, immP0 zero)
@@ -11699,7 +11588,8 @@ instruct testP_reg(rFlagsReg cr, rRegP src, immP0 zero)
// any compare to a zero should be eq/neq.
instruct testP_mem(rFlagsReg cr, memory op, immP0 zero)
%{
@ -1980,7 +1970,7 @@ index 84bed19aa..8b975311e 100644
match(Set cr (CmpP (LoadP op) zero));
ins_cost(500); // XXX
@@ -11666,7 +11556,9 @@ instruct testP_mem(rFlagsReg cr, memory op, immP0 zero)
@@ -11712,7 +11602,9 @@ instruct testP_mem(rFlagsReg cr, memory op, immP0 zero)
instruct testP_mem_reg0(rFlagsReg cr, memory mem, immP0 zero)
%{
@ -1991,7 +1981,7 @@ index 84bed19aa..8b975311e 100644
match(Set cr (CmpP (LoadP mem) zero));
format %{ "cmpq R12, $mem\t# ptr (R12_heapbase==0)" %}
@@ -12621,274 +12513,126 @@ instruct RethrowException()
@@ -12667,274 +12559,126 @@ instruct RethrowException()
// Execute ZGC load barrier (strong) slow path
//
@ -2356,7 +2346,7 @@ index 84bed19aa..8b975311e 100644
// ============================================================================
// This name is KNOWN by the ADLC and cannot be changed.
diff --git a/src/hotspot/share/adlc/formssel.cpp b/src/hotspot/share/adlc/formssel.cpp
index 2845cf6d8..c41ac52c7 100644
index ef704f4..5ba1fdc 100644
--- a/src/hotspot/share/adlc/formssel.cpp
+++ b/src/hotspot/share/adlc/formssel.cpp
@@ -774,11 +774,6 @@ bool InstructForm::captures_bottom_type(FormDict &globals) const {
@ -2368,10 +2358,10 @@ index 2845cf6d8..c41ac52c7 100644
- !strcmp(_matrule->_rChild->_opType,"ZCompareAndExchangeP") ||
- !strcmp(_matrule->_rChild->_opType,"LoadBarrierSlowReg") ||
-#endif
!strcmp(_matrule->_rChild->_opType,"CompareAndExchangeP") ||
!strcmp(_matrule->_rChild->_opType,"CompareAndExchangeN"))) return true;
else if ( is_ideal_load() == Form::idealP ) return true;
@@ -3506,9 +3501,6 @@ int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
#if INCLUDE_SHENANDOAHGC
!strcmp(_matrule->_rChild->_opType,"ShenandoahCompareAndExchangeP") ||
!strcmp(_matrule->_rChild->_opType,"ShenandoahCompareAndExchangeN") ||
@@ -3513,9 +3508,6 @@ int MatchNode::needs_ideal_memory_edge(FormDict &globals) const {
"StoreCM",
"GetAndSetB", "GetAndSetS", "GetAndAddI", "GetAndSetI", "GetAndSetP",
"GetAndAddB", "GetAndAddS", "GetAndAddL", "GetAndSetL", "GetAndSetN",
@ -2382,7 +2372,7 @@ index 2845cf6d8..c41ac52c7 100644
};
int cnt = sizeof(needs_ideal_memory_list)/sizeof(char*);
diff --git a/src/hotspot/share/compiler/compilerDirectives.hpp b/src/hotspot/share/compiler/compilerDirectives.hpp
index 8eba28f94..b20cd73d9 100644
index 8eba28f..b20cd73 100644
--- a/src/hotspot/share/compiler/compilerDirectives.hpp
+++ b/src/hotspot/share/compiler/compilerDirectives.hpp
@@ -66,8 +66,7 @@ NOT_PRODUCT(cflags(TraceOptoOutput, bool, TraceOptoOutput, TraceOptoOutput))
@ -2396,7 +2386,7 @@ index 8eba28f94..b20cd73d9 100644
#define compilerdirectives_c2_flags(cflags)
#endif
diff --git a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
index eea74674f..487988bd8 100644
index eea7467..487988b 100644
--- a/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
+++ b/src/hotspot/share/gc/shared/c2/barrierSetC2.hpp
@@ -198,7 +198,7 @@ public:
@ -2426,7 +2416,7 @@ index eea74674f..487988bd8 100644
#endif // SHARE_GC_SHARED_C2_BARRIERSETC2_HPP
diff --git a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp
index bf0bd43af..a12973464 100644
index bf0bd43..a129734 100644
--- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp
+++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.cpp
@@ -22,443 +22,156 @@
@ -4216,7 +4206,7 @@ index bf0bd43af..a12973464 100644
- return true;
}
diff --git a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp
index bef6a7048..accae1f72 100644
index bef6a70..accae1f 100644
--- a/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp
+++ b/src/hotspot/share/gc/z/c2/zBarrierSetC2.hpp
@@ -29,134 +29,38 @@
@ -4423,7 +4413,7 @@ index bef6a7048..accae1f72 100644
#endif // SHARE_GC_Z_C2_ZBARRIERSETC2_HPP
diff --git a/src/hotspot/share/gc/z/zBarrierSetAssembler.hpp b/src/hotspot/share/gc/z/zBarrierSetAssembler.hpp
index 52133c073..9d07f9e8c 100644
index 52133c0..9d07f9e 100644
--- a/src/hotspot/share/gc/z/zBarrierSetAssembler.hpp
+++ b/src/hotspot/share/gc/z/zBarrierSetAssembler.hpp
@@ -1,5 +1,5 @@
@ -4445,7 +4435,7 @@ index 52133c073..9d07f9e8c 100644
class ZBarrierSetAssemblerBase : public BarrierSetAssembler {
diff --git a/src/hotspot/share/opto/classes.cpp b/src/hotspot/share/opto/classes.cpp
index e8ac3a61d..eec705013 100644
index 75f070f..d1282ac 100644
--- a/src/hotspot/share/opto/classes.cpp
+++ b/src/hotspot/share/opto/classes.cpp
@@ -48,9 +48,6 @@
@ -4455,14 +4445,14 @@ index e8ac3a61d..eec705013 100644
-#if INCLUDE_ZGC
-#include "gc/z/c2/zBarrierSetC2.hpp"
-#endif
// ----------------------------------------------------------------------------
// Build a table of virtual functions to map from Nodes to dense integer
#if INCLUDE_SHENANDOAHGC
#include "gc/shenandoah/c2/shenandoahBarrierSetC2.hpp"
#endif
diff --git a/src/hotspot/share/opto/classes.hpp b/src/hotspot/share/opto/classes.hpp
index cdca7e7c0..da01e4811 100644
index 69f8a3c..5ee23f7 100644
--- a/src/hotspot/share/opto/classes.hpp
+++ b/src/hotspot/share/opto/classes.hpp
@@ -188,17 +188,6 @@ macro(LoadP)
@@ -189,17 +189,6 @@ macro(LoadP)
macro(LoadN)
macro(LoadRange)
macro(LoadS)
@ -4481,7 +4471,7 @@ index cdca7e7c0..da01e4811 100644
macro(Loop)
macro(LoopLimit)
diff --git a/src/hotspot/share/opto/compile.cpp b/src/hotspot/share/opto/compile.cpp
index ef4a6ab13..b6980c4e7 100644
index 45e2d11..e5559a2 100644
--- a/src/hotspot/share/opto/compile.cpp
+++ b/src/hotspot/share/opto/compile.cpp
@@ -79,9 +79,6 @@
@ -4491,10 +4481,10 @@ index ef4a6ab13..b6980c4e7 100644
-#if INCLUDE_ZGC
-#include "gc/z/c2/zBarrierSetC2.hpp"
-#endif
// -------------------- Compile::mach_constant_base_node -----------------------
@@ -636,16 +633,12 @@ debug_only( int Compile::_debug_idx = 100000; )
#if INCLUDE_SHENANDOAHGC
#include "gc/shenandoah/c2/shenandoahBarrierSetC2.hpp"
#endif
@@ -639,16 +636,12 @@ debug_only( int Compile::_debug_idx = 100000; )
Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr_bci,
bool subsume_loads, bool do_escape_analysis, bool eliminate_boxing, DirectiveSet* directive)
: Phase(Compiler),
@ -4511,7 +4501,7 @@ index ef4a6ab13..b6980c4e7 100644
_entry_bci(osr_bci),
_initial_gvn(NULL),
_for_igvn(NULL),
@@ -665,8 +658,6 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr
@@ -668,8 +661,6 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr
_inner_loops(0),
_scratch_const_size(-1),
_in_scratch_emit_size(false),
@ -4520,7 +4510,7 @@ index ef4a6ab13..b6980c4e7 100644
#ifndef PRODUCT
_trace_opto_output(directive->TraceOptoOutputOption),
_in_dump_cnt(0),
@@ -674,9 +665,15 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr
@@ -677,9 +668,15 @@ Compile::Compile( ciEnv* ci_env, C2Compiler* compiler, ciMethod* target, int osr
#endif
_congraph(NULL),
_comp_arena(mtCompiler),
@ -4536,7 +4526,7 @@ index ef4a6ab13..b6980c4e7 100644
_replay_inline_data(NULL),
_late_inlines(comp_arena(), 2, 0, NULL),
_string_late_inlines(comp_arena(), 2, 0, NULL),
@@ -959,9 +956,6 @@ Compile::Compile( ciEnv* ci_env,
@@ -962,9 +959,6 @@ Compile::Compile( ciEnv* ci_env,
bool return_pc,
DirectiveSet* directive)
: Phase(Compiler),
@ -4546,7 +4536,7 @@ index ef4a6ab13..b6980c4e7 100644
_compile_id(0),
_save_argument_registers(save_arg_registers),
_method(NULL),
@@ -991,6 +985,10 @@ Compile::Compile( ciEnv* ci_env,
@@ -994,6 +988,10 @@ Compile::Compile( ciEnv* ci_env,
_printer(NULL),
#endif
_comp_arena(mtCompiler),
@ -4557,21 +4547,21 @@ index ef4a6ab13..b6980c4e7 100644
_node_arena(mtCompiler),
_old_arena(mtCompiler),
_Compile_types(mtCompiler),
@@ -2398,13 +2396,6 @@ void Compile::Optimize() {
igvn.optimize();
}
@@ -2408,13 +2406,6 @@ void Compile::Optimize() {
bs->verify_gc_barriers(false);
#endif
- bs->barrier_insertion_phase(C, igvn);
- if (failing()) return;
-
-#ifdef ASSERT
- bs->verify_gc_barriers(false);
-#endif
-
- bs->barrier_insertion_phase(C, igvn);
- if (failing()) return;
-
#ifdef ASSERT
bs->verify_gc_barriers(false);
#endif
@@ -2969,29 +2960,6 @@ void Compile::final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc) {
{
TracePhase tp("macroExpand", &timers[_t_macroExpand]);
PhaseMacroExpand mex(igvn);
@@ -2996,29 +2987,6 @@ void Compile::final_graph_reshaping_impl( Node *n, Final_Reshape_Counts &frc) {
break;
}
@ -4602,7 +4592,7 @@ index ef4a6ab13..b6980c4e7 100644
Node *addp = n->in(AddPNode::Address);
assert( !addp->is_AddP() ||
diff --git a/src/hotspot/share/opto/compile.hpp b/src/hotspot/share/opto/compile.hpp
index bfd85d032..a885d9f8d 100644
index 320030e..1246b1b 100644
--- a/src/hotspot/share/opto/compile.hpp
+++ b/src/hotspot/share/opto/compile.hpp
@@ -55,7 +55,6 @@ class ConnectionGraph;
@ -4613,7 +4603,7 @@ index bfd85d032..a885d9f8d 100644
class Matcher;
class MachConstantNode;
class MachConstantBaseNode;
@@ -1181,11 +1180,7 @@ class Compile : public Phase {
@@ -1185,11 +1184,7 @@ class Compile : public Phase {
bool in_scratch_emit_size() const { return _in_scratch_emit_size; }
enum ScratchBufferBlob {
@ -4625,7 +4615,7 @@ index bfd85d032..a885d9f8d 100644
MAX_locs_size = 128, // number of relocInfo elements
MAX_const_size = 128,
MAX_stubs_size = 128
@@ -1260,14 +1255,30 @@ class Compile : public Phase {
@@ -1264,14 +1259,30 @@ class Compile : public Phase {
// Process an OopMap Element while emitting nodes
void Process_OopMap_Node(MachNode *mach, int code_offset);
@ -4659,10 +4649,10 @@ index bfd85d032..a885d9f8d 100644
// Compute the size of first NumberOfLoopInstrToAlign instructions
// at the head of a loop.
diff --git a/src/hotspot/share/opto/escape.cpp b/src/hotspot/share/opto/escape.cpp
index 235b31c4c..15d483f33 100644
index cd0ef26..0a22c89 100644
--- a/src/hotspot/share/opto/escape.cpp
+++ b/src/hotspot/share/opto/escape.cpp
@@ -487,13 +487,6 @@ void ConnectionGraph::add_node_to_connection_graph(Node *n, Unique_Node_List *de
@@ -490,13 +490,6 @@ void ConnectionGraph::add_node_to_connection_graph(Node *n, Unique_Node_List *de
add_local_var_and_edge(n, PointsToNode::NoEscape,
n->in(0), delayed_worklist);
}
@ -4676,7 +4666,7 @@ index 235b31c4c..15d483f33 100644
break;
}
case Op_Rethrow: // Exception object escapes
@@ -701,14 +694,6 @@ void ConnectionGraph::add_final_edges(Node *n) {
@@ -731,14 +724,6 @@ void ConnectionGraph::add_final_edges(Node *n) {
add_local_var_and_edge(n, PointsToNode::NoEscape, n->in(0), NULL);
break;
}
@ -4692,7 +4682,7 @@ index 235b31c4c..15d483f33 100644
}
case Op_Rethrow: // Exception object escapes
diff --git a/src/hotspot/share/opto/lcm.cpp b/src/hotspot/share/opto/lcm.cpp
index 05ec9fa9f..16b80bfc3 100644
index 05ec9fa..16b80bf 100644
--- a/src/hotspot/share/opto/lcm.cpp
+++ b/src/hotspot/share/opto/lcm.cpp
@@ -169,7 +169,6 @@ void PhaseCFG::implicit_null_check(Block* block, Node *proj, Node *val, int allo
@ -4704,10 +4694,10 @@ index 05ec9fa9f..16b80bfc3 100644
case Op_LoadS:
case Op_LoadKlass:
diff --git a/src/hotspot/share/opto/loopnode.cpp b/src/hotspot/share/opto/loopnode.cpp
index 7c3033162..25fab93cf 100644
index 6aff3d5..38f0449 100644
--- a/src/hotspot/share/opto/loopnode.cpp
+++ b/src/hotspot/share/opto/loopnode.cpp
@@ -1001,18 +1001,6 @@ void LoopNode::verify_strip_mined(int expect_skeleton) const {
@@ -1005,18 +1005,6 @@ void LoopNode::verify_strip_mined(int expect_skeleton) const {
}
}
@ -4726,7 +4716,7 @@ index 7c3033162..25fab93cf 100644
CountedLoopEndNode* cle = inner_out->in(0)->as_CountedLoopEnd();
assert(cle == inner->loopexit_or_null(), "mismatch");
bool has_skeleton = outer_le->in(1)->bottom_type()->singleton() && outer_le->in(1)->bottom_type()->is_int()->get_con() == 0;
@@ -4250,7 +4238,6 @@ void PhaseIdealLoop::build_loop_late_post( Node *n ) {
@@ -4273,7 +4261,6 @@ void PhaseIdealLoop::build_loop_late_post( Node *n ) {
case Op_LoadL:
case Op_LoadS:
case Op_LoadP:
@ -4735,7 +4725,7 @@ index 7c3033162..25fab93cf 100644
case Op_LoadRange:
case Op_LoadD_unaligned:
diff --git a/src/hotspot/share/opto/loopopts.cpp b/src/hotspot/share/opto/loopopts.cpp
index 5793f51f2..6b85529f4 100644
index 5793f51..6b85529 100644
--- a/src/hotspot/share/opto/loopopts.cpp
+++ b/src/hotspot/share/opto/loopopts.cpp
@@ -41,9 +41,6 @@
@ -4749,7 +4739,7 @@ index 5793f51f2..6b85529f4 100644
//=============================================================================
//------------------------------split_thru_phi---------------------------------
diff --git a/src/hotspot/share/opto/machnode.hpp b/src/hotspot/share/opto/machnode.hpp
index 66adf9be1..90d5b0af1 100644
index 66adf9b..90d5b0a 100644
--- a/src/hotspot/share/opto/machnode.hpp
+++ b/src/hotspot/share/opto/machnode.hpp
@@ -197,7 +197,7 @@ public:
@ -4783,7 +4773,7 @@ index 66adf9be1..90d5b0af1 100644
// more leafs. Must be set by MachNode constructor to point to an
// internal array of MachOpers. The MachOper array is sized by
diff --git a/src/hotspot/share/opto/matcher.cpp b/src/hotspot/share/opto/matcher.cpp
index 79b366fd5..41d92b3d0 100644
index 45d2627..05fdab2 100644
--- a/src/hotspot/share/opto/matcher.cpp
+++ b/src/hotspot/share/opto/matcher.cpp
@@ -1752,6 +1752,13 @@ MachNode *Matcher::ReduceInst( State *s, int rule, Node *&mem ) {
@ -4818,7 +4808,7 @@ index 79b366fd5..41d92b3d0 100644
default:
if( n->is_Store() ) {
// Do match stores, despite no ideal reg
@@ -2286,33 +2282,6 @@ void Matcher::find_shared( Node *n ) {
@@ -2294,33 +2290,6 @@ void Matcher::find_shared( Node *n ) {
n->del_req(LoadStoreConditionalNode::ExpectedIn);
break;
}
@ -4853,7 +4843,7 @@ index 79b366fd5..41d92b3d0 100644
case Op_CMoveF:
case Op_CMoveI:
diff --git a/src/hotspot/share/opto/memnode.cpp b/src/hotspot/share/opto/memnode.cpp
index 2de221a1e..4147c6d46 100644
index 76e950c..028d1a9 100644
--- a/src/hotspot/share/opto/memnode.cpp
+++ b/src/hotspot/share/opto/memnode.cpp
@@ -49,9 +49,6 @@
@ -4863,10 +4853,10 @@ index 2de221a1e..4147c6d46 100644
-#if INCLUDE_ZGC
-#include "gc/z/c2/zBarrierSetC2.hpp"
-#endif
// Portions of code courtesy of Clifford Click
@@ -2818,7 +2815,7 @@ LoadStoreNode::LoadStoreNode( Node *c, Node *mem, Node *adr, Node *val, const Ty
#if INCLUDE_SHENANDOAHGC
#include "gc/shenandoah/c2/shenandoahBarrierSetC2.hpp"
#endif
@@ -2826,7 +2823,7 @@ LoadStoreNode::LoadStoreNode( Node *c, Node *mem, Node *adr, Node *val, const Ty
: Node(required),
_type(rt),
_adr_type(at),
@ -4876,7 +4866,7 @@ index 2de221a1e..4147c6d46 100644
init_req(MemNode::Control, c );
init_req(MemNode::Memory , mem);
diff --git a/src/hotspot/share/opto/memnode.hpp b/src/hotspot/share/opto/memnode.hpp
index e2bd6a6d8..3bf3dc420 100644
index e2bd6a6..3bf3dc4 100644
--- a/src/hotspot/share/opto/memnode.hpp
+++ b/src/hotspot/share/opto/memnode.hpp
@@ -43,6 +43,8 @@ private:
@ -5002,7 +4992,7 @@ index e2bd6a6d8..3bf3dc420 100644
//------------------------------CompareAndSwapBNode---------------------------
diff --git a/src/hotspot/share/opto/node.cpp b/src/hotspot/share/opto/node.cpp
index 9bfc3a3b9..8d0475f53 100644
index bb020c4..5a5e44e 100644
--- a/src/hotspot/share/opto/node.cpp
+++ b/src/hotspot/share/opto/node.cpp
@@ -546,9 +546,6 @@ Node *Node::clone() const {
@ -5027,7 +5017,7 @@ index 9bfc3a3b9..8d0475f53 100644
}
diff --git a/src/hotspot/share/opto/node.hpp b/src/hotspot/share/opto/node.hpp
index d69974be2..cf0975e37 100644
index a4c5fd8..2a42e99 100644
--- a/src/hotspot/share/opto/node.hpp
+++ b/src/hotspot/share/opto/node.hpp
@@ -82,8 +82,6 @@ class JVMState;
@ -5039,7 +5029,7 @@ index d69974be2..cf0975e37 100644
class LoadStoreNode;
class LoadStoreConditionalNode;
class LockNode;
@@ -641,7 +639,6 @@ public:
@@ -644,7 +642,6 @@ public:
DEFINE_CLASS_ID(MemBar, Multi, 3)
DEFINE_CLASS_ID(Initialize, MemBar, 0)
DEFINE_CLASS_ID(MemBarStoreStore, MemBar, 1)
@ -5047,7 +5037,7 @@ index d69974be2..cf0975e37 100644
DEFINE_CLASS_ID(Mach, Node, 1)
DEFINE_CLASS_ID(MachReturn, Mach, 0)
@@ -690,7 +687,6 @@ public:
@@ -696,7 +693,6 @@ public:
DEFINE_CLASS_ID(Mem, Node, 4)
DEFINE_CLASS_ID(Load, Mem, 0)
DEFINE_CLASS_ID(LoadVector, Load, 0)
@ -5055,7 +5045,7 @@ index d69974be2..cf0975e37 100644
DEFINE_CLASS_ID(Store, Mem, 1)
DEFINE_CLASS_ID(StoreVector, Store, 0)
DEFINE_CLASS_ID(LoadStore, Mem, 2)
@@ -833,8 +829,6 @@ public:
@@ -839,8 +835,6 @@ public:
DEFINE_CLASS_QUERY(Load)
DEFINE_CLASS_QUERY(LoadStore)
DEFINE_CLASS_QUERY(LoadStoreConditional)
@ -5065,19 +5055,19 @@ index d69974be2..cf0975e37 100644
DEFINE_CLASS_QUERY(Loop)
DEFINE_CLASS_QUERY(Mach)
diff --git a/src/hotspot/share/opto/output.cpp b/src/hotspot/share/opto/output.cpp
index b8f72ffca..4319f9fd1 100644
index 3c02a6f..e3933f4 100644
--- a/src/hotspot/share/opto/output.cpp
+++ b/src/hotspot/share/opto/output.cpp
@@ -31,6 +31,8 @@
#include "compiler/compileBroker.hpp"
@@ -32,6 +32,8 @@
#include "compiler/compilerDirectives.hpp"
#include "compiler/disassembler.hpp"
#include "compiler/oopMap.hpp"
+#include "gc/shared/barrierSet.hpp"
+#include "gc/shared/c2/barrierSetC2.hpp"
#include "memory/allocation.inline.hpp"
#include "opto/ad.hpp"
#include "opto/callnode.hpp"
@@ -114,35 +116,35 @@ void Compile::Output() {
@@ -115,35 +117,35 @@ void Compile::Output() {
}
}
@ -5134,7 +5124,7 @@ index b8f72ffca..4319f9fd1 100644
return;
}
@@ -223,7 +225,7 @@ void Compile::compute_loop_first_inst_sizes() {
@@ -224,7 +226,7 @@ void Compile::compute_loop_first_inst_sizes() {
// The architecture description provides short branch variants for some long
// branch instructions. Replace eligible long branches with short branches.
@ -5143,7 +5133,7 @@ index b8f72ffca..4319f9fd1 100644
// Compute size of each block, method size, and relocation information size
uint nblocks = _cfg->number_of_blocks();
@@ -241,11 +243,11 @@ void Compile::shorten_branches(uint* blk_starts, int& code_size, int& reloc_size
@@ -242,11 +244,11 @@ void Compile::shorten_branches(uint* blk_starts, int& code_size, int& reloc_size
bool has_short_branch_candidate = false;
// Initialize the sizes to 0
@ -5158,7 +5148,7 @@ index b8f72ffca..4319f9fd1 100644
// Make three passes. The first computes pessimistic blk_starts,
// relative jmp_offset and reloc_size information. The second performs
@@ -479,6 +481,10 @@ void Compile::shorten_branches(uint* blk_starts, int& code_size, int& reloc_size
@@ -480,6 +482,10 @@ void Compile::shorten_branches(uint* blk_starts, int& code_size, int& reloc_size
// a relocation index.
// The CodeBuffer will expand the locs array if this estimate is too low.
reloc_size *= 10 / sizeof(relocInfo);
@ -5169,7 +5159,7 @@ index b8f72ffca..4319f9fd1 100644
}
//------------------------------FillLocArray-----------------------------------
@@ -490,8 +496,8 @@ static LocationValue *new_loc_value( PhaseRegAlloc *ra, OptoReg::Name regnum, Lo
@@ -491,8 +497,8 @@ static LocationValue *new_loc_value( PhaseRegAlloc *ra, OptoReg::Name regnum, Lo
// This should never have accepted Bad before
assert(OptoReg::is_valid(regnum), "location must be valid");
return (OptoReg::is_reg(regnum))
@ -5180,7 +5170,7 @@ index b8f72ffca..4319f9fd1 100644
}
@@ -610,12 +616,12 @@ void Compile::FillLocArray( int idx, MachSafePointNode* sfpt, Node *local,
@@ -611,12 +617,12 @@ void Compile::FillLocArray( int idx, MachSafePointNode* sfpt, Node *local,
}
#endif //_LP64
else if( (t->base() == Type::FloatBot || t->base() == Type::FloatCon) &&
@ -5196,7 +5186,7 @@ index b8f72ffca..4319f9fd1 100644
} else if( t->base() == Type::NarrowOop ) {
array->append(new_loc_value( _regalloc, regnum, Location::narrowoop ));
} else {
@@ -626,48 +632,48 @@ void Compile::FillLocArray( int idx, MachSafePointNode* sfpt, Node *local,
@@ -627,48 +633,48 @@ void Compile::FillLocArray( int idx, MachSafePointNode* sfpt, Node *local,
// No register. It must be constant data.
switch (t->base()) {
@ -5281,7 +5271,7 @@ index b8f72ffca..4319f9fd1 100644
// The convention the interpreter uses is that the second local
// holds the first raw word of the native double representation.
// This is actually reasonable, since locals and stack arrays
@@ -679,15 +685,15 @@ void Compile::FillLocArray( int idx, MachSafePointNode* sfpt, Node *local,
@@ -680,15 +686,15 @@ void Compile::FillLocArray( int idx, MachSafePointNode* sfpt, Node *local,
array->append(new ConstantIntValue(acc.words[1]));
array->append(new ConstantIntValue(acc.words[0]));
#endif
@ -5304,7 +5294,7 @@ index b8f72ffca..4319f9fd1 100644
// The convention the interpreter uses is that the second local
// holds the first raw word of the native double representation.
// This is actually reasonable, since locals and stack arrays
@@ -699,14 +705,14 @@ void Compile::FillLocArray( int idx, MachSafePointNode* sfpt, Node *local,
@@ -700,14 +706,14 @@ void Compile::FillLocArray( int idx, MachSafePointNode* sfpt, Node *local,
array->append(new ConstantIntValue(acc.words[1]));
array->append(new ConstantIntValue(acc.words[0]));
#endif
@ -5327,7 +5317,7 @@ index b8f72ffca..4319f9fd1 100644
}
}
@@ -871,58 +877,58 @@ void Compile::Process_OopMap_Node(MachNode *mach, int current_offset) {
@@ -872,58 +878,58 @@ void Compile::Process_OopMap_Node(MachNode *mach, int current_offset) {
// A simplified version of Process_OopMap_Node, to handle non-safepoints.
class NonSafepointEmitter {
@ -5424,7 +5414,7 @@ index b8f72ffca..4319f9fd1 100644
};
void NonSafepointEmitter::emit_non_safepoint() {
@@ -952,15 +958,11 @@ void NonSafepointEmitter::emit_non_safepoint() {
@@ -953,15 +959,11 @@ void NonSafepointEmitter::emit_non_safepoint() {
}
//------------------------------init_buffer------------------------------------
@ -5442,7 +5432,7 @@ index b8f72ffca..4319f9fd1 100644
// The extra spacing after the code is necessary on some platforms.
// Sometimes we need to patch in a jump after the last instruction,
// if the nmethod has been deoptimized. (See 4932387, 4894843.)
@@ -972,7 +974,7 @@ CodeBuffer* Compile::init_buffer(uint* blk_starts) {
@@ -973,7 +975,7 @@ CodeBuffer* Compile::init_buffer(uint* blk_starts) {
// Compute prolog code size
_method_size = 0;
@ -5451,7 +5441,7 @@ index b8f72ffca..4319f9fd1 100644
#if defined(IA64) && !defined(AIX)
if (save_argument_registers()) {
// 4815101: this is a stub with implicit and unknown precision fp args.
@@ -1021,12 +1023,18 @@ CodeBuffer* Compile::init_buffer(uint* blk_starts) {
@@ -1022,12 +1024,18 @@ CodeBuffer* Compile::init_buffer(uint* blk_starts) {
// Initialize the space for the BufferBlob used to find and verify
// instruction size in MachNode::emit_size()
init_scratch_buffer_blob(const_req);
@ -5474,7 +5464,7 @@ index b8f72ffca..4319f9fd1 100644
// nmethod and CodeBuffer count stubs & constants as part of method's code.
// class HandlerImpl is platform-specific and defined in the *.ad files.
int exception_handler_req = HandlerImpl::size_exception_handler() + MAX_stubs_size; // add marginal slop for handler
@@ -1038,18 +1046,18 @@ CodeBuffer* Compile::init_buffer(uint* blk_starts) {
@@ -1039,18 +1047,18 @@ CodeBuffer* Compile::init_buffer(uint* blk_starts) {
code_req = const_req = stub_req = exception_handler_req = deopt_handler_req = 0x10; // force expansion
int total_req =
@ -5500,7 +5490,7 @@ index b8f72ffca..4319f9fd1 100644
// Have we run out of code space?
if ((cb->blob() == NULL) || (!CompileBroker::should_compile_new_jobs())) {
@@ -1263,12 +1271,12 @@ void Compile::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
@@ -1264,12 +1272,12 @@ void Compile::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
Process_OopMap_Node(mach, current_offset);
} // End if safepoint
@ -5515,7 +5505,7 @@ index b8f72ffca..4319f9fd1 100644
else if (mach->is_MachBranch()) {
// This requires the TRUE branch target be in succs[0]
uint block_num = block->non_connector_successor(0)->_pre_order;
@@ -1279,8 +1287,8 @@ void Compile::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
@@ -1280,8 +1288,8 @@ void Compile::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
bool delay_slot_is_used = valid_bundle_info(n) &&
node_bundling(n)->use_unconditional_delay();
if (!delay_slot_is_used && mach->may_be_short_branch()) {
@ -5526,7 +5516,7 @@ index b8f72ffca..4319f9fd1 100644
int offset = blk_starts[block_num] - current_offset;
if (block_num >= i) {
// Current and following block's offset are not
@@ -1338,7 +1346,7 @@ void Compile::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
@@ -1339,7 +1347,7 @@ void Compile::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
}
}
#ifdef ASSERT
@ -5535,7 +5525,7 @@ index b8f72ffca..4319f9fd1 100644
else if (mach->ideal_Opcode() == Op_StoreCM) {
uint storeCM_idx = j;
int count = 0;
@@ -1507,6 +1515,10 @@ void Compile::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
@@ -1517,6 +1525,10 @@ void Compile::fill_buffer(CodeBuffer* cb, uint* blk_starts) {
}
#endif
@ -5546,7 +5536,7 @@ index b8f72ffca..4319f9fd1 100644
#ifndef PRODUCT
// Information on the size of the method, without the extraneous code
Scheduling::increment_method_size(cb->insts_size());
@@ -1671,20 +1683,20 @@ uint Scheduling::_total_instructions_per_bundle[Pipeline::_max_instrs_per_cycle+
@@ -1681,20 +1693,20 @@ uint Scheduling::_total_instructions_per_bundle[Pipeline::_max_instrs_per_cycle+
// Initializer for class Scheduling
Scheduling::Scheduling(Arena *arena, Compile &compile)
@ -5580,7 +5570,7 @@ index b8f72ffca..4319f9fd1 100644
#endif
{
// Create a MachNopNode
@@ -1763,8 +1775,8 @@ void Scheduling::step_and_clear() {
@@ -1773,8 +1785,8 @@ void Scheduling::step_and_clear() {
_bundle_use.reset();
memcpy(_bundle_use_elements,
@ -5591,7 +5581,7 @@ index b8f72ffca..4319f9fd1 100644
}
// Perform instruction scheduling and bundling over the sequence of
@@ -1791,6 +1803,22 @@ void Compile::ScheduleAndBundle() {
@@ -1801,6 +1813,22 @@ void Compile::ScheduleAndBundle() {
// Walk backwards over each basic block, computing the needed alignment
// Walk over all the basic blocks
scheduling.DoScheduling();
@ -5614,7 +5604,7 @@ index b8f72ffca..4319f9fd1 100644
}
// Compute the latency of all the instructions. This is fairly simple,
@@ -1859,7 +1887,7 @@ bool Scheduling::NodeFitsInBundle(Node *n) {
@@ -1869,7 +1897,7 @@ bool Scheduling::NodeFitsInBundle(Node *n) {
#ifndef PRODUCT
if (_cfg->C->trace_opto_output())
tty->print("# NodeFitsInBundle [%4d]: FALSE; latency %4d > %d\n",
@ -5623,7 +5613,7 @@ index b8f72ffca..4319f9fd1 100644
#endif
return (false);
}
@@ -2084,12 +2112,12 @@ void Scheduling::AddNodeToBundle(Node *n, const Block *bb) {
@@ -2094,12 +2122,12 @@ void Scheduling::AddNodeToBundle(Node *n, const Block *bb) {
// Don't allow safepoints in the branch shadow, that will
// cause a number of difficulties
if ( avail_pipeline->instructionCount() == 1 &&
@ -5642,7 +5632,7 @@ index b8f72ffca..4319f9fd1 100644
if (d->is_Mach() && !d->is_MachSafePoint()) {
// A node that fits in the delay slot was found, so we need to
@@ -2134,13 +2162,13 @@ void Scheduling::AddNodeToBundle(Node *n, const Block *bb) {
@@ -2144,13 +2172,13 @@ void Scheduling::AddNodeToBundle(Node *n, const Block *bb) {
// step of the bundles
if (!NodeFitsInBundle(n)) {
#ifndef PRODUCT
@ -5661,7 +5651,7 @@ index b8f72ffca..4319f9fd1 100644
}
}
@@ -2186,8 +2214,8 @@ void Scheduling::AddNodeToBundle(Node *n, const Block *bb) {
@@ -2196,8 +2224,8 @@ void Scheduling::AddNodeToBundle(Node *n, const Block *bb) {
#ifndef PRODUCT
if (_cfg->C->trace_opto_output())
tty->print("# *** STEP(%d >= %d instructions) ***\n",
@ -5672,7 +5662,7 @@ index b8f72ffca..4319f9fd1 100644
#endif
step(1);
}
@@ -2393,7 +2421,7 @@ void Scheduling::DoScheduling() {
@@ -2403,7 +2431,7 @@ void Scheduling::DoScheduling() {
}
assert(!last->is_Mach() || last->as_Mach()->ideal_Opcode() != Op_Con, "");
if( last->is_Catch() ||
@ -5681,7 +5671,7 @@ index b8f72ffca..4319f9fd1 100644
// There might be a prior call. Skip it.
while (_bb_start < _bb_end && bb->get_node(--_bb_end)->is_MachProj());
} else if( last->is_MachNullCheck() ) {
@@ -2463,7 +2491,7 @@ void Scheduling::DoScheduling() {
@@ -2473,7 +2501,7 @@ void Scheduling::DoScheduling() {
}
#endif
#ifdef ASSERT
@ -5690,7 +5680,7 @@ index b8f72ffca..4319f9fd1 100644
#endif
}
@@ -2811,31 +2839,31 @@ void Scheduling::ComputeRegisterAntidependencies(Block *b) {
@@ -2821,31 +2849,31 @@ void Scheduling::ComputeRegisterAntidependencies(Block *b) {
//
void Scheduling::garbage_collect_pinch_nodes() {
#ifndef PRODUCT
@ -5742,7 +5732,7 @@ index b8f72ffca..4319f9fd1 100644
#endif
}
@@ -2872,19 +2900,19 @@ void Scheduling::dump_available() const {
@@ -2882,19 +2910,19 @@ void Scheduling::dump_available() const {
void Scheduling::print_statistics() {
// Print the size added by nops for bundling
tty->print("Nops added %d bytes to total of %d bytes",
@ -5766,7 +5756,7 @@ index b8f72ffca..4319f9fd1 100644
tty->print("\n");
}
@@ -2898,6 +2926,6 @@ void Scheduling::print_statistics() {
@@ -2908,6 +2936,6 @@ void Scheduling::print_statistics() {
if (total_bundles > 0)
tty->print("Average ILP (excluding nops) is %.2f\n",
@ -5775,7 +5765,7 @@ index b8f72ffca..4319f9fd1 100644
}
#endif
diff --git a/src/hotspot/share/opto/output.hpp b/src/hotspot/share/opto/output.hpp
index ab3c1a304..ec3cc2981 100644
index ab3c1a3..ec3cc29 100644
--- a/src/hotspot/share/opto/output.hpp
+++ b/src/hotspot/share/opto/output.hpp
@@ -49,10 +49,7 @@ class Pipeline_Use;
@ -5791,10 +5781,10 @@ index ab3c1a304..ec3cc2981 100644
//------------------------------Scheduling----------------------------------
diff --git a/src/hotspot/share/opto/phaseX.cpp b/src/hotspot/share/opto/phaseX.cpp
index d1177a56e..f9b883ef6 100644
index 07b8490..9d5d4de 100644
--- a/src/hotspot/share/opto/phaseX.cpp
+++ b/src/hotspot/share/opto/phaseX.cpp
@@ -1650,14 +1650,14 @@ void PhaseIterGVN::add_users_to_worklist( Node *n ) {
@@ -1648,14 +1648,14 @@ void PhaseIterGVN::add_users_to_worklist( Node *n ) {
// of the mirror load depends on the type of 'n'. See LoadNode::Value().
// LoadBarrier?(LoadP(LoadP(AddP(foo:Klass, #java_mirror))))
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
@ -5811,7 +5801,7 @@ index d1177a56e..f9b883ef6 100644
// Search for load barriers behind the load
for (DUIterator_Fast i3max, i3 = u->fast_outs(i3max); i3 < i3max; i3++) {
Node* b = u->fast_out(i3);
@@ -1811,14 +1811,14 @@ void PhaseCCP::analyze() {
@@ -1818,14 +1818,14 @@ void PhaseCCP::analyze() {
// Loading the java mirror from a Klass requires two loads and the type
// of the mirror load depends on the type of 'n'. See LoadNode::Value().
BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
@ -5829,10 +5819,10 @@ index d1177a56e..f9b883ef6 100644
for (DUIterator_Fast i3max, i3 = u->fast_outs(i3max); i3 < i3max; i3++) {
Node* b = u->fast_out(i3);
diff --git a/src/hotspot/share/opto/vectornode.cpp b/src/hotspot/share/opto/vectornode.cpp
index b40587ba5..e0bf8410a 100644
index 0258db3..fae147f 100644
--- a/src/hotspot/share/opto/vectornode.cpp
+++ b/src/hotspot/share/opto/vectornode.cpp
@@ -252,7 +252,6 @@ void VectorNode::vector_operands(Node* n, uint* start, uint* end) {
@@ -264,7 +264,6 @@ void VectorNode::vector_operands(Node* n, uint* start, uint* end) {
case Op_LoadI: case Op_LoadL:
case Op_LoadF: case Op_LoadD:
case Op_LoadP: case Op_LoadN:
@ -5840,4 +5830,3 @@ index b40587ba5..e0bf8410a 100644
*start = 0;
*end = 0; // no vector operands
break;

View File

@ -1,15 +1,3 @@
From 9f63ba9b77f9f5391b2f79d2a4c3a444268a54ca Mon Sep 17 00:00:00 2001
Date: Tue, 21 Apr 2020 17:00:15 +0000
Subject: [PATCH] ZGC: reuse entries of ResolvedMethodTable
Summary: <gc>: <zgc need remove unused entries of ResolvedMethodTable in mark end>
LLT: test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java
Bug url: NA
---
src/hotspot/share/gc/z/zHeap.cpp | 5 +++++
.../hotspot/jtreg/runtime/MemberName/MemberNameLeak.java | 16 +++++++++++++---
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/src/hotspot/share/gc/z/zHeap.cpp b/src/hotspot/share/gc/z/zHeap.cpp
index 62f97d2..e950acf 100644
--- a/src/hotspot/share/gc/z/zHeap.cpp
@ -34,39 +22,14 @@ index 62f97d2..e950acf 100644
}
diff --git a/test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java b/test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java
index 357f27f..930a542 100644
index a8aff47..afadfd6 100644
--- a/test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java
+++ b/test/hotspot/jtreg/runtime/MemberName/MemberNameLeak.java
@@ -59,9 +59,18 @@ public class MemberNameLeak {
public static void test(String gc) throws Throwable {
// Run this Leak class with logging
- ProcessBuilder pb = ProcessTools.createJavaProcessBuilder(
- "-Xlog:membername+table=trace",
- gc, Leak.class.getName());
+ ProcessBuilder pb;
+ if (gc.contains("UseZGC")) {
+ pb = ProcessTools.createJavaProcessBuilder(
+ "-Xlog:membername+table=trace",
+ "-XX:+UnlockExperimentalVMOptions",
+ gc, Leak.class.getName());
+
+ } else {
+ pb = ProcessTools.createJavaProcessBuilder(
+ "-Xlog:membername+table=trace",
+ gc, Leak.class.getName());
+ }
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldContain("ResolvedMethod entry added for MemberNameLeak$Leak.callMe()V");
output.shouldContain("ResolvedMethod entry found for MemberNameLeak$Leak.callMe()V");
@@ -73,6 +82,7 @@ public class MemberNameLeak {
@@ -75,6 +75,7 @@ public class MemberNameLeak {
test("-XX:+UseG1GC");
test("-XX:+UseParallelGC");
test("-XX:+UseSerialGC");
+ test("-XX:+UseZGC");
if (!Compiler.isGraalEnabled()) { // Graal does not support CMS
if (!Compiler.isGraalEnabled()) { // Graal does not support CMS and Shenandoah
test("-XX:+UseConcMarkSweepGC");
}
--
1.8.3.1
if (GC.Shenandoah.isSupported()) {

View File

@ -1,29 +0,0 @@
From 466cb0f1a98c7b93e47e6056c460b6ec81864e3b Mon Sep 17 00:00:00 2001
Date: Tue, 12 May 2020 10:08:51 +0000
Subject: [PATCH] fix IfNode's bugs
Summary: <C2>: fix wrong use of transform function
LLT:
Bug url: NA
---
src/hotspot/share/opto/ifnode.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/hotspot/share/opto/ifnode.cpp b/src/hotspot/share/opto/ifnode.cpp
index 6f87d7c..a856200 100644
--- a/src/hotspot/share/opto/ifnode.cpp
+++ b/src/hotspot/share/opto/ifnode.cpp
@@ -1398,7 +1398,10 @@ Node* IfNode::Ideal(PhaseGVN *phase, bool can_reshape) {
if (in(0) == NULL) return NULL; // Dead loop?
PhaseIterGVN *igvn = phase->is_IterGVN();
+ bool delay_state = igvn->delay_transform();
+ igvn->set_delay_transform(true);
Node* result = fold_compares(igvn);
+ igvn->set_delay_transform(delay_state);
if (result != NULL) {
return result;
}
--
1.8.3.1

View File

@ -114,13 +114,13 @@
# New Version-String scheme-style defines
%global majorver 11
%global securityver 8
%global securityver 9
# buildjdkver is usually same as %%{majorver},
# but in time of bootstrap of next jdk, it is majorver-1,
# and this it is better to change it here, on single place
%global buildjdkver %{majorver}
%global vendor_version_string Boole
%global vendor_version_string Bisheng
# Define IcedTea version used for SystemTap tapsets and desktop file
%global icedteaver 3.15.0
@ -130,11 +130,11 @@
%global origin_nice OpenJDK
%global top_level_dir_name %{origin}
%global minorver 0
%global buildver 10
%global buildver 11
%global project jdk-updates
%global repo jdk11u
%global revision jdk-11.0.8-ga
%global revision jdk-11.0.9-ga
%global full_revision %{project}-%{repo}-%{revision}
# priority must be 7 digits in total
# setting to 1, so debug ones can have 0
@ -735,7 +735,7 @@ Provides: java-src%{?1} = %{epoch}:%{version}-%{release}
Name: java-%{javaver}-%{origin}
Version: %{newjavaver}.%{buildver}
Release: 9
Release: 0
# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons
# and this change was brought into RHEL-4. java-1.5.0-ibm packages
# also included the epoch in their virtual provides. This created a
@ -805,8 +805,6 @@ Patch10: ZGC-aarch64-not-using-zr-register-avoid-sigill-in-Ma.patch
Patch11: 8217856-ZGC-Break-out-C2-matching-rules-into-separat.patch
Patch12: 8233073-Make-BitMap-accessors-more-memory-ordering-f.patch
Patch13: 8233061-ZGC-Enforce-memory-ordering-in-segmented-bit.patch
Patch14: Add-loadload-membar-to-avoid-loading-a-incorrect-offset.patch
Patch15: 8226536-Catch-OOM-from-deopt-that-fails-rematerializ.patch
Patch18: 8209375-ZGC-Use-dynamic-base-address-for-mark-stack-.patch
Patch20: 8209894-ZGC-Cap-number-of-GC-workers-based-on-heap-s.patch
Patch22: 8233506-ZGC-the-load-for-Reference.get-can-be-conver.patch
@ -815,7 +813,6 @@ Patch26: ZGC-aarch64-fix-system-call-number-of-memfd_create.patch
Patch27: ZGC-aarch64-fix-not-using-load-store-Pre-index.patch
Patch28: address-s-offset-may-exceed-the-limit-of-ldrw-instru.patch
Patch29: ZGC-reuse-entries-of-ResolvedMethodTable.patch
Patch32: 8240360-NativeLibraryEvent-has-wrong-library-name-on-linux.patch
# 11.0.8
Patch33: 8210473-JEP-345-NUMA-Aware-Memory-Allocation-for-G1.patch
@ -829,7 +826,6 @@ Patch40: 8223667-ASAN-build-broken.patch
Patch41: 8229495-SIGILL-in-C2-generated-OSR-compilation.patch
Patch42: 8229496-SIGFPE-division-by-zero-in-C2-OSR-compiled-method.patch
Patch43: 8243670-Unexpected-test-result-caused-by-C2-MergeMem.patch
Patch44: fix-IfNode-s-bugs.patch
Patch45: leaf-optimize-in-ParallelScanvageGC.patch
Patch46: ZGC-correct-free-heap-size-excluding-waste-in-rule_allocation_rate.patch
Patch47: 8204947-Port-ShenandoahTaskTerminator-to-mainline-and-make-it-default.patch
@ -1074,8 +1070,6 @@ pushd %{top_level_dir_name}
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch18 -p1
%patch20 -p1
%patch22 -p1
@ -1084,7 +1078,6 @@ pushd %{top_level_dir_name}
%patch27 -p1
%patch28 -p1
%patch29 -p1
%patch32 -p1
%patch33 -p1
%patch34 -p1
%patch35 -p1
@ -1093,10 +1086,9 @@ pushd %{top_level_dir_name}
%patch38 -p1
%patch39 -p1
%patch40 -p1
%patch41 -p1
# %patch41 -p1
%patch42 -p1
%patch43 -p1
%patch44 -p1
%patch45 -p1
%patch46 -p1
%patch47 -p1
@ -1193,7 +1185,7 @@ bash ../configure \
--with-version-pre="" \
--with-version-opt="" \
--with-vendor-version-string="%{vendor_version_string}" \
--with-vendor-name="Boole" \
--with-vendor-name="Bisheng" \
--with-vendor-url="https://openeuler.org/" \
--with-vendor-bug-url="https://gitee.com/src-openeuler/openjdk-11/issues/" \
--with-vendor-vm-bug-url="https://gitee.com/src-openeuler/openjdk-11/issues/" \
@ -1604,6 +1596,11 @@ require "copy_jdk_configs.lua"
%changelog
* Thu Oct 22 2020 noah <hedongbo@huawei.com> - 1:11.0.9.11-0
- Update to 11.0.9+11 (GA)
- rename Boole to Bisheng
- remove 8229495-SIGILL-in-C2-generated-OSR-compilation.patch temporarily
* Tue Oct 20 2020 noah <hedongbo@huawei.com> - 1:11.0.8.10-9
- delete redundant openjdk-11.0.8-ga.tar.xz