8297235: ZGC: assert(regs[i] != regs[j]) failed: Multiple uses of register: rax
Reviewed-by: thartmann, rcastanedalo Backport-of: 042b7062f19b313f31b228bd96d2a74cc1165ab9
This commit is contained in:
parent
0eeaf6b219
commit
581f9f2306
@ -35,7 +35,7 @@ source %{
|
||||
|
||||
static void z_load_barrier(MacroAssembler& _masm, const MachNode* node, Address ref_addr, Register ref, Register tmp, uint8_t barrier_data) {
|
||||
if (barrier_data == ZLoadBarrierElided) {
|
||||
return; // Elided.
|
||||
return;
|
||||
}
|
||||
ZLoadBarrierStubC2* const stub = ZLoadBarrierStubC2::create(node, ref_addr, ref, tmp, barrier_data);
|
||||
{
|
||||
@ -60,6 +60,27 @@ static void z_load_barrier_cmpxchg(MacroAssembler& _masm, const MachNode* node,
|
||||
__ bind(*stub->continuation());
|
||||
}
|
||||
|
||||
static void z_cmpxchg_common(MacroAssembler& _masm, const MachNode* node, Register mem_reg, Register newval, Register tmp) {
|
||||
// Compare value (oldval) is in rax
|
||||
const Address mem = Address(mem_reg, 0);
|
||||
|
||||
if (node->barrier_data() != ZLoadBarrierElided) {
|
||||
__ movptr(tmp, rax);
|
||||
}
|
||||
|
||||
__ lock();
|
||||
__ cmpxchgptr(newval, mem);
|
||||
|
||||
if (node->barrier_data() != ZLoadBarrierElided) {
|
||||
Label good;
|
||||
z_load_barrier_cmpxchg(_masm, node, mem, rax, tmp, good);
|
||||
__ movptr(rax, tmp);
|
||||
__ lock();
|
||||
__ cmpxchgptr(newval, mem);
|
||||
__ bind(good);
|
||||
}
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
// Load Pointer
|
||||
@ -81,7 +102,7 @@ instruct zLoadP(rRegP dst, memory mem, rFlagsReg cr)
|
||||
ins_pipe(ialu_reg_mem);
|
||||
%}
|
||||
|
||||
instruct zCompareAndExchangeP(memory mem, rax_RegP oldval, rRegP newval, rRegP tmp, rFlagsReg cr) %{
|
||||
instruct zCompareAndExchangeP(indirect mem, rax_RegP oldval, rRegP newval, rRegP tmp, rFlagsReg cr) %{
|
||||
match(Set oldval (CompareAndExchangeP mem (Binary oldval newval)));
|
||||
predicate(UseZGC && n->as_LoadStore()->barrier_data() == ZLoadBarrierStrong);
|
||||
effect(KILL cr, TEMP tmp);
|
||||
@ -90,26 +111,14 @@ instruct zCompareAndExchangeP(memory mem, rax_RegP oldval, rRegP newval, rRegP t
|
||||
"cmpxchgq $newval, $mem" %}
|
||||
|
||||
ins_encode %{
|
||||
if (barrier_data() != ZLoadBarrierElided) { // barrier could be elided by ZBarrierSetC2::analyze_dominating_barriers()
|
||||
__ movptr($tmp$$Register, $oldval$$Register);
|
||||
}
|
||||
__ lock();
|
||||
__ cmpxchgptr($newval$$Register, $mem$$Address);
|
||||
|
||||
if (barrier_data() != ZLoadBarrierElided) {
|
||||
Label good;
|
||||
z_load_barrier_cmpxchg(_masm, this, $mem$$Address, $oldval$$Register, $tmp$$Register, good);
|
||||
__ movptr($oldval$$Register, $tmp$$Register);
|
||||
__ lock();
|
||||
__ cmpxchgptr($newval$$Register, $mem$$Address);
|
||||
__ bind(good);
|
||||
}
|
||||
precond($oldval$$Register == rax);
|
||||
z_cmpxchg_common(_masm, this, $mem$$Register, $newval$$Register, $tmp$$Register);
|
||||
%}
|
||||
|
||||
ins_pipe(pipe_cmpxchg);
|
||||
%}
|
||||
|
||||
instruct zCompareAndSwapP(rRegI res, memory mem, rRegP newval, rRegP tmp, rFlagsReg cr, rax_RegP oldval) %{
|
||||
instruct zCompareAndSwapP(rRegI res, indirect mem, rRegP newval, rRegP tmp, rFlagsReg cr, rax_RegP oldval) %{
|
||||
match(Set res (CompareAndSwapP mem (Binary oldval newval)));
|
||||
match(Set res (WeakCompareAndSwapP mem (Binary oldval newval)));
|
||||
predicate(UseZGC && n->as_LoadStore()->barrier_data() == ZLoadBarrierStrong);
|
||||
@ -121,20 +130,10 @@ instruct zCompareAndSwapP(rRegI res, memory mem, rRegP newval, rRegP tmp, rFlags
|
||||
"movzbl $res, $res" %}
|
||||
|
||||
ins_encode %{
|
||||
if (barrier_data() != ZLoadBarrierElided) { // barrier could be elided by ZBarrierSetC2::analyze_dominating_barriers()
|
||||
__ movptr($tmp$$Register, $oldval$$Register);
|
||||
}
|
||||
__ lock();
|
||||
__ cmpxchgptr($newval$$Register, $mem$$Address);
|
||||
|
||||
precond($oldval$$Register == rax);
|
||||
z_cmpxchg_common(_masm, this, $mem$$Register, $newval$$Register, $tmp$$Register);
|
||||
if (barrier_data() != ZLoadBarrierElided) {
|
||||
Label good;
|
||||
z_load_barrier_cmpxchg(_masm, this, $mem$$Address, $oldval$$Register, $tmp$$Register, good);
|
||||
__ movptr($oldval$$Register, $tmp$$Register);
|
||||
__ lock();
|
||||
__ cmpxchgptr($newval$$Register, $mem$$Address);
|
||||
__ bind(good);
|
||||
__ cmpptr($tmp$$Register, $oldval$$Register);
|
||||
__ cmpptr($tmp$$Register, rax);
|
||||
}
|
||||
__ setb(Assembler::equal, $res$$Register);
|
||||
__ movzbl($res$$Register, $res$$Register);
|
||||
@ -143,7 +142,7 @@ instruct zCompareAndSwapP(rRegI res, memory mem, rRegP newval, rRegP tmp, rFlags
|
||||
ins_pipe(pipe_cmpxchg);
|
||||
%}
|
||||
|
||||
instruct zXChgP(memory mem, rRegP newval, rFlagsReg cr) %{
|
||||
instruct zXChgP(indirect mem, rRegP newval, rFlagsReg cr) %{
|
||||
match(Set newval (GetAndSetP mem newval));
|
||||
predicate(UseZGC && n->as_LoadStore()->barrier_data() != 0);
|
||||
effect(KILL cr);
|
||||
@ -151,7 +150,7 @@ instruct zXChgP(memory mem, rRegP newval, rFlagsReg cr) %{
|
||||
format %{ "xchgq $newval, $mem" %}
|
||||
|
||||
ins_encode %{
|
||||
__ xchgptr($newval$$Register, $mem$$Address);
|
||||
__ xchgptr($newval$$Register, Address($mem$$Register, 0));
|
||||
z_load_barrier(_masm, this, Address(noreg, 0), $newval$$Register, noreg /* tmp */, barrier_data());
|
||||
%}
|
||||
|
||||
|
@ -26,71 +26,3 @@
|
||||
# List of quarantined tests for testing with ZGC.
|
||||
#
|
||||
#############################################################################
|
||||
|
||||
java/lang/StackWalker/AcrossThreads.java 8297235 generic-x64
|
||||
java/math/BigInteger/BigIntegerParallelMultiplyTest.java 8297235 generic-x64
|
||||
java/util/Arrays/SetAllTest.java 8297235 generic-x64
|
||||
java/util/Arrays/Sorting.java 8297235 generic-x64
|
||||
java/util/Arrays/largeMemory/ParallelPrefix.java 8297235 generic-x64
|
||||
java/util/BitSet/stream/BitSetStreamTest.java 8297235 generic-x64
|
||||
java/util/Collection/IteratorMicroBenchmark.java 8297235 generic-x64
|
||||
java/util/Collections/UnmodifiableMapEntrySet.java 8297235 generic-x64
|
||||
java/util/DoubleStreamSums/CompensatedSums.java 8297235 generic-x64
|
||||
java/util/Random/RandomTest.java 8297235 generic-x64
|
||||
java/util/Scanner/ScannerStreamTest.java 8297235 generic-x64
|
||||
java/util/concurrent/forkjoin/AsyncShutdownNow.java 8297235 generic-x64
|
||||
java/util/concurrent/forkjoin/AsyncShutdownNowInvokeAny.java 8297235 generic-x64
|
||||
java/util/concurrent/forkjoin/AsyncShutdownNowInvokeAnyRace.java 8297235 generic-x64
|
||||
java/util/concurrent/forkjoin/Integrate.java 8297235 generic-x64
|
||||
java/util/concurrent/forkjoin/NQueensCS.java 8297235 generic-x64
|
||||
java/util/concurrent/tck/JSR166TestCase.java 8297235 generic-x64
|
||||
java/util/regex/PatternStreamTest.java 8297235 generic-x64
|
||||
java/util/stream/CustomFJPoolTest.java 8297235 generic-x64
|
||||
java/util/stream/boottest/java.base/java/util/stream/DoubleNodeTest.java 8297235 generic-x64
|
||||
java/util/stream/boottest/java.base/java/util/stream/FlagOpTest.java 8297235 generic-x64
|
||||
java/util/stream/boottest/java.base/java/util/stream/IntNodeTest.java 8297235 generic-x64
|
||||
java/util/stream/boottest/java.base/java/util/stream/LongNodeTest.java 8297235 generic-x64
|
||||
java/util/stream/boottest/java.base/java/util/stream/NodeTest.java 8297235 generic-x64
|
||||
java/util/stream/boottest/java.base/java/util/stream/StreamReuseTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/SplittableRandomTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/CollectAndSummaryStatisticsTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/CollectorsTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/ConcatOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/CountTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/DistinctOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/DoublePrimitiveOpsTests.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/FilterOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/FindAnyOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/FindFirstOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/FlatMapOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/ForEachOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/GroupByOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/InfiniteStreamWithLimitOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/IntPrimitiveOpsTests.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/IntReduceTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/IntSliceOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/IntUniqOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/IterateTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/LongPrimitiveOpsTests.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/MapOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/MatchOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/MinMaxTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/PrimitiveAverageOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/PrimitiveSumTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/RangeTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/ReduceByOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/ReduceTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/SequentialOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/SliceOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/SortedOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/StreamBuilderTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/StreamLinkTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/StreamSpliteratorTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/TeeOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/ToArrayOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/ToListOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpStatefulTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/WhileOpTest.java 8297235 generic-x64
|
||||
java/util/stream/test/org/openjdk/tests/java/util/stream/mapMultiOpTest.java 8297235 generic-x64
|
||||
|
||||
jdk/internal/vm/Continuation/Fuzz.java#default 8298058 generic-x64
|
||||
|
Loading…
x
Reference in New Issue
Block a user