Merge
authordnsimon
Tue, 23 Aug 2016 22:31:48 +0000
changeset 40879 1403ae60654c
parent 40878 5d87104b10d5 (current diff)
parent 40877 a7a6aada8883 (diff)
child 40880 74222f8c095e
Merge
--- 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:
--- 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();
--- 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;
--- 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;
--- 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)