30 import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue;
31 import static org.graalvm.compiler.lir.LIRValueUtil.isVariable;
32 import static org.graalvm.compiler.lir.LIRValueUtil.isVirtualStackSlot;
33
34 import java.util.ArrayList;
35 import java.util.List;
36
37 import org.graalvm.compiler.asm.Label;
38 import org.graalvm.compiler.core.common.LIRKind;
39 import org.graalvm.compiler.core.common.calc.Condition;
40 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
41 import org.graalvm.compiler.core.common.spi.CodeGenProviders;
42 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
43 import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
44 import org.graalvm.compiler.core.common.spi.LIRKindTool;
45 import org.graalvm.compiler.core.common.type.Stamp;
46 import org.graalvm.compiler.debug.GraalError;
47 import org.graalvm.compiler.debug.TTY;
48 import org.graalvm.compiler.graph.NodeSourcePosition;
49 import org.graalvm.compiler.lir.ConstantValue;
50 import org.graalvm.compiler.lir.LIRFrameState;
51 import org.graalvm.compiler.lir.LIRInstruction;
52 import org.graalvm.compiler.lir.LIRVerifier;
53 import org.graalvm.compiler.lir.LabelRef;
54 import org.graalvm.compiler.lir.StandardOp;
55 import org.graalvm.compiler.lir.StandardOp.BlockEndOp;
56 import org.graalvm.compiler.lir.StandardOp.LabelOp;
57 import org.graalvm.compiler.lir.StandardOp.SaveRegistersOp;
58 import org.graalvm.compiler.lir.SwitchStrategy;
59 import org.graalvm.compiler.lir.Variable;
60 import org.graalvm.compiler.options.Option;
61 import org.graalvm.compiler.options.OptionKey;
62 import org.graalvm.compiler.options.OptionType;
63 import org.graalvm.compiler.options.OptionValues;
64
65 import jdk.vm.ci.code.CallingConvention;
66 import jdk.vm.ci.code.CodeCacheProvider;
67 import jdk.vm.ci.code.Register;
68 import jdk.vm.ci.code.RegisterAttributes;
69 import jdk.vm.ci.code.StackSlot;
285 * @param valueKind the backend type of the value being returned
286 * @return the operand representing the ABI defined location used return a value of kind
287 * {@code kind}
288 */
289 @Override
290 public AllocatableValue resultOperandFor(JavaKind javaKind, ValueKind<?> valueKind) {
291 Register reg = res.getFrameMapBuilder().getRegisterConfig().getReturnRegister(javaKind);
292 assert target().arch.canStoreValue(reg.getRegisterCategory(), valueKind.getPlatformKind()) : reg.getRegisterCategory() + " " + valueKind.getPlatformKind();
293 return reg.asValue(valueKind);
294 }
295
296 NodeSourcePosition currentPosition;
297
298 @Override
299 public void setSourcePosition(NodeSourcePosition position) {
300 currentPosition = position;
301 }
302
303 @Override
304 public <I extends LIRInstruction> I append(I op) {
305 if (printIrWithLir) {
306 TTY.println(op.toStringWithIdPrefix());
307 TTY.println();
308 }
309 assert LIRVerifier.verify(op);
310 ArrayList<LIRInstruction> lirForBlock = res.getLIR().getLIRforBlock(getCurrentBlock());
311 op.setPosition(currentPosition);
312 lirForBlock.add(op);
313 return op;
314 }
315
316 @Override
317 public boolean hasBlockEnd(AbstractBlockBase<?> block) {
318 ArrayList<LIRInstruction> ops = getResult().getLIR().getLIRforBlock(block);
319 if (ops.size() == 0) {
320 return false;
321 }
322 return ops.get(ops.size() - 1) instanceof BlockEndOp;
323 }
324
325 private final class BlockScopeImpl extends BlockScope {
326
327 private BlockScopeImpl(AbstractBlockBase<?> block) {
328 currentBlock = block;
329 }
330
|
30 import static org.graalvm.compiler.lir.LIRValueUtil.isConstantValue;
31 import static org.graalvm.compiler.lir.LIRValueUtil.isVariable;
32 import static org.graalvm.compiler.lir.LIRValueUtil.isVirtualStackSlot;
33
34 import java.util.ArrayList;
35 import java.util.List;
36
37 import org.graalvm.compiler.asm.Label;
38 import org.graalvm.compiler.core.common.LIRKind;
39 import org.graalvm.compiler.core.common.calc.Condition;
40 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
41 import org.graalvm.compiler.core.common.spi.CodeGenProviders;
42 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
43 import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
44 import org.graalvm.compiler.core.common.spi.LIRKindTool;
45 import org.graalvm.compiler.core.common.type.Stamp;
46 import org.graalvm.compiler.debug.GraalError;
47 import org.graalvm.compiler.debug.TTY;
48 import org.graalvm.compiler.graph.NodeSourcePosition;
49 import org.graalvm.compiler.lir.ConstantValue;
50 import org.graalvm.compiler.lir.LIR;
51 import org.graalvm.compiler.lir.LIRFrameState;
52 import org.graalvm.compiler.lir.LIRInstruction;
53 import org.graalvm.compiler.lir.LIRVerifier;
54 import org.graalvm.compiler.lir.LabelRef;
55 import org.graalvm.compiler.lir.StandardOp;
56 import org.graalvm.compiler.lir.StandardOp.BlockEndOp;
57 import org.graalvm.compiler.lir.StandardOp.LabelOp;
58 import org.graalvm.compiler.lir.StandardOp.SaveRegistersOp;
59 import org.graalvm.compiler.lir.SwitchStrategy;
60 import org.graalvm.compiler.lir.Variable;
61 import org.graalvm.compiler.options.Option;
62 import org.graalvm.compiler.options.OptionKey;
63 import org.graalvm.compiler.options.OptionType;
64 import org.graalvm.compiler.options.OptionValues;
65
66 import jdk.vm.ci.code.CallingConvention;
67 import jdk.vm.ci.code.CodeCacheProvider;
68 import jdk.vm.ci.code.Register;
69 import jdk.vm.ci.code.RegisterAttributes;
70 import jdk.vm.ci.code.StackSlot;
286 * @param valueKind the backend type of the value being returned
287 * @return the operand representing the ABI defined location used return a value of kind
288 * {@code kind}
289 */
290 @Override
291 public AllocatableValue resultOperandFor(JavaKind javaKind, ValueKind<?> valueKind) {
292 Register reg = res.getFrameMapBuilder().getRegisterConfig().getReturnRegister(javaKind);
293 assert target().arch.canStoreValue(reg.getRegisterCategory(), valueKind.getPlatformKind()) : reg.getRegisterCategory() + " " + valueKind.getPlatformKind();
294 return reg.asValue(valueKind);
295 }
296
297 NodeSourcePosition currentPosition;
298
299 @Override
300 public void setSourcePosition(NodeSourcePosition position) {
301 currentPosition = position;
302 }
303
304 @Override
305 public <I extends LIRInstruction> I append(I op) {
306 LIR lir = res.getLIR();
307 if (printIrWithLir) {
308 TTY.println(op.toStringWithIdPrefix());
309 TTY.println();
310 }
311 assert LIRVerifier.verify(op);
312 ArrayList<LIRInstruction> lirForBlock = lir.getLIRforBlock(getCurrentBlock());
313 op.setPosition(currentPosition);
314 lirForBlock.add(op);
315 return op;
316 }
317
318 @Override
319 public boolean hasBlockEnd(AbstractBlockBase<?> block) {
320 ArrayList<LIRInstruction> ops = getResult().getLIR().getLIRforBlock(block);
321 if (ops.size() == 0) {
322 return false;
323 }
324 return ops.get(ops.size() - 1) instanceof BlockEndOp;
325 }
326
327 private final class BlockScopeImpl extends BlockScope {
328
329 private BlockScopeImpl(AbstractBlockBase<?> block) {
330 currentBlock = block;
331 }
332
|