001/* 002 * Copyright (c) 2014, 2014, Oracle and/or its affiliates. All rights reserved. 003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 004 * 005 * This code is free software; you can redistribute it and/or modify it 006 * under the terms of the GNU General Public License version 2 only, as 007 * published by the Free Software Foundation. 008 * 009 * This code is distributed in the hope that it will be useful, but WITHOUT 010 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 011 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 012 * version 2 for more details (a copy is included in the LICENSE file that 013 * accompanied this code). 014 * 015 * You should have received a copy of the GNU General Public License version 016 * 2 along with this work; if not, write to the Free Software Foundation, 017 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 018 * 019 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 020 * or visit www.oracle.com if you need additional information or have any 021 * questions. 022 */ 023 024package com.oracle.graal.nodes.spi; 025 026import jdk.internal.jvmci.meta.*; 027 028import com.oracle.graal.graph.*; 029import com.oracle.graal.nodes.*; 030 031public interface NodeValueMap { 032 033 /** 034 * Returns the operand that has been previously initialized by 035 * {@link #setResult(ValueNode, Value)} with the result of an instruction. It's a code 036 * generation error to ask for the operand of ValueNode that doesn't have one yet. 037 * 038 * @param node A node that produces a result value. 039 */ 040 Value operand(Node node); 041 042 /** 043 * @return {@code true} if there is an {@link Value operand} associated with the {@code node} in 044 * the current block. 045 */ 046 boolean hasOperand(Node node); 047 048 /** 049 * Associates {@code operand} with the {@code node} in the current block. 050 * 051 * @return {@code operand} 052 */ 053 Value setResult(ValueNode node, Value operand); 054 055 /** 056 * Gets the the {@link ValueNode} that produced a {@code value}. If the {@code value} is not 057 * associated with a {@link ValueNode} {@code null} is returned. 058 * 059 * This method is intended for debugging purposes only. 060 */ 061 ValueNode valueForOperand(Value value); 062}