1 /*
2 * Copyright (c) 2013, 2018, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24
25 package org.graalvm.compiler.core.phases;
26
27 import static org.graalvm.compiler.core.common.GraalOptions.ImmutableCode;
28 import static org.graalvm.compiler.phases.common.DeadCodeEliminationPhase.Optionality.Required;
29
30 import org.graalvm.compiler.core.common.GraalOptions;
31 import org.graalvm.compiler.nodes.spi.LoweringTool;
32 import org.graalvm.compiler.options.Option;
33 import org.graalvm.compiler.options.OptionKey;
34 import org.graalvm.compiler.options.OptionType;
35 import org.graalvm.compiler.options.OptionValues;
36 import org.graalvm.compiler.phases.PhaseSuite;
37 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
38 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
39 import org.graalvm.compiler.phases.common.ExpandLogicPhase;
40 import org.graalvm.compiler.phases.common.FixReadsPhase;
41 import org.graalvm.compiler.phases.common.LoweringPhase;
42 import org.graalvm.compiler.phases.common.OptimizeDivPhase;
43 import org.graalvm.compiler.phases.common.ProfileCompiledMethodsPhase;
44 import org.graalvm.compiler.phases.common.PropagateDeoptimizeProbabilityPhase;
45 import org.graalvm.compiler.phases.common.UseTrappingNullChecksPhase;
46 import org.graalvm.compiler.phases.schedule.SchedulePhase;
47 import org.graalvm.compiler.phases.schedule.SchedulePhase.SchedulingStrategy;
48 import org.graalvm.compiler.phases.tiers.LowTierContext;
49
50 public class LowTier extends PhaseSuite<LowTierContext> {
51
52 static class Options {
53
54 // @formatter:off
55 @Option(help = "", type = OptionType.Debug)
56 public static final OptionKey<Boolean> ProfileCompiledMethods = new OptionKey<>(false);
57 // @formatter:on
58
59 }
60
61 public LowTier(OptionValues options) {
62 CanonicalizerPhase canonicalizer = new CanonicalizerPhase();
63 CanonicalizerPhase canonicalizerWithoutGVN = new CanonicalizerPhase();
64 canonicalizerWithoutGVN.disableGVN();
65 if (ImmutableCode.getValue(options)) {
66 canonicalizer.disableReadCanonicalization();
67 canonicalizerWithoutGVN.disableReadCanonicalization();
68 }
69
70 if (Options.ProfileCompiledMethods.getValue(options)) {
71 appendPhase(new ProfileCompiledMethodsPhase());
72 }
73
74 appendPhase(new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.LOW_TIER));
75
76 appendPhase(new OptimizeDivPhase());
77
78 appendPhase(new ExpandLogicPhase());
79
80 appendPhase(new FixReadsPhase(true,
81 new SchedulePhase(GraalOptions.StressTestEarlyReads.getValue(options) ? SchedulingStrategy.EARLIEST : SchedulingStrategy.LATEST_OUT_OF_LOOPS_IMPLICIT_NULL_CHECKS)));
82
83 appendPhase(canonicalizerWithoutGVN);
84
85 appendPhase(new UseTrappingNullChecksPhase());
86
87 appendPhase(new DeadCodeEliminationPhase(Required));
88
89 appendPhase(new PropagateDeoptimizeProbabilityPhase());
90
91 appendPhase(new SchedulePhase(SchedulePhase.SchedulingStrategy.LATEST_OUT_OF_LOOPS));
92 }
93 }
|
1 /*
2 * Copyright (c) 2013, 2019, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24
25 package org.graalvm.compiler.core.phases;
26
27 import static org.graalvm.compiler.core.common.GraalOptions.ImmutableCode;
28 import static org.graalvm.compiler.phases.common.DeadCodeEliminationPhase.Optionality.Required;
29
30 import org.graalvm.compiler.core.common.GraalOptions;
31 import org.graalvm.compiler.nodes.spi.LoweringTool;
32 import org.graalvm.compiler.options.Option;
33 import org.graalvm.compiler.options.OptionKey;
34 import org.graalvm.compiler.options.OptionType;
35 import org.graalvm.compiler.options.OptionValues;
36 import org.graalvm.compiler.phases.PhaseSuite;
37 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
38 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
39 import org.graalvm.compiler.phases.common.ExpandLogicPhase;
40 import org.graalvm.compiler.phases.common.FixReadsPhase;
41 import org.graalvm.compiler.phases.common.LoweringPhase;
42 import org.graalvm.compiler.phases.common.ProfileCompiledMethodsPhase;
43 import org.graalvm.compiler.phases.common.PropagateDeoptimizeProbabilityPhase;
44 import org.graalvm.compiler.phases.common.UseTrappingNullChecksPhase;
45 import org.graalvm.compiler.phases.schedule.SchedulePhase;
46 import org.graalvm.compiler.phases.schedule.SchedulePhase.SchedulingStrategy;
47 import org.graalvm.compiler.phases.tiers.LowTierContext;
48
49 public class LowTier extends PhaseSuite<LowTierContext> {
50
51 static class Options {
52
53 // @formatter:off
54 @Option(help = "", type = OptionType.Debug)
55 public static final OptionKey<Boolean> ProfileCompiledMethods = new OptionKey<>(false);
56 // @formatter:on
57
58 }
59
60 public LowTier(OptionValues options) {
61 CanonicalizerPhase canonicalizer = new CanonicalizerPhase();
62 CanonicalizerPhase canonicalizerWithoutGVN = new CanonicalizerPhase();
63 canonicalizerWithoutGVN.disableGVN();
64 if (ImmutableCode.getValue(options)) {
65 canonicalizer.disableReadCanonicalization();
66 canonicalizerWithoutGVN.disableReadCanonicalization();
67 }
68
69 if (Options.ProfileCompiledMethods.getValue(options)) {
70 appendPhase(new ProfileCompiledMethodsPhase());
71 }
72
73 appendPhase(new LoweringPhase(canonicalizer, LoweringTool.StandardLoweringStage.LOW_TIER));
74
75 appendPhase(new ExpandLogicPhase());
76
77 appendPhase(new FixReadsPhase(true,
78 new SchedulePhase(GraalOptions.StressTestEarlyReads.getValue(options) ? SchedulingStrategy.EARLIEST : SchedulingStrategy.LATEST_OUT_OF_LOOPS_IMPLICIT_NULL_CHECKS)));
79
80 appendPhase(canonicalizerWithoutGVN);
81
82 appendPhase(new UseTrappingNullChecksPhase());
83
84 appendPhase(new DeadCodeEliminationPhase(Required));
85
86 appendPhase(new PropagateDeoptimizeProbabilityPhase());
87
88 appendPhase(new SchedulePhase(SchedulePhase.SchedulingStrategy.LATEST_OUT_OF_LOOPS));
89 }
90 }
|