java-1.8.0-openjdk/hotspot-8157306.changeset
2016-07-25 17:52:04 +02:00

56 lines
2.2 KiB
Plaintext

# HG changeset patch
# User aph
# Date 1466704739 0
# Thu Jun 23 17:58:59 2016 +0000
# Node ID 89b3911c92aef18f2fd24ab4a31fbb47954462fa
# Parent 9febe12cbce4c6aa428a78f6a78906909e2954a4
8157306: Random infrequent null pointer exceptions in javac
Reviewed-by: kvn
diff --git openjdk/hotspot/src/share/vm/opto/block.cpp b/src/share/vm/opto/block.cpp
--- openjdk/hotspot/src/share/vm/opto/block.cpp
+++ openjdk/hotspot/src/share/vm/opto/block.cpp
@@ -1212,6 +1212,9 @@
if (j >= 1 && n->is_Mach() && n->as_Mach()->ideal_Opcode() == Op_CreateEx) {
assert(j == 1 || block->get_node(j-1)->is_Phi(), "CreateEx must be first instruction in block");
}
+ if (n->needs_anti_dependence_check()) {
+ verify_anti_dependences(block, n);
+ }
for (uint k = 0; k < n->req(); k++) {
Node *def = n->in(k);
if (def && def != n) {
diff --git a/src/share/vm/opto/block.hpp b/src/share/vm/opto/block.hpp
--- openjdk/hotspot/src/share/vm/opto/block.hpp
+++ openjdk/hotspot/src/share/vm/opto/block.hpp
@@ -481,9 +481,9 @@
MachNode* _goto;
Block* insert_anti_dependences(Block* LCA, Node* load, bool verify = false);
- void verify_anti_dependences(Block* LCA, Node* load) {
+ void verify_anti_dependences(Block* LCA, Node* load) const {
assert(LCA == get_block_for_node(load), "should already be scheduled");
- insert_anti_dependences(LCA, load, true);
+ const_cast<PhaseCFG*>(this)->insert_anti_dependences(LCA, load, true);
}
bool move_to_next(Block* bx, uint b_index);
diff --git a/src/share/vm/opto/lcm.cpp b/src/share/vm/opto/lcm.cpp
--- openjdk/hotspot/src/share/vm/opto/lcm.cpp
+++ openjdk/hotspot/src/share/vm/opto/lcm.cpp
@@ -1293,11 +1293,12 @@
Block *sb = block->_succs[i];
// Clone the entire area; ignoring the edge fixup for now.
for( uint j = end; j > beg; j-- ) {
- // It is safe here to clone a node with anti_dependence
- // since clones dominate on each path.
Node *clone = block->get_node(j-1)->clone();
sb->insert_node(clone, 1);
map_node_to_block(clone, sb);
+ if (clone->needs_anti_dependence_check()) {
+ insert_anti_dependences(sb, clone);
+ }
}
}