< prev index next > test/hotspot/jtreg/compiler/lib/ir_framework/IRNode.java
Print this page
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;
* // 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");
}
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;
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;
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;
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;
optoOnly(ALLOC_ARRAY_OF, regex);
}
public static final String OR = PREFIX + "OR" + POSTFIX;
static {
superWordNodes(ADD_REDUCTION_VL, "AddReductionVL");
}
public static final String ALLOC = PREFIX + "ALLOC" + POSTFIX;
static {
! 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|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|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|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 {
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");
}
vectorNode(SUB_VD, "SubVD", TYPE_DOUBLE);
}
public static final String SUBTYPE_CHECK = PREFIX + "SUBTYPE_CHECK" + POSTFIX;
static {
! beforeMatchingNameRegex(SUBTYPE_CHECK, "SubTypeCheck");
}
public static final String TRAP = PREFIX + "TRAP" + POSTFIX;
static {
trapNodes(TRAP, "reason");
vectorNode(SUB_VD, "SubVD", TYPE_DOUBLE);
}
public static final String SUBTYPE_CHECK = PREFIX + "SUBTYPE_CHECK" + POSTFIX;
static {
! macroNodes(SUBTYPE_CHECK, "SubTypeCheck");
}
public static final String TRAP = PREFIX + "TRAP" + POSTFIX;
static {
trapNodes(TRAP, "reason");
/**
* 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) {
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
/**
* Apply {@code regex} on all machine independent ideal graph phases up to and including
* {@link CompilePhase#BEFORE_MATCHING}.
*/
! 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
/**
* 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) {
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));
/**
* Apply {@code regex} on all machine dependant ideal graph phases (i.e. on the mach graph) starting from
* {@link CompilePhase#MATCHING}.
*/
! 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));
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 >