Mercurial > hg > graal-compiler
changeset 13643:4463c520f475
Keep speculations alive in the speculation log
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Tue, 17 Dec 2013 11:55:08 +0100 |
parents | 10f943c778f6 |
children | e0102f250d76 |
files | graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/SpeculationLog.java |
diffstat | 1 files changed, 12 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/SpeculationLog.java Thu Dec 12 15:31:24 2013 +0100 +++ b/graal/com.oracle.graal.api.code/src/com/oracle/graal/api/code/SpeculationLog.java Tue Dec 17 11:55:08 2013 +0100 @@ -23,6 +23,7 @@ package com.oracle.graal.api.code; import java.util.*; +import java.util.concurrent.*; import com.oracle.graal.api.meta.*; @@ -31,8 +32,9 @@ * */ public final class SpeculationLog { + private volatile Object lastFailed; + private volatile Collection<Object> speculations; private Set<Object> failedSpeculations; - private Object lastFailed; public synchronized void collectFailedSpeculations() { if (lastFailed != null) { @@ -41,6 +43,7 @@ } failedSpeculations.add(lastFailed); lastFailed = null; + speculations = null; } } @@ -48,6 +51,14 @@ if (failedSpeculations != null && failedSpeculations.contains(reason)) { return null; } + if (speculations == null) { + synchronized (this) { + if (speculations == null) { + speculations = new ConcurrentLinkedQueue<>(); + } + } + } + speculations.add(reason); return Constant.forObject(reason); } }