Mercurial > hg > graal-compiler
changeset 9121:3476bda8dd78
Make phase suites extensible.
author | Roland Schatz <roland.schatz@oracle.com> |
---|---|
date | Mon, 15 Apr 2013 16:47:01 +0200 |
parents | 9f361c0f912b |
children | dedfff70763f |
files | graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/Suites.java graal/com.oracle.graal.phases/src/com/oracle/graal/phases/PhaseSuite.java |
diffstat | 3 files changed, 95 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java Mon Apr 15 16:47:01 2013 +0200 @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2013, 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.phases; + +import com.oracle.graal.loop.phases.*; +import com.oracle.graal.phases.*; +import com.oracle.graal.phases.common.*; +import com.oracle.graal.phases.tiers.*; +import com.oracle.graal.virtual.phases.ea.*; + +public class HighTier extends PhaseSuite<HighTierContext> { + + public HighTier() { + if (GraalOptions.FullUnroll) { + addPhase(new LoopFullUnrollPhase()); + if (GraalOptions.OptCanonicalizer) { + addPhase(new CanonicalizerPhase()); + } + } + + if (GraalOptions.OptTailDuplication) { + addPhase(new TailDuplicationPhase()); + if (GraalOptions.OptCanonicalizer) { + addPhase(new CanonicalizerPhase()); + } + } + + if (GraalOptions.PartialEscapeAnalysis) { + addPhase(new PartialEscapeAnalysisPhase(true, GraalOptions.OptEarlyReadElimination)); + } + + if (GraalOptions.OptConvertDeoptsToGuards) { + addPhase(new ConvertDeoptimizeToGuardPhase()); + } + + addPhase(new LockEliminationPhase()); + + if (GraalOptions.OptLoopTransform) { + addPhase(new LoopTransformHighPhase()); + addPhase(new LoopTransformLowPhase()); + } + addPhase(new RemoveValueProxyPhase()); + + if (GraalOptions.CullFrameStates) { + addPhase(new CullFrameStatesPhase()); + } + + if (GraalOptions.OptCanonicalizer) { + addPhase(new CanonicalizerPhase()); + } + } + +}
--- a/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/Suites.java Mon Apr 15 14:47:15 2013 +0200 +++ b/graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/Suites.java Mon Apr 15 16:47:01 2013 +0200 @@ -22,59 +22,10 @@ */ package com.oracle.graal.compiler.phases; -import java.util.*; - -import com.oracle.graal.loop.phases.*; import com.oracle.graal.phases.*; -import com.oracle.graal.phases.common.*; import com.oracle.graal.phases.tiers.*; -import com.oracle.graal.virtual.phases.ea.*; public class Suites { - public static final PhaseSuite<HighTierContext> HIGH_TIER = createHighTier(); - - private static PhaseSuite<HighTierContext> createHighTier() { - ArrayList<BasePhase<? super HighTierContext>> phases = new ArrayList<>(); - - if (GraalOptions.FullUnroll) { - phases.add(new LoopFullUnrollPhase()); - if (GraalOptions.OptCanonicalizer) { - phases.add(new CanonicalizerPhase()); - } - } - - if (GraalOptions.OptTailDuplication) { - phases.add(new TailDuplicationPhase()); - if (GraalOptions.OptCanonicalizer) { - phases.add(new CanonicalizerPhase()); - } - } - - if (GraalOptions.PartialEscapeAnalysis) { - phases.add(new PartialEscapeAnalysisPhase(true, GraalOptions.OptEarlyReadElimination)); - } - - if (GraalOptions.OptConvertDeoptsToGuards) { - phases.add(new ConvertDeoptimizeToGuardPhase()); - } - - phases.add(new LockEliminationPhase()); - - if (GraalOptions.OptLoopTransform) { - phases.add(new LoopTransformHighPhase()); - phases.add(new LoopTransformLowPhase()); - } - phases.add(new RemoveValueProxyPhase()); - - if (GraalOptions.CullFrameStates) { - phases.add(new CullFrameStatesPhase()); - } - - if (GraalOptions.OptCanonicalizer) { - phases.add(new CanonicalizerPhase()); - } - - return new PhaseSuite<>("HighTier", phases); - } + public static final PhaseSuite<HighTierContext> HIGH_TIER = new HighTier(); }
--- a/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/PhaseSuite.java Mon Apr 15 14:47:15 2013 +0200 +++ b/graal/com.oracle.graal.phases/src/com/oracle/graal/phases/PhaseSuite.java Mon Apr 15 16:47:01 2013 +0200 @@ -30,9 +30,27 @@ private final List<BasePhase<? super C>> phases; - public PhaseSuite(String name, List<BasePhase<? super C>> phases) { - super(name); - this.phases = phases; + public PhaseSuite() { + this.phases = new ArrayList<>(); + } + + protected final void addPhase(BasePhase<? super C> phase) { + phases.add(phase); + } + + protected final ListIterator<BasePhase<? super C>> findPhase(Class<? extends BasePhase<? super C>> phaseClass) { + ListIterator<BasePhase<? super C>> it = phases.listIterator(); + findNextPhase(it, phaseClass); + return it; + } + + protected static <C> void findNextPhase(ListIterator<BasePhase<? super C>> it, Class<? extends BasePhase<? super C>> phaseClass) { + while (it.hasNext()) { + BasePhase<? super C> phase = it.next(); + if (phaseClass.isInstance(phase)) { + break; + } + } } @Override