# HG changeset patch # User Miguel Garcia # Date 1402076776 -7200 # Node ID 4291873b259b2854b79b2cf86507f8711f785ccb # Parent 74e142bd2b12ca97ca230ec5c64522fe2b73e8d9 [inliner] extracted reusable query methods in InlineableGraph diff -r 74e142bd2b12 -r 4291873b259b graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java --- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java Fri Jun 06 22:13:00 2014 -0700 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java Fri Jun 06 19:46:16 2014 +0200 @@ -90,15 +90,19 @@ } private static boolean isArgMoreInformativeThanParam(ValueNode arg, ParameterNode param) { - if (arg.isConstant()) { - return true; - } else { - Stamp joinedStamp = param.stamp().join(arg.stamp()); - if (joinedStamp != null && !joinedStamp.equals(param.stamp())) { - return true; - } + return arg.isConstant() || canStampBeImproved(arg, param); + } + + private static boolean canStampBeImproved(ValueNode arg, ParameterNode param) { + return improvedStamp(arg, param) != null; + } + + private static Stamp improvedStamp(ValueNode arg, ParameterNode param) { + Stamp joinedStamp = param.stamp().join(arg.stamp()); + if (joinedStamp == null || joinedStamp.equals(param.stamp())) { + return null; } - return false; + return joinedStamp; } /** @@ -140,9 +144,9 @@ graph.replaceFloating(param, ConstantNode.forConstant(constant, context.getMetaAccess(), graph)); // 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())) { - param.setStamp(joinedStamp); + Stamp impro = improvedStamp(arg, param); + if (impro != null) { + param.setStamp(impro); parameterUsages = trackParameterUsages(param, parameterUsages); } else { assert !isArgMoreInformativeThanParam(arg, param);