# HG changeset patch # User Doug Simon # Date 1383932076 -3600 # Node ID 8d8d9d0b04bba21f55340f27217b0ea10d4f8b27 # Parent 8212479436e038fe1f9a04da40d020f550372b24 added check (with warning on System.err) if number of templates for a snippet exceeds a threshold (default is 50) diff -r 8212479436e0 -r 8d8d9d0b04bb graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java --- a/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Fri Nov 08 18:26:04 2013 +0100 +++ b/graal/com.oracle.graal.replacements/src/com/oracle/graal/replacements/SnippetTemplate.java Fri Nov 08 18:34:36 2013 +0100 @@ -23,7 +23,9 @@ package com.oracle.graal.replacements; import static com.oracle.graal.api.meta.LocationIdentity.*; +import static com.oracle.graal.api.meta.MetaUtil.*; +import java.io.*; import java.lang.reflect.*; import java.util.*; import java.util.concurrent.*; @@ -114,6 +116,17 @@ assert initNames(); } + private int templateCount; + + void notifyNewTemplate() { + templateCount++; + if (UseSnippetTemplateCache && templateCount > MaxTemplatesPerSnippet) { + PrintStream err = System.err; + err.printf("WARNING: Exceeded %d templates for snippet %s%n" + " Adjust maximum with %s system property%n", MaxTemplatesPerSnippet, format("%h.%n(%p)", method), + MAX_TEMPLATES_PER_SNIPPET_PROPERTY_NAME); + } + } + private boolean initNames() { int slotIdx = 0; for (int i = 0; i < names.length; i++) { @@ -350,7 +363,9 @@ private static final DebugMetric SnippetTemplatesNodeCount = Debug.metric("SnippetTemplatesNodeCount"); private static final DebugMetric SnippetGraphsNodeCount = Debug.metric("SnippetGraphsNodeCount"); + private static final String MAX_TEMPLATES_PER_SNIPPET_PROPERTY_NAME = "graal.maxTemplatesPerSnippet"; private static final boolean UseSnippetTemplateCache = Boolean.parseBoolean(System.getProperty("graal.useSnippetTemplateCache", "true")); + private static final int MaxTemplatesPerSnippet = Integer.getInteger(MAX_TEMPLATES_PER_SNIPPET_PROPERTY_NAME, 50); /** * Base class for snippet classes. It provides a cache for {@link SnippetTemplate}s. @@ -648,6 +663,7 @@ this.returnNode = retNode; SnippetTemplatesNodeCount.add(nodes.size()); + args.info.notifyNewTemplate(); } private static boolean checkAllVarargPlaceholdersAreDeleted(int parameterCount, VarargsPlaceholderNode[] placeholders) {