# HG changeset patch # User Roland Schatz # Date 1366037221 -7200 # Node ID 3476bda8dd785180a9cf10b531dc3086ed9b8dfb # Parent 9f361c0f912b40695a14816d1fc583ad437371e0 Make phase suites extensible. diff -r 9f361c0f912b -r 3476bda8dd78 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/HighTier.java --- /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 { + + 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()); + } + } + +} diff -r 9f361c0f912b -r 3476bda8dd78 graal/com.oracle.graal.compiler/src/com/oracle/graal/compiler/phases/Suites.java --- 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 HIGH_TIER = createHighTier(); - - private static PhaseSuite createHighTier() { - ArrayList> 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 HIGH_TIER = new HighTier(); } diff -r 9f361c0f912b -r 3476bda8dd78 graal/com.oracle.graal.phases/src/com/oracle/graal/phases/PhaseSuite.java --- 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> phases; - public PhaseSuite(String name, List> phases) { - super(name); - this.phases = phases; + public PhaseSuite() { + this.phases = new ArrayList<>(); + } + + protected final void addPhase(BasePhase phase) { + phases.add(phase); + } + + protected final ListIterator> findPhase(Class> phaseClass) { + ListIterator> it = phases.listIterator(); + findNextPhase(it, phaseClass); + return it; + } + + protected static void findNextPhase(ListIterator> it, Class> phaseClass) { + while (it.hasNext()) { + BasePhase phase = it.next(); + if (phaseClass.isInstance(phase)) { + break; + } + } } @Override