SpeculationLog.java revision 12651:6ef01bd40ce2
1211725Simp/*
2211725Simp * Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
3290014Svangyzen * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
445501Sjdp *
545501Sjdp * This code is free software; you can redistribute it and/or modify it
6211725Simp * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23package jdk.vm.ci.meta;
24
25/**
26 * Manages unique deoptimization reasons. Reasons are embedded in compiled code and can be
27 * invalidated at run time. Subsequent compilations then should not speculate again on such
28 * invalidated reasons to avoid repeated deoptimization.
29 *
30 * All methods of this interface are called by the compiler. There is no need for API to register
31 * failed speculations during deoptimization, since every VM has different needs there.
32 */
33public interface SpeculationLog {
34
35    /**
36     * Marker interface for speculation objects that can be added to the speculation log.
37     */
38    public interface SpeculationReason {
39    }
40
41    /**
42     * Must be called before compilation, i.e., before a compiler calls {@link #maySpeculate}.
43     */
44    void collectFailedSpeculations();
45
46    /**
47     * If this method returns true, the compiler is allowed to {@link #speculate} with the given
48     * reason.
49     */
50    boolean maySpeculate(SpeculationReason reason);
51
52    /**
53     * Registers a speculation that was performed by the compiler.
54     *
55     * @return A compiler constant encapsulating the provided reason. It is usually passed as an
56     *         argument to the deoptimization function.
57     */
58    JavaConstant speculate(SpeculationReason reason);
59
60    /**
61     * Returns if this log has speculations.
62     *
63     * @return true if there are speculations, false otherwise
64     */
65    boolean hasSpeculations();
66}
67