# HG changeset patch # User Josef Eisl # Date 1398177376 -7200 # Node ID e4d6c613d552f27040c77db48c5515505bf2b833 # Parent 3a6151ed5a25405dec23df7b44e79c41f99b4a49 Move LIRGeneratorTool to graal.lir (errors). diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotSafepointOp.java --- a/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotSafepointOp.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.hotspot.sparc/src/com/oracle/graal/hotspot/sparc/SPARCHotSpotSafepointOp.java Tue Apr 22 16:36:16 2014 +0200 @@ -33,8 +33,8 @@ import com.oracle.graal.hotspot.meta.HotSpotCodeCacheProvider.MarkId; import com.oracle.graal.lir.*; import com.oracle.graal.lir.asm.*; +import com.oracle.graal.lir.gen.*; import com.oracle.graal.lir.sparc.*; -import com.oracle.graal.nodes.spi.*; /** * Emits a safepoint poll. diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerator.java --- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerator.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/HotSpotLIRGenerator.java Tue Apr 22 16:36:16 2014 +0200 @@ -28,7 +28,6 @@ import com.oracle.graal.hotspot.meta.*; import com.oracle.graal.lir.StandardOp.SaveRegistersOp; import com.oracle.graal.lir.gen.*; -import com.oracle.graal.nodes.spi.*; /** * This interface defines the contract a HotSpot backend LIR generator needs to fulfill in addition diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArrayEqualsOp.java --- a/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArrayEqualsOp.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.lir.amd64/src/com/oracle/graal/lir/amd64/AMD64ArrayEqualsOp.java Tue Apr 22 16:36:16 2014 +0200 @@ -38,7 +38,7 @@ import com.oracle.graal.asm.amd64.AMD64Assembler.ConditionFlag; import com.oracle.graal.lir.*; import com.oracle.graal.lir.asm.*; -import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.lir.gen.*; /** * Emits code which compares two arrays of the same length. If the CPU supports any vector diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArithmetic.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArithmetic.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCArithmetic.java Tue Apr 22 16:36:16 2014 +0200 @@ -59,7 +59,7 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.asm.*; -import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.lir.gen.*; public enum SPARCArithmetic { // @formatter:off diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBitManipulationOp.java --- a/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBitManipulationOp.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.lir.sparc/src/com/oracle/graal/lir/sparc/SPARCBitManipulationOp.java Tue Apr 22 16:36:16 2014 +0200 @@ -40,7 +40,7 @@ import com.oracle.graal.compiler.common.*; import com.oracle.graal.lir.*; import com.oracle.graal.lir.asm.*; -import com.oracle.graal.nodes.spi.*; +import com.oracle.graal.lir.gen.*; public class SPARCBitManipulationOp extends SPARCLIRInstruction { diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/graal/com.oracle.graal.lir/src/com/oracle/graal/lir/gen/LIRGeneratorTool.java Tue Apr 22 16:36:16 2014 +0200 @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2011, 2012, 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.graal.lir.gen; + +import com.oracle.graal.api.code.*; +import com.oracle.graal.api.meta.*; +import com.oracle.graal.compiler.common.*; +import com.oracle.graal.nodes.*; +import com.oracle.graal.nodes.extended.*; +import com.oracle.graal.nodes.spi.*; + +public interface LIRGeneratorTool extends ArithmeticLIRGenerator { + + TargetDescription target(); + + MetaAccessProvider getMetaAccess(); + + CodeCacheProvider getCodeCache(); + + ForeignCallsProvider getForeignCalls(); + + Value emitLoad(PlatformKind kind, Value address, Access access); + + void emitStore(PlatformKind kind, Value address, Value input, Access access); + + Value emitCompareAndSwap(Value address, Value expectedValue, Value newValue, Value trueValue, Value falseValue); + + /** + * Emit an atomic read-and-add instruction. + * + * @param address address of the value to be read and written + * @param delta the value to be added + */ + default Value emitAtomicReadAndAdd(Value address, Value delta) { + throw GraalInternalError.unimplemented(); + } + + /** + * Emit an atomic read-and-write instruction. + * + * @param address address of the value to be read and written + * @param newValue the new value to be written + */ + default Value emitAtomicReadAndWrite(Value address, Value newValue) { + throw GraalInternalError.unimplemented(); + } + + void emitDeoptimize(Value actionAndReason, Value failedSpeculation, DeoptimizingNode deopting); + + Value emitForeignCall(ForeignCallLinkage linkage, DeoptimizingNode info, Value... args); + + /** + * Checks whether the supplied constant can be used without loading it into a register for most + * operations, i.e., for commonly used arithmetic, logical, and comparison operations. + * + * @param c The constant to check. + * @return True if the constant can be used directly, false if the constant needs to be in a + * register. + */ + boolean canInlineConstant(Constant c); + + boolean canStoreConstant(Constant c, boolean isCompressed); + + RegisterAttributes attributes(Register register); + + AllocatableValue newVariable(PlatformKind kind); + + AllocatableValue emitMove(Value input); + + void emitMove(AllocatableValue dst, Value src); + + /** + * Emits an op that loads the address of some raw data. + * + * @param dst the variable into which the address is loaded + * @param data the data to be installed with the generated code + */ + void emitData(AllocatableValue dst, byte[] data); + + Value emitAddress(Value base, long displacement, Value index, int scale); + + Value emitAddress(StackSlot slot); + + void emitMembar(int barriers); + + void emitUnwind(Value operand); + + /** + * Called just before register allocation is performed on the LIR owned by this generator. + * Overriding implementations of this method must call the overridden method. + */ + void beforeRegisterAllocation(); + + void emitIncomingValues(Value[] params); + + /** + * Emits a return instruction. Implementations need to insert a move if the input is not in the + * correct location. + */ + void emitReturn(Value input); +} diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/AddLocationNode.java Tue Apr 22 16:36:16 2014 +0200 @@ -26,6 +26,7 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; +import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/ConstantLocationNode.java Tue Apr 22 16:36:16 2014 +0200 @@ -25,6 +25,7 @@ import com.oracle.graal.api.meta.*; import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; +import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.spi.*; /** diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/IndexedLocationNode.java Tue Apr 22 16:36:16 2014 +0200 @@ -26,6 +26,7 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; +import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.spi.*; diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/extended/LocationNode.java Tue Apr 22 16:36:16 2014 +0200 @@ -26,6 +26,7 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.Node.ValueNumberable; +import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.spi.*; diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/LIRGeneratorTool.java Tue Apr 22 15:55:54 2014 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* - * Copyright (c) 2011, 2012, 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.graal.nodes.spi; - -import com.oracle.graal.api.code.*; -import com.oracle.graal.api.meta.*; -import com.oracle.graal.compiler.common.*; -import com.oracle.graal.nodes.*; -import com.oracle.graal.nodes.extended.*; - -public interface LIRGeneratorTool extends ArithmeticLIRGenerator { - - TargetDescription target(); - - MetaAccessProvider getMetaAccess(); - - CodeCacheProvider getCodeCache(); - - ForeignCallsProvider getForeignCalls(); - - Value emitLoad(PlatformKind kind, Value address, Access access); - - void emitStore(PlatformKind kind, Value address, Value input, Access access); - - Value emitCompareAndSwap(Value address, Value expectedValue, Value newValue, Value trueValue, Value falseValue); - - /** - * Emit an atomic read-and-add instruction. - * - * @param address address of the value to be read and written - * @param delta the value to be added - */ - default Value emitAtomicReadAndAdd(Value address, Value delta) { - throw GraalInternalError.unimplemented(); - } - - /** - * Emit an atomic read-and-write instruction. - * - * @param address address of the value to be read and written - * @param newValue the new value to be written - */ - default Value emitAtomicReadAndWrite(Value address, Value newValue) { - throw GraalInternalError.unimplemented(); - } - - void emitDeoptimize(Value actionAndReason, Value failedSpeculation, DeoptimizingNode deopting); - - Value emitForeignCall(ForeignCallLinkage linkage, DeoptimizingNode info, Value... args); - - /** - * Checks whether the supplied constant can be used without loading it into a register for most - * operations, i.e., for commonly used arithmetic, logical, and comparison operations. - * - * @param c The constant to check. - * @return True if the constant can be used directly, false if the constant needs to be in a - * register. - */ - boolean canInlineConstant(Constant c); - - boolean canStoreConstant(Constant c, boolean isCompressed); - - RegisterAttributes attributes(Register register); - - AllocatableValue newVariable(PlatformKind kind); - - AllocatableValue emitMove(Value input); - - void emitMove(AllocatableValue dst, Value src); - - /** - * Emits an op that loads the address of some raw data. - * - * @param dst the variable into which the address is loaded - * @param data the data to be installed with the generated code - */ - void emitData(AllocatableValue dst, byte[] data); - - Value emitAddress(Value base, long displacement, Value index, int scale); - - Value emitAddress(StackSlot slot); - - void emitMembar(int barriers); - - void emitUnwind(Value operand); - - /** - * Called just before register allocation is performed on the LIR owned by this generator. - * Overriding implementations of this method must call the overridden method. - */ - void beforeRegisterAllocation(); - - void emitIncomingValues(Value[] params); - - /** - * Emits a return instruction. Implementations need to insert a move if the input is not in the - * correct location. - */ - void emitReturn(Value input); -} diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeLIRBuilderTool.java --- a/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeLIRBuilderTool.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.nodes/src/com/oracle/graal/nodes/spi/NodeLIRBuilderTool.java Tue Apr 22 16:36:16 2014 +0200 @@ -26,6 +26,7 @@ import com.oracle.graal.api.code.*; import com.oracle.graal.api.meta.*; +import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.calc.*; import com.oracle.graal.nodes.extended.*; diff -r 3a6151ed5a25 -r e4d6c613d552 graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java --- a/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java Tue Apr 22 15:55:54 2014 +0200 +++ b/graal/com.oracle.graal.word/src/com/oracle/graal/word/nodes/SnippetLocationNode.java Tue Apr 22 16:36:16 2014 +0200 @@ -30,6 +30,7 @@ import com.oracle.graal.compiler.common.type.*; import com.oracle.graal.graph.*; import com.oracle.graal.graph.spi.*; +import com.oracle.graal.lir.gen.*; import com.oracle.graal.nodes.*; import com.oracle.graal.nodes.extended.*; import com.oracle.graal.nodes.spi.*;