changeset 19698:32b4b06b6fac

Merge with 5d2309d32463f4c857d55e3233e8366f7b4d6feb
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Wed, 04 Mar 2015 16:38:36 -0800
parents 191c55f08ed2 (current diff) 5d2309d32463 (diff)
children ef30b2318658 8f21e30a29c2
files
diffstat 6 files changed, 90 insertions(+), 30 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ValueUtil.java	Wed Mar 04 16:36:27 2015 -0800
+++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/ValueUtil.java	Wed Mar 04 16:38:36 2015 -0800
@@ -33,7 +33,7 @@
 
     public static boolean isIllegal(Value value) {
         assert value != null;
-        return value.equals(Value.ILLEGAL);
+        return Value.ILLEGAL.equals(value);
     }
 
     public static boolean isLegal(Value value) {
--- a/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java	Wed Mar 04 16:36:27 2015 -0800
+++ b/graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/Value.java	Wed Mar 04 16:38:36 2015 -0800
@@ -34,6 +34,11 @@
         public String toString() {
             return "-";
         }
+
+        @Override
+        public boolean equals(Object other) {
+            return this == other;
+        }
     };
 
     LIRKind getLIRKind();
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Wed Mar 04 16:36:27 2015 -0800
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/GraalCompiler.java	Wed Mar 04 16:38:36 2015 -0800
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2009, 2015, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -33,6 +33,7 @@
 import com.oracle.graal.api.code.CompilationResult.DataPatch;
 import com.oracle.graal.api.meta.*;
 import com.oracle.graal.api.meta.ProfilingInfo.TriState;
+import com.oracle.graal.compiler.LIRGenerationPhase.LIRGenerationContext;
 import com.oracle.graal.compiler.common.alloc.*;
 import com.oracle.graal.compiler.common.cfg.*;
 import com.oracle.graal.compiler.target.*;
@@ -301,20 +302,6 @@
         }
     }
 
-    private static void emitBlock(NodeLIRBuilderTool nodeLirGen, LIRGenerationResult lirGenRes, Block b, StructuredGraph graph, BlockMap<List<ValueNode>> blockMap) {
-        if (lirGenRes.getLIR().getLIRforBlock(b) == null) {
-            for (Block pred : b.getPredecessors()) {
-                if (!b.isLoopHeader() || !pred.isLoopEnd()) {
-                    emitBlock(nodeLirGen, lirGenRes, pred, graph, blockMap);
-                }
-            }
-            nodeLirGen.doBlock(b, graph, blockMap);
-        }
-    }
-
-    private static final DebugTimer lirGenTimeTracker = Debug.timer("LIRGenTime");
-    private static final DebugMemUseTracker lirGenMemUseTracker = Debug.memUseTracker("LIRGenMemUse");
-
     public static LIRGenerationResult emitLIR(Backend backend, TargetDescription target, SchedulePhase schedule, StructuredGraph graph, Object stub, CallingConvention cc,
                     RegisterConfig registerConfig, LIRSuites lirSuites) {
         try (Scope ds = Debug.scope("EmitLIR"); DebugCloseable a = EmitLIR.start()) {
@@ -340,18 +327,11 @@
             LIRGeneratorTool lirGen = backend.newLIRGenerator(cc, lirGenRes);
             NodeLIRBuilderTool nodeLirGen = backend.newNodeLIRBuilder(graph, lirGen);
 
-            try (Scope s = Debug.scope("LIRGen", lir, lirGen); AutoCloseable c = lirGenMemUseTracker.start(); AutoCloseable t = lirGenTimeTracker.start()) {
-                for (Block b : linearScanOrder) {
-                    emitBlock(nodeLirGen, lirGenRes, b, graph, schedule.getBlockToNodesMap());
-                }
-                lirGen.beforeRegisterAllocation();
+            // LIR generation
+            LIRGenerationContext context = new LIRGenerationContext(lirGen, nodeLirGen, graph, schedule);
+            new LIRGenerationPhase().apply(target, lirGenRes, codeEmittingOrder, linearScanOrder, context);
 
-                Debug.dump(lir, "After LIR generation");
-            } catch (Throwable e) {
-                throw Debug.handle(e);
-            }
-
-            try (Scope s = Debug.scope("LIRStages", nodeLirGen)) {
+            try (Scope s = Debug.scope("LIRStages", nodeLirGen, lir)) {
                 return emitLowLevel(target, codeEmittingOrder, linearScanOrder, lirGenRes, lirGen, lirSuites);
             } catch (Throwable e) {
                 throw Debug.handle(e);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/LIRGenerationPhase.java	Wed Mar 04 16:38:36 2015 -0800
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2015, 2015, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+package com.oracle.graal.compiler;
+
+import java.util.*;
+
+import com.oracle.graal.api.code.*;
+import com.oracle.graal.compiler.common.cfg.*;
+import com.oracle.graal.lir.gen.*;
+import com.oracle.graal.lir.phases.*;
+import com.oracle.graal.nodes.*;
+import com.oracle.graal.nodes.cfg.*;
+import com.oracle.graal.nodes.spi.*;
+import com.oracle.graal.phases.schedule.*;
+
+public class LIRGenerationPhase extends LIRPhase<LIRGenerationPhase.LIRGenerationContext> {
+
+    public static final class LIRGenerationContext {
+        private final NodeLIRBuilderTool nodeLirBuilder;
+        private final LIRGeneratorTool lirGen;
+        private final StructuredGraph graph;
+        private final SchedulePhase schedule;
+
+        public LIRGenerationContext(LIRGeneratorTool lirGen, NodeLIRBuilderTool nodeLirBuilder, StructuredGraph graph, SchedulePhase schedule) {
+            this.nodeLirBuilder = nodeLirBuilder;
+            this.lirGen = lirGen;
+            this.graph = graph;
+            this.schedule = schedule;
+        }
+    }
+
+    @Override
+    protected final <B extends AbstractBlockBase<B>> void run(TargetDescription target, LIRGenerationResult lirGenRes, List<B> codeEmittingOrder, List<B> linearScanOrder,
+                    LIRGenerationPhase.LIRGenerationContext context) {
+        NodeLIRBuilderTool nodeLirBuilder = context.nodeLirBuilder;
+        StructuredGraph graph = context.graph;
+        SchedulePhase schedule = context.schedule;
+        for (B b : linearScanOrder) {
+            emitBlock(nodeLirBuilder, lirGenRes, (Block) b, graph, schedule.getBlockToNodesMap());
+        }
+        context.lirGen.beforeRegisterAllocation();
+    }
+
+    private static void emitBlock(NodeLIRBuilderTool nodeLirGen, LIRGenerationResult lirGenRes, Block b, StructuredGraph graph, BlockMap<List<ValueNode>> blockMap) {
+        if (lirGenRes.getLIR().getLIRforBlock(b) == null) {
+            for (Block pred : b.getPredecessors()) {
+                if (!b.isLoopHeader() || !pred.isLoopEnd()) {
+                    emitBlock(nodeLirGen, lirGenRes, pred, graph, blockMap);
+                }
+            }
+            nodeLirGen.doBlock(b, graph, blockMap);
+        }
+    }
+
+}
--- a/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/internal/MemUseTrackerImpl.java	Wed Mar 04 16:36:27 2015 -0800
+++ b/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/internal/MemUseTrackerImpl.java	Wed Mar 04 16:38:36 2015 -0800
@@ -49,7 +49,7 @@
     private static final ThreadLocal<CloseableCounterImpl> currentTracker = new ThreadLocal<>();
 
     public MemUseTrackerImpl(String name) {
-        super(name, false, new DebugValue(name + "_Flat", true) {
+        super(name, true, new DebugValue(name + "_Flat", true) {
 
             @Override
             public String toString(long value) {
--- a/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java	Wed Mar 04 16:36:27 2015 -0800
+++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/alloc/lsra/LinearScan.java	Wed Mar 04 16:38:36 2015 -0800
@@ -1811,8 +1811,8 @@
         }
     }
 
-    private DebugMetric betterSpillPos = Debug.metric("BetterSpillPosition");
-    private DebugMetric betterSpillPosWithLowerProbability = Debug.metric("BetterSpillPositionWithLowerProbability");
+    private static final DebugMetric betterSpillPos = Debug.metric("BetterSpillPosition");
+    private static final DebugMetric betterSpillPosWithLowerProbability = Debug.metric("BetterSpillPositionWithLowerProbability");
 
     private void optimizeSpillPosition() {
         LIRInsertionBuffer[] insertionBuffers = new LIRInsertionBuffer[ir.linearScanOrder().size()];