Mercurial > hg > truffle
changeset 11255:fe5ce6520b6c
macro node for NodeClass.get(Class)
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Wed, 07 Aug 2013 18:36:15 +0200 |
parents | 80c0b5c2ec08 |
children | e38a3c10005a |
files | graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeClassSubstitutions.java |
diffstat | 1 files changed, 23 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeClassSubstitutions.java Wed Aug 07 18:35:59 2013 +0200 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/NodeClassSubstitutions.java Wed Aug 07 18:36:15 2013 +0200 @@ -25,7 +25,10 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.api.replacements.*; import com.oracle.graal.graph.*; +import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.replacements.nodes.*; /** * Substitutions for improving the performance of some critical methods in {@link NodeClass} @@ -37,6 +40,26 @@ @ClassSubstitution(NodeClass.class) public class NodeClassSubstitutions { + /** + * A macro node for calls to {@link NodeClass#get(Class)}. It can use the compiler's knowledge + * about node classes to replace itself with a constant value for a constant {@link Class} + * parameter. + */ + public static class NodeClassGetNode extends PureFunctionMacroNode { + + public NodeClassGetNode(Invoke invoke) { + super(invoke); + } + + @Override + protected Constant evaluate(Constant param, MetaAccessProvider metaAccess) { + return Constant.forObject(NodeClass.get((Class<?>) param.asObject())); + } + } + + @MacroSubstitution(isStatic = true, forced = true, macro = NodeClassGetNode.class) + private static native NodeClass get(Class<?> c); + @MethodSubstitution private static Node getNode(Node node, long offset) { return UnsafeCastNode.unsafeCast(UnsafeLoadNode.load(node, 0, offset, Kind.Object), Node.class, false, false);