# HG changeset patch # User dnsimon # Date 1471991508 0 # Node ID 1403ae60654cdc055f4d91c7084ad34272b6957d # Parent 5d87104b10d5e29b132fe09be130f2dd8b67b050# Parent a7a6aada8883dbaec8ddc6c94434d797e899e4aa Merge diff -r 5d87104b10d5 -r 1403ae60654c hotspot/src/share/vm/opto/compile.cpp --- a/hotspot/src/share/vm/opto/compile.cpp Tue Aug 23 22:24:31 2016 +0000 +++ b/hotspot/src/share/vm/opto/compile.cpp Tue Aug 23 22:31:48 2016 +0000 @@ -3159,45 +3159,65 @@ break; #endif - case Op_ModI: + case Op_ModI: { + Node* di = NULL; if (UseDivMod) { // Check if a%b and a/b both exist - Node* d = n->find_similar(Op_DivI); - if (d) { + di = n->find_similar(Op_DivI); + if (di) { // Replace them with a fused divmod if supported if (Matcher::has_match_rule(Op_DivModI)) { DivModINode* divmod = DivModINode::make(n); - d->subsume_by(divmod->div_proj(), this); + di->subsume_by(divmod->div_proj(), this); n->subsume_by(divmod->mod_proj(), this); } else { // replace a%b with a-((a/b)*b) - Node* mult = new MulINode(d, d->in(2)); - Node* sub = new SubINode(d->in(1), mult); + Node* mult = new MulINode(di, di->in(2)); + Node* sub = new SubINode(di->in(1), mult); n->subsume_by(sub, this); } } } + if (di == NULL) { + // Remove useless control edge in case of not mod-zero. + const Type *t = n->in(2)->bottom_type(); + const TypeInt *ti = t->is_int(); + if (n->in(0) && (ti->_hi < 0 || ti->_lo > 0)) { + n->set_req(0, NULL); + } + } break; - - case Op_ModL: + } + + case Op_ModL: { + Node* dl = NULL; if (UseDivMod) { // Check if a%b and a/b both exist - Node* d = n->find_similar(Op_DivL); - if (d) { + dl = n->find_similar(Op_DivL); + if (dl) { // Replace them with a fused divmod if supported if (Matcher::has_match_rule(Op_DivModL)) { DivModLNode* divmod = DivModLNode::make(n); - d->subsume_by(divmod->div_proj(), this); + dl->subsume_by(divmod->div_proj(), this); n->subsume_by(divmod->mod_proj(), this); } else { // replace a%b with a-((a/b)*b) - Node* mult = new MulLNode(d, d->in(2)); - Node* sub = new SubLNode(d->in(1), mult); + Node* mult = new MulLNode(dl, dl->in(2)); + Node* sub = new SubLNode(dl->in(1), mult); n->subsume_by(sub, this); } } } + if (dl == NULL) { + // Remove useless control edge in case of not mod-zero. + const Type *t = n->in(2)->bottom_type(); + const TypeLong *tl = t->is_long(); + if (n->in(0) && (tl->_hi < 0 || tl->_lo > 0)) { + n->set_req(0, NULL); + } + } break; + } case Op_LoadVector: case Op_StoreVector: diff -r 5d87104b10d5 -r 1403ae60654c hotspot/src/share/vm/opto/divnode.cpp --- a/hotspot/src/share/vm/opto/divnode.cpp Tue Aug 23 22:24:31 2016 +0000 +++ b/hotspot/src/share/vm/opto/divnode.cpp Tue Aug 23 22:31:48 2016 +0000 @@ -853,13 +853,6 @@ if( t == Type::TOP ) return NULL; const TypeInt *ti = t->is_int(); - // Check for useless control input - // Check for excluding mod-zero case - if( in(0) && (ti->_hi < 0 || ti->_lo > 0) ) { - set_req(0, NULL); // Yank control input - return this; - } - // See if we are MOD'ing by 2^k or 2^k-1. if( !ti->is_con() ) return NULL; jint con = ti->get_con(); @@ -1024,13 +1017,6 @@ if( t == Type::TOP ) return NULL; const TypeLong *tl = t->is_long(); - // Check for useless control input - // Check for excluding mod-zero case - if( in(0) && (tl->_hi < 0 || tl->_lo > 0) ) { - set_req(0, NULL); // Yank control input - return this; - } - // See if we are MOD'ing by 2^k or 2^k-1. if( !tl->is_con() ) return NULL; jlong con = tl->get_con(); diff -r 5d87104b10d5 -r 1403ae60654c hotspot/test/compiler/profiling/spectrapredefineclass/Launcher.java --- a/hotspot/test/compiler/profiling/spectrapredefineclass/Launcher.java Tue Aug 23 22:24:31 2016 +0000 +++ b/hotspot/test/compiler/profiling/spectrapredefineclass/Launcher.java Tue Aug 23 22:31:48 2016 +0000 @@ -40,7 +40,7 @@ package compiler.profiling.spectrapredefineclass; import jdk.test.lib.JDKToolLauncher; -import jdk.test.lib.OutputAnalyzer; +import jdk.test.lib.process.OutputAnalyzer; import java.io.File; import java.io.IOException; diff -r 5d87104b10d5 -r 1403ae60654c hotspot/test/compiler/profiling/spectrapredefineclass_classloaders/Launcher.java --- a/hotspot/test/compiler/profiling/spectrapredefineclass_classloaders/Launcher.java Tue Aug 23 22:24:31 2016 +0000 +++ b/hotspot/test/compiler/profiling/spectrapredefineclass_classloaders/Launcher.java Tue Aug 23 22:31:48 2016 +0000 @@ -43,7 +43,7 @@ package compiler.profiling.spectrapredefineclass_classloaders; import jdk.test.lib.JDKToolLauncher; -import jdk.test.lib.OutputAnalyzer; +import jdk.test.lib.process.OutputAnalyzer; import java.io.File; import java.io.IOException; diff -r 5d87104b10d5 -r 1403ae60654c hotspot/test/testlibrary/jittester/Makefile --- a/hotspot/test/testlibrary/jittester/Makefile Tue Aug 23 22:24:31 2016 +0000 +++ b/hotspot/test/testlibrary/jittester/Makefile Tue Aug 23 22:31:48 2016 +0000 @@ -70,17 +70,17 @@ DIST_JAR = $(DIST_DIR)/JITtester.jar SRC_FILES = $(shell find $(SRC_DIR) -name '*.java') -TESTLIBRARY_SRC_DIR = ../jdk/test/lib +TESTLIBRARY_SRC_DIR = ../../../../test/lib/jdk/test/lib TESTLIBRARY_SRC_FILES = $(TESTLIBRARY_SRC_DIR)/Asserts.java \ $(TESTLIBRARY_SRC_DIR)/JDKToolFinder.java \ $(TESTLIBRARY_SRC_DIR)/JDKToolLauncher.java \ - $(TESTLIBRARY_SRC_DIR)/OutputAnalyzer.java \ - $(TESTLIBRARY_SRC_DIR)/OutputBuffer.java \ - $(TESTLIBRARY_SRC_DIR)/Pair.java \ $(TESTLIBRARY_SRC_DIR)/Platform.java \ - $(TESTLIBRARY_SRC_DIR)/ProcessTools.java \ - $(TESTLIBRARY_SRC_DIR)/StreamPumper.java \ - $(TESTLIBRARY_SRC_DIR)/Utils.java + $(TESTLIBRARY_SRC_DIR)/Utils.java \ + $(TESTLIBRARY_SRC_DIR)/process/OutputAnalyzer.java \ + $(TESTLIBRARY_SRC_DIR)/process/OutputBuffer.java \ + $(TESTLIBRARY_SRC_DIR)/process/ProcessTools.java \ + $(TESTLIBRARY_SRC_DIR)/process/StreamPumper.java \ + $(TESTLIBRARY_SRC_DIR)/util/Pair.java .PHONY: cleantmp @@ -120,7 +120,6 @@ copytestlibrary: $(DRIVER_DIR) @cp -r src/jdk/test/lib/jittester/jtreg/*.java $(DRIVER_DIR) - @cp -r ../jdk $(TESTBASE_DIR)/ testgroup: $(TESTBASE_DIR) @echo 'jittester_all = \\' > $(TESTGROUP_FILE)