changeset 15991:df679a9e6de0

[inliner] additional bits and pieces of documentation and assertions
author Miguel Garcia <miguel.m.garcia@oracle.com>
date Sun, 01 Jun 2014 19:50:02 +0200
parents 5aaef6a8985d
children 794daffa3850
files graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java
diffstat 1 files changed, 11 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java	Sun Jun 01 16:06:07 2014 +0200
+++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java	Sun Jun 01 19:50:02 2014 +0200
@@ -122,7 +122,15 @@
     private static ArrayList<Node> replaceParamsWithMoreInformativeArguments(final Invoke invoke, final StructuredGraph newGraph, final HighTierContext context) {
         NodeInputList<ValueNode> args = invoke.callTarget().arguments();
         ArrayList<Node> parameterUsages = null;
-        for (ParameterNode param : newGraph.getNodes(ParameterNode.class).snapshot()) {
+        List<ParameterNode> params = newGraph.getNodes(ParameterNode.class).snapshot();
+        assert params.size() <= args.size();
+        /*
+         * param-nodes that see no use (eg, after canonicalization) don't occur in `params`. That's
+         * why the sizes of `params` and `args` don't always match exactly. It's always possible to
+         * pair a param-node with its corresponding arg-node using param.index() as index into the
+         * `args` list.
+         */
+        for (ParameterNode param : params) {
             if (param.usages().isNotEmpty()) {
                 ValueNode arg = args.get(param.index());
                 if (arg.isConstant()) {
@@ -130,6 +138,7 @@
                     parameterUsages = trackParameterUsages(param, parameterUsages);
                     // collect param usages before replacing the param
                     newGraph.replaceFloating(param, ConstantNode.forConstant(constant, context.getMetaAccess(), newGraph));
+                    // param-node gone, leaving a gap in the sequence given by param.index()
                 } else {
                     Stamp joinedStamp = param.stamp().join(arg.stamp());
                     if (joinedStamp != null && !joinedStamp.equals(param.stamp())) {
@@ -141,6 +150,7 @@
                 }
             }
         }
+        assert (parameterUsages == null) || (!parameterUsages.isEmpty());
         return parameterUsages;
     }