< prev index next >

test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java

Print this page
@@ -26,10 +26,11 @@
  import compiler.lib.ir_framework.driver.irmatching.mapping.*;
  import compiler.lib.ir_framework.driver.irmatching.parser.VMInfo;
  import compiler.lib.ir_framework.shared.CheckedTestFrameworkException;
  import compiler.lib.ir_framework.shared.TestFormat;
  import compiler.lib.ir_framework.shared.TestFormatException;
+ import compiler.valhalla.inlinetypes.InlineTypeIRNode;
  import jdk.test.lib.Platform;
  import jdk.test.whitebox.WhiteBox;
  
  import java.util.HashMap;
  import java.util.Map;

@@ -150,10 +151,16 @@
       *    // IR_NODE_MAPPINGS. This can be done by using the helper methods defined after all IR node placeholder string
       *    // definitions.
       * }
       */
  
+     // Valhalla: Make sure that all Valhalla specific IR nodes are also properly initialized. Doing it here also
+     //           ensures that the Flag VM is able to pick up the correct compile phases.
+     static {
+         InlineTypeIRNode.forceStaticInitialization();
+     }
+ 
      public static final String ABS_D = PREFIX + "ABS_D" + POSTFIX;
      static {
          beforeMatchingNameRegex(ABS_D, "AbsD");
      }
  

@@ -279,29 +286,29 @@
          superWordNodes(ADD_REDUCTION_VL, "AddReductionVL");
      }
  
      public static final String ALLOC = PREFIX + "ALLOC" + POSTFIX;
      static {
-         String optoRegex = "(.*precise .*\\R((.*(?i:mov|mv|xorl|nop|spill).*|\\s*)\\R)*.*(?i:call,static).*wrapper for: C2 Runtime new_instance" + END;
+         String optoRegex = "(.*precise .*\\R((.*(?i:mov|mv|xorl|nop|spill|pushq|popq).*|\\s*)\\R)*.*(?i:call,static).*wrapper for: C2 Runtime new_instance" + END;
          allocNodes(ALLOC, "Allocate", optoRegex);
      }
  
      public static final String ALLOC_OF = COMPOSITE_PREFIX + "ALLOC_OF" + POSTFIX;
      static {
-         String regex = "(.*precise .*" + IS_REPLACED + ":.*\\R((.*(?i:mov|mv|xorl|nop|spill).*|\\s*)\\R)*.*(?i:call,static).*wrapper for: C2 Runtime new_instance" + END;
+         String regex = "(.*precise .*" + IS_REPLACED + ":.*\\R((.*(?i:mov|mv|xorl|nop|spill|pushq|popq).*|\\s*)\\R)*.*(?i:call,static).*wrapper for: C2 Runtime new_instance" + END;
          optoOnly(ALLOC_OF, regex);
      }
  
      public static final String ALLOC_ARRAY = PREFIX + "ALLOC_ARRAY" + POSTFIX;
      static {
-         String optoRegex = "(.*precise \\[.*\\R((.*(?i:mov|mv|xor|nop|spill).*|\\s*|.*(LGHI|LI).*)\\R)*.*(?i:call,static).*wrapper for: C2 Runtime new_array" + END;
+         String optoRegex = "(.*precise \\[.*\\R((.*(?i:mov|mv|xor|nop|spill|pushq|popq).*|\\s*|.*(LGHI|LI).*)\\R)*.*(?i:call,static).*wrapper for: C2 Runtime new_array" + END;
          allocNodes(ALLOC_ARRAY, "AllocateArray", optoRegex);
      }
  
      public static final String ALLOC_ARRAY_OF = COMPOSITE_PREFIX + "ALLOC_ARRAY_OF" + POSTFIX;
      static {
-         String regex = "(.*precise \\[.*" + IS_REPLACED + ":.*\\R((.*(?i:mov|mv|xorl|nop|spill).*|\\s*|.*(LGHI|LI).*)\\R)*.*(?i:call,static).*wrapper for: C2 Runtime new_array" + END;
+         String regex = "(.*precise \\[.*" + IS_REPLACED + ":.*\\R((.*(?i:mov|mv|xorl|nop|spill|pushq|popq).*|\\s*|.*(LGHI|LI).*)\\R)*.*(?i:call,static).*wrapper for: C2 Runtime new_array" + END;
          optoOnly(ALLOC_ARRAY_OF, regex);
      }
  
      public static final String OR = PREFIX + "OR" + POSTFIX;
      static {

@@ -680,10 +687,15 @@
      public static final String IF = PREFIX + "IF" + POSTFIX;
      static {
          beforeMatchingNameRegex(IF, "If\\b");
      }
  
+     public static final String INLINE_TYPE = PREFIX + "INLINE_TYPE" + POSTFIX;
+     static {
+         beforeMatchingNameRegex(INLINE_TYPE, "InlineType");
+     }
+ 
      // Does not work for VM builds without JVMCI like x86_32 (a rule containing this regex will be skipped without having JVMCI built).
      public static final String INTRINSIC_OR_TYPE_CHECKED_INLINING_TRAP = PREFIX + "INTRINSIC_OR_TYPE_CHECKED_INLINING_TRAP" + POSTFIX;
      static {
          trapNodes(INTRINSIC_OR_TYPE_CHECKED_INLINING_TRAP, "intrinsic_or_type_checked_inlining");
      }

@@ -1701,11 +1713,11 @@
          vectorNode(SUB_VD, "SubVD", TYPE_DOUBLE);
      }
  
      public static final String SUBTYPE_CHECK = PREFIX + "SUBTYPE_CHECK" + POSTFIX;
      static {
-         beforeMatchingNameRegex(SUBTYPE_CHECK, "SubTypeCheck");
+         macroNodes(SUBTYPE_CHECK, "SubTypeCheck");
      }
  
      public static final String TRAP = PREFIX + "TRAP" + POSTFIX;
      static {
          trapNodes(TRAP, "reason");

@@ -2386,11 +2398,11 @@
  
      /**
       * Apply {@code regex} on all machine independent ideal graph phases up to and including
       * {@link CompilePhase#BEFORE_MATCHING}.
       */
-     private static void beforeMatching(String irNodePlaceholder, String regex) {
+     public static void beforeMatching(String irNodePlaceholder, String regex) {
          IR_NODE_MAPPINGS.put(irNodePlaceholder, new RegexTypeEntry(RegexType.IDEAL_INDEPENDENT, regex));
      }
  
      /**
       * Apply {@code irNodeRegex} as regex for the IR node name on all machine independent ideal graph phases up to and

@@ -2432,11 +2444,11 @@
  
      /**
       * Apply {@code regex} on all machine dependant ideal graph phases (i.e. on the mach graph) starting from
       * {@link CompilePhase#MATCHING}.
       */
-     private static void optoOnly(String irNodePlaceholder, String regex) {
+     public static void optoOnly(String irNodePlaceholder, String regex) {
          IR_NODE_MAPPINGS.put(irNodePlaceholder, new RegexTypeEntry(RegexType.OPTO_ASSEMBLY, regex));
      }
  
      private static void machOnly(String irNodePlaceholder, String regex) {
          IR_NODE_MAPPINGS.put(irNodePlaceholder, new RegexTypeEntry(RegexType.MACH, regex));

@@ -2483,10 +2495,23 @@
          IR_NODE_MAPPINGS.put(irNodePlaceholder, new SinglePhaseRangeEntry(CompilePhase.PRINT_IDEAL, regex,
                                                                            CompilePhase.OPTIMIZE_FINISHED,
                                                                            CompilePhase.BEFORE_MATCHING));
      }
  
+     /**
+      * Apply a regex that matches a macro node IR node name {@code macroNodeName} exactly on all machine independent
+      * ideal graph phases up to and including {@link CompilePhase#BEFORE_MACRO_EXPANSION}. By default, we match on
+      * {@link CompilePhase#BEFORE_MACRO_EXPANSION} when no {@link CompilePhase} is chosen.
+      */
+     private static void macroNodes(String irNodePlaceholder, String macroNodeName) {
+         String macroNodeRegex = START + macroNodeName + "\\b" + MID + END;
+         IR_NODE_MAPPINGS.put(irNodePlaceholder, new SinglePhaseRangeEntry(CompilePhase.BEFORE_MACRO_EXPANSION,
+                                                                           macroNodeRegex,
+                                                                           CompilePhase.BEFORE_STRINGOPTS,
+                                                                           CompilePhase.BEFORE_MACRO_EXPANSION));
+     }
+ 
      private static void trapNodes(String irNodePlaceholder, String trapReason) {
          String regex = START + "CallStaticJava" + MID + "uncommon_trap.*" + trapReason + END;
          beforeMatching(irNodePlaceholder, regex);
      }
  
< prev index next >