Mercurial > hg > graal-compiler
changeset 16069:4291873b259b
[inliner] extracted reusable query methods in InlineableGraph
author | Miguel Garcia <miguel.m.garcia@oracle.com> |
---|---|
date | Fri, 06 Jun 2014 19:46:16 +0200 |
parents | 74e142bd2b12 |
children | fa04403d1cb5 |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/inlining/info/elem/InlineableGraph.java |
diffstat | 1 files changed, 15 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- 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);