changeset 15408:7a5c34543493

Merge.
author Doug Simon <doug.simon@oracle.com>
date Mon, 28 Apr 2014 16:35:06 +0200
parents 2ca44250eee3 (diff) 5dcf0ae606f3 (current diff)
children 009247069a62
files mxtool/mx.py
diffstat 21 files changed, 110 insertions(+), 207 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/stack/StackIntrospection.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/stack/StackIntrospection.java	Mon Apr 28 16:35:06 2014 +0200
@@ -27,7 +27,7 @@
 public interface StackIntrospection {
 
     /**
-     * Accesses the current stack, returning a collection of {@long InspectedFrame}s that can be
+     * Accesses the current stack, returning a collection of {@link InspectedFrame}s that can be
      * used to inspect the stack frames' contents.
      *
      * @param initialMethods if this is non-{@code null}, then the stack trace will start at these
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IntegerStamp.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/IntegerStamp.java	Mon Apr 28 16:35:06 2014 +0200
@@ -29,12 +29,11 @@
 import com.oracle.graal.compiler.common.spi.*;
 
 /**
- * Describes the possible values of a {@link ValueNode} that produces an int or long result.
+ * Describes the possible values of a node that produces an int or long result.
  *
  * The description consists of (inclusive) lower and upper bounds and up (may be set) and down
  * (always set) bit-masks.
  */
-@SuppressWarnings("javadoc")
 public class IntegerStamp extends PrimitiveStamp {
 
     private final long lowerBound;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/PrimitiveStamp.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/PrimitiveStamp.java	Mon Apr 28 16:35:06 2014 +0200
@@ -23,9 +23,8 @@
 package com.oracle.graal.compiler.common.type;
 
 /**
- * Describes the possible values of a {@link ValueNode} that produces a primitive value as result.
+ * Type describing primitive values.
  */
-@SuppressWarnings("javadoc")
 public abstract class PrimitiveStamp extends Stamp {
 
     private final int bits;
--- a/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/Stamp.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.compiler.common/src/com/oracle/graal/compiler/common/type/Stamp.java	Mon Apr 28 16:35:06 2014 +0200
@@ -26,7 +26,7 @@
 import com.oracle.graal.compiler.common.spi.*;
 
 /**
- * A stamp is the basis for a type system over the nodes in a graph.
+ * A stamp is the basis for a type system.
  */
 public abstract class Stamp {
 
@@ -57,13 +57,12 @@
     public abstract PlatformKind getPlatformKind(PlatformKindTool tool);
 
     /**
-     * Returns the union of this stamp and the given stamp. Typically used to create stamps for
-     * {@link ValuePhiNode}s.
+     * Returns the union of this stamp and the given stamp. Typically used to create stamps for phi
+     * nodes.
      *
      * @param other The stamp that will enlarge this stamp.
      * @return The union of this stamp and the given stamp.
      */
-    @SuppressWarnings("javadoc")
     public abstract Stamp meet(Stamp other);
 
     /**
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchGenerator.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/match/MatchGenerator.java	Mon Apr 28 16:35:06 2014 +0200
@@ -26,10 +26,11 @@
 
 /**
  * Code generator for complex match patterns.
- *
- * @returns null if the match can't be generated or a {@link ComplexMatchResult} that can be
- *          evaluated during LIR generation to produce the final LIR value.
  */
 public interface MatchGenerator {
+    /**
+     * @returns null if the match can't be generated or a {@link ComplexMatchResult} that can be
+     *          evaluated during LIR generation to produce the final LIR value.
+     */
     ComplexMatchResult match(NodeLIRBuilder gen);
 }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/LoweringPhase.java	Mon Apr 28 16:35:06 2014 +0200
@@ -240,14 +240,20 @@
 
         private final PhaseContext context;
         private final SchedulePhase schedule;
+        private final int iteration;
 
         private Round(int iteration, PhaseContext context) {
-            super("LoweringIteration" + iteration);
+            this.iteration = iteration;
             this.context = context;
             this.schedule = new SchedulePhase();
         }
 
         @Override
+        protected CharSequence createName() {
+            return "LoweringIteration" + iteration;
+        }
+
+        @Override
         public void run(StructuredGraph graph) {
             schedule.apply(graph, false);
             processBlock(schedule.getCFG().getStartBlock(), graph.createNodeBitMap(), null);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/BaseReduction.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/BaseReduction.java	Mon Apr 28 16:35:06 2014 +0200
@@ -49,7 +49,7 @@
  * This class makes available little more than a few fields and a few utility methods used
  * throughout the remaining components making up control-flow sensitive reductions.
  * </p>
- * */
+ */
 public abstract class BaseReduction extends PostOrderNodeIterator<State> {
 
     protected static final DebugMetric metricCheckCastRemoved = Debug.metric("CheckCastRemoved");
@@ -70,7 +70,7 @@
      *
      * @see State#impossiblePath()
      * @see com.oracle.graal.phases.common.cfs.FlowSensitiveReduction#finished()
-     * */
+     */
     public static class PostponedDeopt {
 
         private final boolean goesBeforeFixed;
@@ -105,7 +105,7 @@
          * argument, will be done once we're done traversing the graph.
          *
          * @see #finished()
-         * */
+         */
         void addDeoptBefore(FixedWithNextNode fixed, DeoptimizationReason deoptReason) {
             add(new PostponedDeopt(true, fixed, deoptReason));
         }
@@ -115,7 +115,7 @@
          * argument, will be done once we're done traversing the graph.
          *
          * @see #finished()
-         * */
+         */
         void addDeoptAfter(FixedWithNextNode fixed, DeoptimizationReason deoptReason) {
             add(new PostponedDeopt(false, fixed, deoptReason));
         }
@@ -131,7 +131,7 @@
      * Doing so, in turn, requires this subclass of
      * {@link com.oracle.graal.graph.spi.CanonicalizerTool}.
      * </p>
-     * */
+     */
     public final class Tool implements CanonicalizerTool {
 
         private final PhaseContext context;
@@ -159,7 +159,7 @@
          * Postpone
          * {@link com.oracle.graal.nodes.util.GraphUtil#tryKillUnused(com.oracle.graal.graph.Node)}
          * until {@link FlowSensitiveReduction#finished()} for the reasons covered there.
-         * */
+         */
         @Override
         public void removeIfUnused(Node node) {
             // GraphUtil.tryKillUnused(node);
@@ -207,7 +207,7 @@
      * reported as such.
      * </p>
      *
-     * */
+     */
     protected static boolean precisionLoss(ValueNode input, ValueNode output) {
         ObjectStamp inputStamp = (ObjectStamp) input.stamp();
         ObjectStamp outputStamp = (ObjectStamp) output.stamp();
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CastCheckExtractor.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CastCheckExtractor.java	Mon Apr 28 16:35:06 2014 +0200
@@ -31,7 +31,7 @@
 
 /**
  * @see #extract(com.oracle.graal.nodes.LogicNode)
- * */
+ */
 class CastCheckExtractor {
 
     public final ResolvedJavaType type;
@@ -57,7 +57,7 @@
     /**
      * This method detects whether the argument realizes the CheckCast pattern. If so, distills and
      * returns the essentials of such check, otherwise returns null.
-     * */
+     */
     static CastCheckExtractor extract(LogicNode cond) {
         if (!(cond instanceof ShortCircuitOrNode)) {
             return null;
@@ -76,7 +76,7 @@
 
     /**
      * Porcelain method.
-     * */
+     */
     public static boolean isInstanceOfCheckOn(LogicNode cond, ValueNode subject) {
         if (!(cond instanceof InstanceOfNode)) {
             return false;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/CheckCastReduction.java	Mon Apr 28 16:35:06 2014 +0200
@@ -42,7 +42,7 @@
  * </p>
  *
  * @see #visitCheckCastNode(com.oracle.graal.nodes.java.CheckCastNode)
- * */
+ */
 public abstract class CheckCastReduction extends GuardingPiReduction {
 
     public CheckCastReduction(FixedNode start, State initialState, PhaseContext context) {
@@ -67,7 +67,7 @@
      * <p>
      * Precondition: the inputs (ie, object) hasn't been deverbosified yet.
      * </p>
-     * */
+     */
     protected final void visitCheckCastNode(CheckCastNode checkCast) {
 
         /*
@@ -139,7 +139,7 @@
      * @see #lowerCheckCastAnchorFriendlyWay(com.oracle.graal.nodes.java.CheckCastNode,
      *      com.oracle.graal.nodes.ValueNode)
      *
-     * */
+     */
     private void visitCheckCastNodeLackingWitness(CheckCastNode checkCast) {
         final ValueNode subject = checkCast.object();
         final ResolvedJavaType toType = checkCast.type();
@@ -170,7 +170,7 @@
      *
      * @see #visitCheckCastNode(com.oracle.graal.nodes.java.CheckCastNode)
      *
-     * */
+     */
     public void lowerCheckCastAnchorFriendlyWay(CheckCastNode checkCast, ValueNode subject) {
         ValueNode originalCheckCastObject = checkCast.object();
 
@@ -268,7 +268,7 @@
 
     /**
      * Porcelain method.
-     * */
+     */
     public static boolean isTypeOfWitnessBetter(Witness w, ObjectStamp stamp) {
         if (w == null) {
             return false;
@@ -281,7 +281,7 @@
      * Please note in this method "subject" refers to the downcasted input to the checkCast.
      *
      * @see #visitCheckCastNode(com.oracle.graal.nodes.java.CheckCastNode)
-     * */
+     */
     private void visitCheckCastNodeWithWitness(CheckCastNode checkCast) {
 
         final ResolvedJavaType toType = checkCast.type();
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/EquationalReasoner.java	Mon Apr 28 16:35:06 2014 +0200
@@ -111,7 +111,7 @@
      * {@link #added} grows during a run of
      * {@link com.oracle.graal.phases.common.cfs.FlowSensitiveReductionPhase
      * FlowSensitiveReductionPhase}, and doesn't survive across runs.
-     * */
+     */
     public void forceState(State s) {
         state = s;
         substs.clear();
@@ -285,7 +285,7 @@
      * Usage: must be called only from {@link #deverbosify(com.oracle.graal.graph.Node)
      * deverbosify(Node)}.</li>
      * </ul>
-     * */
+     */
     public Node deverbosifyFloatingNode(final FloatingNode n) {
 
         assert n != null : "Should have been caught in deverbosify()";
@@ -360,7 +360,7 @@
      * pre-image and image differ.
      *
      * @return the image of the substitution (ie, the second argument) unmodified.
-     * */
+     */
     private <M extends ValueNode> M rememberSubstitution(ValueNode from, M to) {
         assert from != null && to != null;
         if (from == to) {
@@ -597,7 +597,7 @@
      * {@link com.oracle.graal.phases.common.cfs.FlowSensitiveReductionPhase} that assert no
      * type-precision gets lost. Thus the need to fix-up on our own, as done here.
      * </p>
-     * */
+     */
     private static void fixupTypeProfileStamp(ValueNode object) {
         if (!(object instanceof TypeProfileProxyNode)) {
             return;
@@ -625,7 +625,7 @@
      * <p>
      * The resulting node might not have been in the graph already.
      * </p>
-     * */
+     */
     private PiNode wrapInPiNode(ValueNode payload, GuardingNode anchor, ObjectStamp newStamp, boolean remember) {
         try (Debug.Scope s = Debug.scope("Downcast", payload)) {
             assert payload != anchor : payload.graph().toString();
@@ -782,7 +782,7 @@
      * </p>
      *
      * @see #downcastedValueProxy
-     * */
+     */
     public ValueNode downcastedGuardingPiNode(GuardingPiNode envelope, Witness w) {
         assert envelope != w.guard().asNode() : "The stamp of " + envelope + " would lead to downcasting with that very same GuardingPiNode as guard.";
         return downcastedUtil(envelope, w);
@@ -814,7 +814,7 @@
      * </p>
      *
      * @see #downcastedValueProxy
-     * */
+     */
     private ValueNode downcastedPiNodeOrPiArrayNode(PiNode envelope, Witness w) {
         return downcastedUtil(envelope, w);
     }
@@ -830,7 +830,7 @@
      * </p>
      *
      * @see #downcastedValueProxy
-     * */
+     */
     private ValueNode downcastedTypeProfileProxyNode(TypeProfileProxyNode envelope) {
         ValueNode payload = envelope.getOriginalNode();
         ValueNode d = downcasted(payload);
@@ -859,7 +859,7 @@
      * Re-wrap the checkCast in a type-refining {@link com.oracle.graal.nodes.PiNode PiNode} only if
      * the downcasted scrutinee does not conform to the checkCast's target-type.
      * </p>
-     * */
+     */
     private ValueNode downcastedCheckCastNode(CheckCastNode checkCast, Witness w) {
 
         final ResolvedJavaType toType = checkCast.type();
@@ -899,7 +899,7 @@
      * to hold an updated stamp) provided the argument's stamp can be strictly refined, and returns
      * it.
      * </p>
-     * */
+     */
     private ValueNode downcastedUtil(ValueNode subject, Witness w) {
 
         ObjectStamp originalStamp = (ObjectStamp) subject.stamp();
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FixedGuardReduction.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FixedGuardReduction.java	Mon Apr 28 16:35:06 2014 +0200
@@ -35,7 +35,7 @@
  * </p>
  * 
  * @see #visitFixedGuardNode(com.oracle.graal.nodes.FixedGuardNode)
- * */
+ */
 public abstract class FixedGuardReduction extends CheckCastReduction {
 
     public FixedGuardReduction(FixedNode start, State initialState, PhaseContext context) {
@@ -190,7 +190,7 @@
 
     /**
      * Porcelain method.
-     * */
+     */
     private void markFixedGuardNodeAlwaysFails(FixedGuardNode f) {
         metricFixedGuardNodeRemoved.increment();
         state.impossiblePath();
@@ -204,7 +204,7 @@
      * <p>
      * The `replacement` guard must be such that it implies the `old` guard.
      * </p>
-     * */
+     */
     private void removeFixedGuardNode(FixedGuardNode old, GuardingNode replacement) {
         if (replacement == null) {
             return;
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReduction.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReduction.java	Mon Apr 28 16:35:06 2014 +0200
@@ -61,7 +61,7 @@
  * @see com.oracle.graal.phases.common.cfs.GuardingPiReduction
  * @see com.oracle.graal.phases.common.cfs.FixedGuardReduction
  *
- * */
+ */
 public class FlowSensitiveReduction extends FixedGuardReduction {
 
     public FlowSensitiveReduction(FixedNode start, State initialState, PhaseContext context) {
@@ -111,7 +111,7 @@
      * Checking if they aren't in use, proceeding to remove them in that case.
      * </p>
      *
-     * */
+     */
     @Override
     public void finished() {
         if (!postponedDeopts.isEmpty()) {
@@ -177,7 +177,7 @@
      * TODO When tracking integer-stamps, the state at each successor of a TypeSwitchNode should
      * track an integer-stamp for the LoadHubNode (meet over the constants leading to that
      * successor). However, are LoadHubNode-s shared frequently enough?
-     * */
+     */
     private void registerTypeSwitchNode(TypeSwitchNode typeSwitch, BeginNode begin) {
         if (typeSwitch.value() instanceof LoadHubNode) {
             LoadHubNode loadHub = (LoadHubNode) typeSwitch.value();
@@ -252,7 +252,7 @@
      * </p>
      *
      * @return whether any reduction was performed on the inputs of the arguments.
-     * */
+     */
     public boolean deverbosifyInputsInPlace(ValueNode parent) {
         boolean changed = false;
         for (ValueNode i : FlowUtil.distinctValueAndConditionInputs(parent)) {
@@ -276,7 +276,7 @@
      * @return the original parent if no updated took place, a copy-on-write version of it
      *         otherwise.
      *
-     * */
+     */
     private MethodCallTargetNode deverbosifyInputsCopyOnWrite(MethodCallTargetNode parent) {
         MethodCallTargetNode changed = null;
         for (ValueNode i : FlowUtil.distinctValueAndConditionInputs(parent)) {
@@ -442,7 +442,7 @@
      * <p>
      * Precondition: the input (ie, object) hasn't been deverbosified yet.
      * </p>
-     * */
+     */
     private void visitNullCheckNode(NullCheckNode ncn) {
         ValueNode object = ncn.getObject();
         if (state.isNull(object)) {
@@ -471,7 +471,7 @@
      * <p>
      * Precondition: inputs haven't been deverbosified yet.
      * </p>
-     * */
+     */
     private void visitAbstractEndNode(AbstractEndNode endNode) {
         MergeNode merge = endNode.merge();
         for (PhiNode phi : merge.phis()) {
@@ -498,7 +498,7 @@
      * <p>
      * Precondition: inputs haven't been deverbosified yet.
      * </p>
-     * */
+     */
     private void visitInvoke(Invoke invoke) {
         if (invoke.asNode().stamp() instanceof IllegalStamp) {
             return; // just to be safe
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowUtil.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowUtil.java	Mon Apr 28 16:35:06 2014 +0200
@@ -61,7 +61,7 @@
 
     /**
      * @return whether the first argument is strictly more precise than the second.
-     * */
+     */
     public static boolean isMorePrecise(ResolvedJavaType a, ResolvedJavaType b) {
         if (a == null) {
             return false;
@@ -132,7 +132,7 @@
      * An IllegalStamp should never happen. In contrast, !isLegal() values could happen due to dead
      * code not yet removed, or upon some non-sideeffecting instructions floating out of a dead
      * branch.
-     * */
+     */
     public static boolean isLegalObjectStamp(Stamp s) {
         return isObjectStamp(s) && s.isLegal();
     }
@@ -162,7 +162,7 @@
      * a score of 1. In all other cases (non-comparable, or supertype) the score is -1.
      *
      * @return whether the first argument is strictly more precise than the second.
-     * */
+     */
     public static boolean isMorePrecise(ObjectStamp a, ObjectStamp b) {
         int d0 = MINUS(a.alwaysNull(), b.alwaysNull());
         if (d0 == -1) {
@@ -234,7 +234,7 @@
     /**
      * Returns (preserving order) the ValueNodes without duplicates found among the argument's
      * direct inputs.
-     * */
+     */
     @SuppressWarnings("unchecked")
     public static List<ValueNode> distinctValueAndConditionInputs(Node n) {
         ArrayList<ValueNode> result = null;
@@ -275,7 +275,7 @@
      * Start situation: the parent node has <code>oldInput</code> among its (direct) inputs. After
      * this method has run, all such occurrences have been replaced with <code>newInput</code>. In
      * case that makes <code>oldInput</code> disconnected, it is removed from the graph.
-     * */
+     */
     public static void replaceInPlace(Node parent, Node oldInput, Node newInput) {
         assert parent != null;
         assert parent.inputs().contains(oldInput);
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/GuardingPiReduction.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/GuardingPiReduction.java	Mon Apr 28 16:35:06 2014 +0200
@@ -39,7 +39,7 @@
  * </p>
  * 
  * @see #visitGuardingPiNode(com.oracle.graal.nodes.GuardingPiNode)
- * */
+ */
 public abstract class GuardingPiReduction extends BaseReduction {
 
     public GuardingPiReduction(FixedNode start, State initialState, PhaseContext context) {
@@ -75,7 +75,7 @@
      * Precondition: the condition hasn't been deverbosified yet.
      * </p>
      * 
-     * */
+     */
     protected final void visitGuardingPiNode(GuardingPiNode envelope) {
 
         if (!FlowUtil.hasLegalObjectStamp(envelope)) {
@@ -181,7 +181,7 @@
      * 
      * @see #visitGuardingPiNode(com.oracle.graal.nodes.GuardingPiNode)
      * 
-     * */
+     */
     private boolean tryRemoveGuardingPiNode(GuardingPiNode envelope) {
 
         LogicNode cond = envelope.condition();
@@ -251,7 +251,7 @@
      * non-null.
      * 
      * @see #tryRemoveGuardingPiNode(com.oracle.graal.nodes.GuardingPiNode)
-     * */
+     */
     private boolean tryRemoveGuardingPiNodeNonNullCond(GuardingPiNode envelope) {
 
         ValueNode payload = envelope.object();
@@ -306,7 +306,7 @@
      * 
      * @see #tryRemoveGuardingPiNode(com.oracle.graal.nodes.GuardingPiNode)
      * 
-     * */
+     */
     private boolean tryRemoveGuardingPiNodeCheckCastCond(GuardingPiNode envelope, ResolvedJavaType toType) {
         assert toType != null;
         ValueNode payload = envelope.object();
@@ -353,7 +353,7 @@
 
     /**
      * Porcelain method.
-     * */
+     */
     private void removeGuardingPiNode(GuardingPiNode envelope, ValueNode replacement) {
         assert !precisionLoss(envelope, replacement);
         metricGuardingPiNodeRemoved.increment();
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java	Mon Apr 28 16:35:06 2014 +0200
@@ -80,7 +80,7 @@
      * </ul>
      * </p>
      *
-     * */
+     */
     int versionNr = 0;
 
     boolean isUnreachable = false;
@@ -91,7 +91,7 @@
      * detect an "impossible path" could be shaved off.
      *
      * @see com.oracle.graal.phases.common.cfs.BaseReduction.PostponedDeopt
-     * */
+     */
     void impossiblePath() {
         isUnreachable = true;
         metricImpossiblePathDetected.increment();
@@ -115,7 +115,7 @@
      * {@link EquationalReasoner#downcasted(com.oracle.graal.nodes.ValueNode) downcasted()}
      * </p>
      *
-     * */
+     */
     private IdentityHashMap<ValueNode, Witness> typeRefinements;
 
     IdentityHashMap<ValueNode, GuardingNode> knownNull;
@@ -143,7 +143,7 @@
 
     /**
      * @return A new list containing only those states that are reachable.
-     * */
+     */
     private static ArrayList<State> reachableStates(List<State> states) {
         ArrayList<State> result = new ArrayList<>(states);
         Iterator<State> iter = result.iterator();
@@ -346,7 +346,7 @@
     }
 
     /**
-     * @retun null if no type-witness available for the argument, the witness otherwise.
+     * @return null if no type-witness available for the argument, the witness otherwise.
      */
     public Witness typeInfo(ValueNode object) {
         assert FlowUtil.hasLegalObjectStamp(object);
@@ -354,7 +354,7 @@
     }
 
     /**
-     * @retun true iff the argument is known to stand for null.
+     * @return true iff the argument is known to stand for null.
      */
     public boolean isNull(ValueNode object) {
         assert FlowUtil.hasLegalObjectStamp(object);
@@ -377,7 +377,7 @@
      * is-non-null set.
      * </p>
      *
-     * @retun true iff the argument is known to stand for non-null.
+     * @return true iff the argument is known to stand for non-null.
      */
     public boolean isNonNull(ValueNode object) {
         assert FlowUtil.hasLegalObjectStamp(object);
@@ -389,7 +389,7 @@
     }
 
     /**
-     * @retun true iff the argument is known to stand for an object conforming to the given type.
+     * @return true iff the argument is known to stand for an object conforming to the given type.
      */
     public boolean knownToConform(ValueNode object, ResolvedJavaType to) {
         assert FlowUtil.hasLegalObjectStamp(object);
@@ -411,8 +411,8 @@
     }
 
     /**
-     * @retun true iff the argument is known to stand for an object that definitely does not conform
-     *        to the given type.
+     * @return true iff the argument is known to stand for an object that definitely does not
+     *         conform to the given type.
      */
     public boolean knownNotToConform(ValueNode object, ResolvedJavaType to) {
         assert FlowUtil.hasLegalObjectStamp(object);
@@ -454,7 +454,7 @@
      *    final: exact non-interface reference-type
      *    non-f: non-exact non-interface reference-type
      *
-     * @retun true iff the first argument is known not to conform to the second argument.
+     * @return true iff the first argument is known not to conform to the second argument.
      */
     // @formatter:on
     public static boolean knownNotToConform(ResolvedJavaType a, ResolvedJavaType b) {
@@ -592,7 +592,7 @@
      * case the state should be marked unreachable), the caller must take care of that.
      * </p>
      *
-     * */
+     */
     private void addFactPrimordial(LogicNode condition, IdentityHashMap<LogicNode, GuardingNode> to, GuardingNode anchor) {
         assert condition != null;
         if (!to.containsKey(condition)) {
@@ -608,7 +608,7 @@
      * <li>track set-representative for equality classes determined by (chained) IntegerTestNode</li>
      * </ul>
      *
-     * */
+     */
     public void addFact(boolean isTrue, LogicNode condition, GuardingNode anchor) {
         assert anchor != null;
         assert !isUnreachable;
@@ -781,7 +781,7 @@
     /**
      *
      * @return true iff `value` may lose dependency not covered by `anchor`.
-     * */
+     */
     public static boolean isDependencyTainted(ValueNode value, GuardingNode anchor) {
         if (value instanceof ValueProxy) {
             if (value instanceof GuardedNode) {
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/Witness.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/Witness.java	Mon Apr 28 16:35:06 2014 +0200
@@ -118,7 +118,7 @@
 
     /**
      * Counterpart to {@link #asStamp()}
-     * */
+     */
     public Witness(ObjectStamp stamp, GuardingNode anchor) {
         assert stamp.isLegal();
         assert anchor != null;
@@ -381,7 +381,7 @@
     /**
      * Shallow cloning is enough because what's reachable from {@link Witness} is primitive or used
      * read-only when merging states.
-     * */
+     */
     @Override
     public Witness clone() {
         return new Witness(this);
@@ -389,14 +389,14 @@
 
     /**
      * @return null for a clueless method, non-null otherwise.
-     * */
+     */
     GuardingNode guard() {
         return gn;
     }
 
     /**
      * Merges another state into this one, by mutating this object, the other is left as is.
-     * */
+     */
     public void merge(Witness that, MergeNode merge) {
         assert this.repOK();
         assert that.repOK();
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/BasePhase.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/BasePhase.java	Mon Apr 28 16:35:06 2014 +0200
@@ -72,7 +72,7 @@
         try (TimerCloseable a = phaseTimer.start(); Scope s = Debug.scope(getClass(), this)) {
             BasePhase.this.run(graph, context);
             phaseMetric.increment();
-            if (dumpGraph) {
+            if (dumpGraph && Debug.isDumpEnabled()) {
                 Debug.dump(graph, "After phase %s", getName());
             }
             assert graph.verify();
@@ -81,13 +81,17 @@
         }
     }
 
+    protected CharSequence createName() {
+        String s = BasePhase.this.getClass().getSimpleName();
+        if (s.endsWith("Phase")) {
+            s = s.substring(0, s.length() - "Phase".length());
+        }
+        return s;
+    }
+
     public final CharSequence getName() {
         if (name == null) {
-            String s = BasePhase.this.getClass().getSimpleName();
-            if (s.endsWith("Phase")) {
-                s = s.substring(0, s.length() - "Phase".length());
-            }
-            name = s;
+            name = createName();
         }
         return name;
     }
--- a/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotFrameInstance.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.graal.truffle.hotspot/src/com/oracle/graal/truffle/hotspot/HotSpotFrameInstance.java	Mon Apr 28 16:35:06 2014 +0200
@@ -145,10 +145,9 @@
     }
 
     /**
-     * This class represents a frame that is taken from the
-     * {@link RootCallTarget#callProxy(VirtualFrame)} method.
+     * This class represents a frame that is taken from the {@link OptimizedCallTarget#callProxy}
+     * method.
      */
-    @SuppressWarnings("javadoc")
     public static final class CallTargetFrame extends HotSpotFrameInstance {
         public static final Method METHOD;
         static {
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/call/SLAbstractDispatchNode.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/call/SLAbstractDispatchNode.java	Mon Apr 28 16:35:06 2014 +0200
@@ -44,7 +44,7 @@
  * <li>After execution of function {@code f2}: {@code I->D(f1)->D(f2)->U}
  * <li>After execution of function {@code f3}: {@code I->G}
  * </ol>
- * */
+ */
 public abstract class SLAbstractDispatchNode extends Node {
 
     protected static final int INLINE_CACHE_SIZE = 2;
--- a/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLNull.java	Mon Apr 28 12:07:49 2014 +0200
+++ b/graal/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLNull.java	Mon Apr 28 16:35:06 2014 +0200
@@ -29,7 +29,7 @@
  * there is always the danger of a spurious {@link NullPointerException}. Representing the guest
  * language {@code null} as a singleton, as in {@link #SINGLETON this class}, is the recommended
  * practice.
- * */
+ */
 public final class SLNull {
 
     /**
--- a/mxtool/mx.py	Mon Apr 28 12:07:49 2014 +0200
+++ b/mxtool/mx.py	Mon Apr 28 16:35:06 2014 +0200
@@ -3996,7 +3996,7 @@
             try:
                 log('Generating {2} for {0} in {1}'.format(p.name, out, docDir))
                 projectJava = java(p.javaCompliance)
-                run([java().javadoc, memory,
+                run([projectJava.javadoc, memory,
                      '-XDignore.symbol.file',
                      '-classpath', cp,
                      '-quiet',
@@ -4006,6 +4006,7 @@
                      '-source', str(projectJava.javaCompliance),
                      '-bootclasspath', projectJava.bootclasspath(),
                      '-extdirs', projectJava.extdirs()] +
+                     ([] if projectJava.javaCompliance < JavaCompliance('1.8') else ['-Xdoclint:none']) +
                      links +
                      extraArgs +
                      nowarnAPI +
@@ -4043,115 +4044,19 @@
              '-quiet',
              '-d', out,
              '-sourcepath', sp] +
+             ([] if java().javaCompliance < JavaCompliance('1.8') else ['-Xdoclint:none']) +
              links +
              extraArgs +
              nowarnAPI +
              list(pkgs))
         log('Generated {2} for {0} in {1}'.format(', '.join(names), out, docDir))
 
-class Chunk:
-    def __init__(self, content, ldelim, rdelim=None):
-        lindex = content.find(ldelim)
-        if rdelim is not None:
-            rindex = content.find(rdelim)
-        else:
-            rindex = lindex + len(ldelim)
-        self.ldelim = ldelim
-        self.rdelim = rdelim
-        if lindex != -1 and rindex != -1 and rindex > lindex:
-            self.text = content[lindex + len(ldelim):rindex]
-        else:
-            self.text = None
-
-    def replace(self, content, repl):
-        lindex = content.find(self.ldelim)
-        if self.rdelim is not None:
-            rindex = content.find(self.rdelim)
-            rdelimLen = len(self.rdelim)
-        else:
-            rindex = lindex + len(self.ldelim)
-            rdelimLen = 0
-        old = content[lindex:rindex + rdelimLen]
-        return content.replace(old, repl)
-
-# Post-process an overview-summary.html file to move the
-# complete overview to the top of the page
-def _fix_overview_summary(path, topLink):
-    """
-    Processes an "overview-summary.html" generated by javadoc to put the complete
-    summary text above the Packages table.
-    """
-
-    # This uses scraping and so will break if the relevant content produced by javadoc changes in any way!
-    with open(path) as fp:
-        content = fp.read()
-
-    chunk1 = Chunk(content, """<div class="header">
-<div class="subTitle">
-<div class="block">""", """</div>
-</div>
-<p>See: <a href="#overview.description">Description</a></p>
-</div>""")
-
-    chunk2 = Chunk(content, """<div class="contentContainer"><a name="overview.description">
-<!--   -->
-</a>
-<div class="block">""", """</div>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->""")
-
-    assert chunk1.text, 'Could not find header section in ' + path
-    assert chunk2.text, 'Could not find footer section in ' + path
-
-    content = chunk1.replace(content, '<div class="header"><div class="subTitle"><div class="block">' + topLink + chunk2.text + '</div></div></div>')
-    content = chunk2.replace(content, '')
-
-    with open(path, 'w') as fp:
-        fp.write(content)
-
-
-# Post-process a package-summary.html file to move the
-# complete package description to the top of the page
-def _fix_package_summary(path):
-    """
-    Processes an "overview-summary.html" generated by javadoc to put the complete
-    summary text above the Packages table.
-    """
-
-    # This uses scraping and so will break if the relevant content produced by javadoc changes in any way!
-    with open(path) as fp:
-        content = fp.read()
-
-    chunk1 = Chunk(content, """<div class="header">
-<h1 title="Package" class="title">Package""", """<p>See:&nbsp;<a href="#package.description">Description</a></p>
-</div>""")
-
-    chunk2 = Chunk(content, """<a name="package.description">
-<!--   -->
-</a>""", """</div>
-</div>
-<!-- ======= START OF BOTTOM NAVBAR ====== -->""")
-
-    if chunk1.text:
-        if chunk2.text:
-            repl = re.sub(r'<h2 title=(.*) Description</h2>', r'<h1 title=\1</h1>', chunk2.text, 1)
-            content = chunk1.replace(content, '<div class="header">' + repl + '</div></div>')
-            content = chunk2.replace(content, '')
-
-            with open(path, 'w') as fp:
-                fp.write(content)
-        else:
-            log('warning: Could not find package description detail section in ' + path)
-
-    else:
-        # no package description given
-        pass
-
 def site(args):
     """creates a website containing javadoc and the project dependency graph"""
 
     parser = ArgumentParser(prog='site')
     parser.add_argument('-d', '--base', action='store', help='directory for generated site', required=True, metavar='<dir>')
+    parser.add_argument('--tmp', action='store', help='directory to use for intermediate results', metavar='<dir>')
     parser.add_argument('--name', action='store', help='name of overall documentation', required=True, metavar='<name>')
     parser.add_argument('--overview', action='store', help='path to the overview content for overall documentation', required=True, metavar='<path>')
     parser.add_argument('--projects', action='store', help='comma separated projects to process (omit to process all projects)')
@@ -4162,7 +4067,7 @@
     args = parser.parse_args(args)
 
     args.base = os.path.abspath(args.base)
-    tmpbase = tempfile.mkdtemp(prefix=basename(args.base) + '.', dir=dirname(args.base))
+    tmpbase = args.tmp if args.tmp else  tempfile.mkdtemp(prefix=basename(args.base) + '.', dir=dirname(args.base))
     unified = join(tmpbase, 'all')
 
     exclude_packages_arg = []
@@ -4211,6 +4116,9 @@
                  '--arg', '@-windowtitle', '--arg', '@' + title,
                  '--arg', '@-doctitle', '--arg', '@' + title,
                  '--arg', '@-overview', '--arg', '@' + args.overview] + exclude_packages_arg + projects_arg + extra_javadoc_args)
+
+        if exists(unified):
+            shutil.rmtree(unified)
         os.rename(join(tmpbase, 'javadoc'), unified)
 
         # Generate dependency graph with Graphviz
@@ -4264,29 +4172,17 @@
             with open(html, 'w') as fp:
                 print >> fp, '<html><body><object data="{}.svg" type="image/svg+xml"></object></body></html>'.format(args.dot_output_base)
 
-        top = join(tmpbase, 'all', 'overview-summary.html')
-        for root, _, files in os.walk(tmpbase):
-            for f in files:
-                if f == 'overview-summary.html':
-                    path = join(root, f)
-                    topLink = ''
-                    if top != path:
-                        link = os.path.relpath(join(tmpbase, 'all', 'index.html'), dirname(path))
-                        topLink = '<p><a href="' + link + '", target="_top"><b>[return to the overall ' + args.name + ' documentation]</b></a></p>'
-                    _fix_overview_summary(path, topLink)
-                elif f == 'package-summary.html':
-                    path = join(root, f)
-                    _fix_package_summary(path)
-
-
         if exists(args.base):
             shutil.rmtree(args.base)
-        shutil.move(tmpbase, args.base)
+        if args.tmp:
+            shutil.copytree(tmpbase, args.base)
+        else:
+            shutil.move(tmpbase, args.base)
 
         print 'Created website - root is ' + join(args.base, 'all', 'index.html')
 
     finally:
-        if exists(tmpbase):
+        if not args.tmp and exists(tmpbase):
             shutil.rmtree(tmpbase)
 
 def _kwArg(kwargs):