30 import static org.graalvm.compiler.core.common.GraalOptions.LoopPeeling;
31 import static org.graalvm.compiler.core.common.GraalOptions.LoopUnswitch;
32 import static org.graalvm.compiler.core.common.GraalOptions.OptConvertDeoptsToGuards;
33 import static org.graalvm.compiler.core.common.GraalOptions.OptLoopTransform;
34 import static org.graalvm.compiler.core.common.GraalOptions.OptReadElimination;
35 import static org.graalvm.compiler.core.common.GraalOptions.PartialEscapeAnalysis;
36 import static org.graalvm.compiler.phases.common.DeadCodeEliminationPhase.Optionality.Optional;
37
38 import org.graalvm.compiler.loop.DefaultLoopPolicies;
39 import org.graalvm.compiler.loop.LoopPolicies;
40 import org.graalvm.compiler.loop.phases.LoopFullUnrollPhase;
41 import org.graalvm.compiler.loop.phases.LoopPeelingPhase;
42 import org.graalvm.compiler.loop.phases.LoopUnswitchingPhase;
43 import org.graalvm.compiler.nodes.spi.LoweringTool;
44 import org.graalvm.compiler.options.Option;
45 import org.graalvm.compiler.options.OptionKey;
46 import org.graalvm.compiler.options.OptionType;
47 import org.graalvm.compiler.options.OptionValues;
48 import org.graalvm.compiler.phases.PhaseSuite;
49 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
50 import org.graalvm.compiler.phases.common.NodeCounterPhase;
51 import org.graalvm.compiler.phases.common.ConvertDeoptimizeToGuardPhase;
52 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
53 import org.graalvm.compiler.phases.common.IncrementalCanonicalizerPhase;
54 import org.graalvm.compiler.phases.common.IterativeConditionalEliminationPhase;
55 import org.graalvm.compiler.phases.common.LoweringPhase;
56 import org.graalvm.compiler.phases.common.RemoveValueProxyPhase;
57 import org.graalvm.compiler.phases.common.inlining.InliningPhase;
58 import org.graalvm.compiler.phases.tiers.HighTierContext;
59 import org.graalvm.compiler.virtual.phases.ea.EarlyReadEliminationPhase;
60 import org.graalvm.compiler.virtual.phases.ea.PartialEscapePhase;
61
62 public class HighTier extends PhaseSuite<HighTierContext> {
63
64 public static class Options {
65
66 // @formatter:off
67 @Option(help = "Enable inlining", type = OptionType.Expert)
68 public static final OptionKey<Boolean> Inline = new OptionKey<>(true);
69 // @formatter:on
70 }
71
72 public HighTier(OptionValues options) {
73 CanonicalizerPhase canonicalizer = new CanonicalizerPhase();
74 if (ImmutableCode.getValue(options)) {
75 canonicalizer.disableReadCanonicalization();
76 }
77
78 appendPhase(canonicalizer);
79
80 if (NodeCounterPhase.Options.NodeCounters.getValue(options)) {
81 appendPhase(new NodeCounterPhase(NodeCounterPhase.Stage.INIT));
82 }
83
84 if (Options.Inline.getValue(options)) {
85 appendPhase(new InliningPhase(canonicalizer));
86 appendPhase(new DeadCodeEliminationPhase(Optional));
87 }
88
89 if (NodeCounterPhase.Options.NodeCounters.getValue(options)) {
90 appendPhase(new NodeCounterPhase(NodeCounterPhase.Stage.EARLY));
91 }
92
93 if (OptConvertDeoptsToGuards.getValue(options)) {
94 appendPhase(new IncrementalCanonicalizerPhase<>(canonicalizer, new ConvertDeoptimizeToGuardPhase()));
95 }
96
97 if (ConditionalElimination.getValue(options)) {
98 appendPhase(new IterativeConditionalEliminationPhase(canonicalizer, false));
99 }
100
101 LoopPolicies loopPolicies = createLoopPolicies();
102 if (FullUnroll.getValue(options)) {
103 appendPhase(new LoopFullUnrollPhase(canonicalizer, loopPolicies));
104 }
105
|
30 import static org.graalvm.compiler.core.common.GraalOptions.LoopPeeling;
31 import static org.graalvm.compiler.core.common.GraalOptions.LoopUnswitch;
32 import static org.graalvm.compiler.core.common.GraalOptions.OptConvertDeoptsToGuards;
33 import static org.graalvm.compiler.core.common.GraalOptions.OptLoopTransform;
34 import static org.graalvm.compiler.core.common.GraalOptions.OptReadElimination;
35 import static org.graalvm.compiler.core.common.GraalOptions.PartialEscapeAnalysis;
36 import static org.graalvm.compiler.phases.common.DeadCodeEliminationPhase.Optionality.Optional;
37
38 import org.graalvm.compiler.loop.DefaultLoopPolicies;
39 import org.graalvm.compiler.loop.LoopPolicies;
40 import org.graalvm.compiler.loop.phases.LoopFullUnrollPhase;
41 import org.graalvm.compiler.loop.phases.LoopPeelingPhase;
42 import org.graalvm.compiler.loop.phases.LoopUnswitchingPhase;
43 import org.graalvm.compiler.nodes.spi.LoweringTool;
44 import org.graalvm.compiler.options.Option;
45 import org.graalvm.compiler.options.OptionKey;
46 import org.graalvm.compiler.options.OptionType;
47 import org.graalvm.compiler.options.OptionValues;
48 import org.graalvm.compiler.phases.PhaseSuite;
49 import org.graalvm.compiler.phases.common.CanonicalizerPhase;
50 import org.graalvm.compiler.phases.common.ConvertDeoptimizeToGuardPhase;
51 import org.graalvm.compiler.phases.common.DeadCodeEliminationPhase;
52 import org.graalvm.compiler.phases.common.IncrementalCanonicalizerPhase;
53 import org.graalvm.compiler.phases.common.IterativeConditionalEliminationPhase;
54 import org.graalvm.compiler.phases.common.LoweringPhase;
55 import org.graalvm.compiler.phases.common.NodeCounterPhase;
56 import org.graalvm.compiler.phases.common.RemoveValueProxyPhase;
57 import org.graalvm.compiler.phases.common.inlining.InliningPhase;
58 import org.graalvm.compiler.phases.common.inlining.policy.GreedyInliningPolicy;
59 import org.graalvm.compiler.phases.tiers.HighTierContext;
60 import org.graalvm.compiler.virtual.phases.ea.EarlyReadEliminationPhase;
61 import org.graalvm.compiler.virtual.phases.ea.PartialEscapePhase;
62
63 public class HighTier extends PhaseSuite<HighTierContext> {
64
65 public static class Options {
66
67 // @formatter:off
68 @Option(help = "Enable inlining", type = OptionType.Expert)
69 public static final OptionKey<Boolean> Inline = new OptionKey<>(true);
70 // @formatter:on
71 }
72
73 public HighTier(OptionValues options) {
74 CanonicalizerPhase canonicalizer = new CanonicalizerPhase();
75 if (ImmutableCode.getValue(options)) {
76 canonicalizer.disableReadCanonicalization();
77 }
78
79 appendPhase(canonicalizer);
80
81 if (NodeCounterPhase.Options.NodeCounters.getValue(options)) {
82 appendPhase(new NodeCounterPhase(NodeCounterPhase.Stage.INIT));
83 }
84
85 if (Options.Inline.getValue(options)) {
86 appendPhase(new InliningPhase(new GreedyInliningPolicy(null), canonicalizer));
87 appendPhase(new DeadCodeEliminationPhase(Optional));
88 }
89
90 if (NodeCounterPhase.Options.NodeCounters.getValue(options)) {
91 appendPhase(new NodeCounterPhase(NodeCounterPhase.Stage.EARLY));
92 }
93
94 if (OptConvertDeoptsToGuards.getValue(options)) {
95 appendPhase(new IncrementalCanonicalizerPhase<>(canonicalizer, new ConvertDeoptimizeToGuardPhase()));
96 }
97
98 if (ConditionalElimination.getValue(options)) {
99 appendPhase(new IterativeConditionalEliminationPhase(canonicalizer, false));
100 }
101
102 LoopPolicies loopPolicies = createLoopPolicies();
103 if (FullUnroll.getValue(options)) {
104 appendPhase(new LoopFullUnrollPhase(canonicalizer, loopPolicies));
105 }
106
|