src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core.aarch64/src/org/graalvm/compiler/core/aarch64/AArch64SuitesCreator.java
changeset 57537 ecc6e394475f
parent 52910 583fd71c47d6
child 58299 6df94ce3ab2f
equal deleted inserted replaced
57536:67cce1b84a9a 57537:ecc6e394475f
    22  */
    22  */
    23 
    23 
    24 
    24 
    25 package org.graalvm.compiler.core.aarch64;
    25 package org.graalvm.compiler.core.aarch64;
    26 
    26 
       
    27 import java.util.List;
    27 import java.util.ListIterator;
    28 import java.util.ListIterator;
    28 
    29 
       
    30 import org.graalvm.compiler.debug.GraalError;
    29 import org.graalvm.compiler.java.DefaultSuitesCreator;
    31 import org.graalvm.compiler.java.DefaultSuitesCreator;
    30 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
    32 import org.graalvm.compiler.nodes.graphbuilderconf.GraphBuilderConfiguration.Plugins;
    31 import org.graalvm.compiler.options.OptionValues;
    33 import org.graalvm.compiler.options.OptionValues;
    32 import org.graalvm.compiler.phases.BasePhase;
    34 import org.graalvm.compiler.phases.BasePhase;
    33 import org.graalvm.compiler.phases.Phase;
    35 import org.graalvm.compiler.phases.Phase;
    35 import org.graalvm.compiler.phases.tiers.CompilerConfiguration;
    37 import org.graalvm.compiler.phases.tiers.CompilerConfiguration;
    36 import org.graalvm.compiler.phases.tiers.LowTierContext;
    38 import org.graalvm.compiler.phases.tiers.LowTierContext;
    37 import org.graalvm.compiler.phases.tiers.Suites;
    39 import org.graalvm.compiler.phases.tiers.Suites;
    38 
    40 
    39 public class AArch64SuitesCreator extends DefaultSuitesCreator {
    41 public class AArch64SuitesCreator extends DefaultSuitesCreator {
    40     private final Class<? extends Phase> insertReadReplacementBefore;
    42     private final List<Class<? extends Phase>> insertReadReplacementBeforePositions;
    41 
    43 
    42     public AArch64SuitesCreator(CompilerConfiguration compilerConfiguration, Plugins plugins, Class<? extends Phase> insertReadReplacementBefore) {
    44     public AArch64SuitesCreator(CompilerConfiguration compilerConfiguration, Plugins plugins, List<Class<? extends Phase>> insertReadReplacementBeforePositions) {
    43         super(compilerConfiguration, plugins);
    45         super(compilerConfiguration, plugins);
    44         this.insertReadReplacementBefore = insertReadReplacementBefore;
    46         this.insertReadReplacementBeforePositions = insertReadReplacementBeforePositions;
    45     }
    47     }
    46 
    48 
    47     @Override
    49     @Override
    48     public Suites createSuites(OptionValues options) {
    50     public Suites createSuites(OptionValues options) {
    49         Suites suites = super.createSuites(options);
    51         Suites suites = super.createSuites(options);
    50 
    52         ListIterator<BasePhase<? super LowTierContext>> findPhase = null;
    51         ListIterator<BasePhase<? super LowTierContext>> findPhase = suites.getLowTier().findPhase(insertReadReplacementBefore);
    53         for (Class<? extends Phase> phase : insertReadReplacementBeforePositions) {
    52         // Put AArch64ReadReplacementPhase right before the SchedulePhase
    54             findPhase = suites.getLowTier().findPhase(phase);
    53         while (PhaseSuite.findNextPhase(findPhase, insertReadReplacementBefore)) {
    55             if (findPhase != null) {
    54             // Search for last occurrence of SchedulePhase
    56                 // Put AArch64ReadReplacementPhase right before the requested phase
       
    57                 while (PhaseSuite.findNextPhase(findPhase, phase)) {
       
    58                     // Search for last occurrence of SchedulePhase
       
    59                 }
       
    60                 findPhase.previous();
       
    61                 break;
       
    62             }
    55         }
    63         }
    56         findPhase.previous();
    64         if (findPhase != null) {
    57         findPhase.add(new AArch64ReadReplacementPhase());
    65             findPhase.add(new AArch64ReadReplacementPhase());
       
    66         } else {
       
    67             throw GraalError.shouldNotReachHere("Cannot find phase to insert AArch64ReadReplacementPhase");
       
    68         }
    58         return suites;
    69         return suites;
    59     }
    70     }
    60 }
    71 }