Merge
authornever
Tue, 17 Jun 2008 11:32:42 -0700
changeset 760 061f70214421
parent 619 ba19e7bd22cf (current diff)
parent 759 b1a375646eb5 (diff)
child 761 312de898447e
Merge
--- a/hotspot/src/share/tools/MakeDeps/Database.java	Fri Jun 13 15:08:56 2008 -0700
+++ b/hotspot/src/share/tools/MakeDeps/Database.java	Tue Jun 17 11:32:42 2008 -0700
@@ -36,6 +36,7 @@
   private FileList outerFiles;
   private FileList indivIncludes;
   private FileList grandInclude; // the results for the grand include file
+  private HashMap<String,String> platformDepFiles;
   private long threshold;
   private int nOuterFiles;
   private int nPrecompiledFiles;
@@ -57,6 +58,7 @@
     outerFiles      = new FileList("outerFiles", plat);
     indivIncludes   = new FileList("IndivIncludes", plat);
     grandInclude    = new FileList(plat.getGIFileTemplate().nameOfList(), plat);
+    platformDepFiles = new HashMap<String,String>();
 
     threshold = t;
     nOuterFiles = 0;
@@ -209,6 +211,10 @@
               FileList p = allFiles.listForFile(includer);
               p.setPlatformDependentInclude(pdName.dirPreStemSuff());
 
+              // Record the implicit include of this file so that the
+              // dependencies for precompiled headers can mention it.
+              platformDepFiles.put(newIncluder, includer);
+
               // Add an implicit dependency on platform
               // specific file for the generic file
 
@@ -408,6 +414,12 @@
       for (Iterator iter = grandInclude.iterator(); iter.hasNext(); ) {
         FileList list = (FileList) iter.next();
         gd.println(list.getName() + " \\");
+        String platformDep = platformDepFiles.get(list.getName());
+        if (platformDep != null) {
+            // make sure changes to the platform dependent file will
+            // cause regeneration of the pch file.
+            gd.println(platformDep + " \\");
+        }
       }
       gd.println();
       gd.println();
--- a/hotspot/src/share/vm/opto/subnode.cpp	Fri Jun 13 15:08:56 2008 -0700
+++ b/hotspot/src/share/vm/opto/subnode.cpp	Tue Jun 17 11:32:42 2008 -0700
@@ -45,10 +45,13 @@
     return in(2)->in(2);
   }
 
-  // Convert "(X+Y) - Y" into X
+  // Convert "(X+Y) - Y" into X and "(X+Y) - X" into Y
   if( in(1)->Opcode() == Op_AddI ) {
     if( phase->eqv(in(1)->in(2),in(2)) )
       return in(1)->in(1);
+    if (phase->eqv(in(1)->in(1),in(2)))
+      return in(1)->in(2);
+
     // Also catch: "(X + Opaque2(Y)) - Y".  In this case, 'Y' is a loop-varying
     // trip counter and X is likely to be loop-invariant (that's how O2 Nodes
     // are originally used, although the optimizer sometimes jiggers things).