summaryrefslogtreecommitdiff
path: root/user/openjdk12/JDK-8245051.patch
diff options
context:
space:
mode:
Diffstat (limited to 'user/openjdk12/JDK-8245051.patch')
-rw-r--r--user/openjdk12/JDK-8245051.patch72
1 files changed, 72 insertions, 0 deletions
diff --git a/user/openjdk12/JDK-8245051.patch b/user/openjdk12/JDK-8245051.patch
new file mode 100644
index 000000000..c4d10fb88
--- /dev/null
+++ b/user/openjdk12/JDK-8245051.patch
@@ -0,0 +1,72 @@
+From 612c38cdc92a3e169fe83846920407d50263044a Mon Sep 17 00:00:00 2001
+From: Xin Liu <xliu@openjdk.org>
+Date: Wed, 20 May 2020 11:29:11 -0700
+Subject: [PATCH] 8245051: c1 is broken if it is compiled by gcc without
+ -fno-lifetime-dse
+
+Initialize BlockBegin block id in constructor rather than operator new
+
+Reviewed-by: kbarrett, thartmann
+---
+ src/hotspot/share/c1/c1_Instruction.hpp | 7 ++-----
+ src/hotspot/share/c1/c1_ValueMap.cpp | 1 +
+ 2 files changed, 3 insertions(+), 5 deletions(-)
+
+diff --git a/src/hotspot/share/c1/c1_Instruction.hpp b/src/hotspot/share/c1/c1_Instruction.hpp
+index 09644580f2a..9716d4d00ec 100644
+--- a/src/hotspot/share/c1/c1_Instruction.hpp
++++ b/src/hotspot/share/c1/c1_Instruction.hpp
+@@ -303,7 +303,6 @@ class Instruction: public CompilationResourceObj {
+ XHandlers* _exception_handlers; // Flat list of exception handlers covering this instruction
+
+ friend class UseCountComputer;
+- friend class BlockBegin;
+
+ void update_exception_state(ValueStack* state);
+
+@@ -349,7 +348,6 @@ class Instruction: public CompilationResourceObj {
+ void* operator new(size_t size) throw() {
+ Compilation* c = Compilation::current();
+ void* res = c->arena()->Amalloc(size);
+- ((Instruction*)res)->_id = c->get_next_id();
+ return res;
+ }
+
+@@ -410,7 +408,7 @@ class Instruction: public CompilationResourceObj {
+
+ // creation
+ Instruction(ValueType* type, ValueStack* state_before = NULL, bool type_is_constant = false)
+- :
++ : _id(Compilation::current()->get_next_id()),
+ #ifndef PRODUCT
+ _printable_bci(-99),
+ #endif
+@@ -1649,8 +1647,6 @@ LEAF(BlockBegin, StateSplit)
+ void* operator new(size_t size) throw() {
+ Compilation* c = Compilation::current();
+ void* res = c->arena()->Amalloc(size);
+- ((BlockBegin*)res)->_id = c->get_next_id();
+- ((BlockBegin*)res)->_block_id = c->get_next_block_id();
+ return res;
+ }
+
+@@ -1662,6 +1658,7 @@ LEAF(BlockBegin, StateSplit)
+ // creation
+ BlockBegin(int bci)
+ : StateSplit(illegalType)
++ , _block_id(Compilation::current()->get_next_block_id())
+ , _bci(bci)
+ , _depth_first_number(-1)
+ , _linear_scan_number(-1)
+diff --git a/src/hotspot/share/c1/c1_ValueMap.cpp b/src/hotspot/share/c1/c1_ValueMap.cpp
+index 88ee5fe72b7..016ea3c99c0 100644
+--- a/src/hotspot/share/c1/c1_ValueMap.cpp
++++ b/src/hotspot/share/c1/c1_ValueMap.cpp
+@@ -488,6 +488,7 @@ GlobalValueNumbering::GlobalValueNumbering(IR* ir)
+ : _compilation(ir->compilation())
+ , _current_map(NULL)
+ , _value_maps(ir->linear_scan_order()->length(), ir->linear_scan_order()->length(), NULL)
++ , _has_substitutions(false)
+ {
+ TRACE_VALUE_NUMBERING(tty->print_cr("****** start of global value numbering"));
+