view graal/com.oracle.max.cri/src/com/oracle/max/cri/xir/RiXirGenerator.java @ 4558:3706975946e4

Make graph dumping a bit more robust when there is no method, enable debug in the startCompiler method, add context and scope for snippets installation Made IGV display graphs even if some edges are problematic When schedule failed don't use it
author Gilles Duboscq <duboscq@ssw.jku.at>
date Fri, 10 Feb 2012 02:22:23 +0100
parents 11a4af4a6621
children 5e6f1026a63e
line wrap: on
line source

/*
 * Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 */
package com.oracle.max.cri.xir;

import com.oracle.max.cri.ci.*;
import com.oracle.max.cri.ri.*;
import com.oracle.max.cri.ri.RiType.Representation;

/**
 * Represents the interface through which the compiler requests the XIR for a given bytecode from the runtime system.
 */
public interface RiXirGenerator {

    /**
     * Note: may return {@code null}.
     */
    XirSnippet genPrologue(XirSite site, RiResolvedMethod method);

    /**
     * Note: may return {@code null} in which case the compiler will not emit a return instruction.
     */
    XirSnippet genEpilogue(XirSite site, RiResolvedMethod method);

    XirSnippet genSafepointPoll(XirSite site);

    XirSnippet genExceptionObject(XirSite site);

    XirSnippet genResolveClass(XirSite site, RiType type, Representation representation);

    XirSnippet genIntrinsic(XirSite site, XirArgument[] arguments, RiMethod method);

    XirSnippet genInvokeInterface(XirSite site, XirArgument receiver, RiMethod method);

    XirSnippet genInvokeVirtual(XirSite site, XirArgument receiver, RiMethod method);

    XirSnippet genInvokeSpecial(XirSite site, XirArgument receiver, RiMethod method);

    XirSnippet genInvokeStatic(XirSite site, RiMethod method);

    XirSnippet genMonitorEnter(XirSite site, XirArgument receiver, XirArgument lockAddress);

    XirSnippet genMonitorExit(XirSite site, XirArgument receiver, XirArgument lockAddress);

    XirSnippet genGetField(XirSite site, XirArgument receiver, RiField field);

    XirSnippet genPutField(XirSite site, XirArgument receiver, RiField field, XirArgument value);

    XirSnippet genGetStatic(XirSite site, XirArgument staticTuple, RiField field);

    XirSnippet genPutStatic(XirSite site, XirArgument staticTuple, RiField field, XirArgument value);

    XirSnippet genNewInstance(XirSite site, RiType type);

    XirSnippet genNewArray(XirSite site, XirArgument length, CiKind elementKind, RiType componentType, RiType arrayType);

    XirSnippet genNewObjectArrayClone(XirSite site, XirArgument newLength, XirArgument referenceArray);

    XirSnippet genNewMultiArray(XirSite site, XirArgument[] lengths, RiType type);

    XirSnippet genCheckCast(XirSite site, XirArgument receiver, XirArgument hub, RiType type, RiResolvedType[] hints, boolean hintsExact);

    XirSnippet genInstanceOf(XirSite site, XirArgument receiver, XirArgument hub, RiType type, RiResolvedType[] hints, boolean hintsExact);

    XirSnippet genMaterializeInstanceOf(XirSite site, XirArgument receiver, XirArgument hub, XirArgument trueValue, XirArgument falseValue, RiType type, RiResolvedType[] hints, boolean hintsExact);

    XirSnippet genArrayLoad(XirSite site, XirArgument array, XirArgument index, CiKind elementKind, RiType elementType);

    XirSnippet genArrayStore(XirSite site, XirArgument array, XirArgument index, XirArgument value, CiKind elementKind, RiType elementType);

    XirSnippet genArrayLength(XirSite site, XirArgument array);

    XirSnippet genWriteBarrier(XirArgument object);

    XirSnippet genArrayCopy(XirSite site, XirArgument src, XirArgument srcPos, XirArgument dest, XirArgument destPos, XirArgument length, RiType elementType, boolean inputsSame, boolean inputsDifferent);

    XirSnippet genCurrentThread(XirSite site);

    XirSnippet genGetClass(XirSite site, XirArgument xirArgument);

    /**
     * Generates code that checks that the {@linkplain Representation#ObjectHub hub} of
     * an object is identical to a given hub constant. In pseudo code:
     * <pre>
     *     if (object.getHub() != hub) {
     *       jump(falseSuccessor)
     *     }
     * </pre>
     * This snippet should only be used when the object is guaranteed not to be null.
     */
    XirSnippet genTypeBranch(XirSite site, XirArgument thisHub, XirArgument otherHub, RiType type);

    /**
     * Initializes the XIR generator for the given XIR assembler.
     *
     * @param asm the XIR assembler
     */
    void initialize(CiXirAssembler asm);

}