Mercurial > hg > graal-compiler
changeset 15426:e9029a026dc9
[flow-sensitive] bug fixes, missing state clearing
author | Miguel Garcia <miguel.m.garcia@oracle.com> |
---|---|
date | Tue, 29 Apr 2014 14:33:09 +0200 |
parents | a92ff90899b6 |
children | 3af4870a67e4 |
files | graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReductionPhase.java graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java |
diffstat | 2 files changed, 7 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReductionPhase.java Mon Apr 28 15:05:42 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/FlowSensitiveReductionPhase.java Tue Apr 29 14:33:09 2014 +0200 @@ -43,7 +43,9 @@ @Override protected final void run(StructuredGraph graph, PhaseContext context) { try (Debug.Scope s = Debug.scope("FlowSensitiveReduction")) { + Debug.dump(graph, "FlowSensitiveReduction initial"); new FlowSensitiveReduction(graph.start(), new State(), context).apply(); + Debug.dump(graph, "FlowSensitiveReduction done"); } catch (Throwable e) { throw Debug.handle(e); }
--- a/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java Mon Apr 28 15:05:42 2014 +0200 +++ b/graal/com.oracle.graal.phases.common/src/com/oracle/graal/phases/common/cfs/State.java Tue Apr 29 14:33:09 2014 +0200 @@ -283,6 +283,8 @@ if (isUnreachable) { typeRefinements.clear(); knownNull.clear(); + trueFacts.clear(); + falseFacts.clear(); return true; } @@ -789,6 +791,7 @@ * @return true iff `value` may lose dependency not covered by `anchor`. */ public static boolean isDependencyTainted(ValueNode value, GuardingNode anchor) { + assert anchor instanceof FixedNode; if (value instanceof ValueProxy) { if (value instanceof GuardedNode) { GuardedNode gn = (GuardedNode) value; @@ -814,6 +817,8 @@ isUnreachable = false; typeRefinements.clear(); knownNull.clear(); + trueFacts.clear(); + falseFacts.clear(); } }