42 import org.graalvm.compiler.core.common.calc.Condition;
43 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
44 import org.graalvm.compiler.core.common.spi.CodeGenProviders;
45 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
46 import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
47 import org.graalvm.compiler.core.common.spi.LIRKindTool;
48 import org.graalvm.compiler.core.common.type.Stamp;
49 import org.graalvm.compiler.debug.DebugCloseable;
50 import org.graalvm.compiler.debug.GraalError;
51 import org.graalvm.compiler.debug.TTY;
52 import org.graalvm.compiler.graph.NodeSourcePosition;
53 import org.graalvm.compiler.lir.ConstantValue;
54 import org.graalvm.compiler.lir.LIR;
55 import org.graalvm.compiler.lir.LIRFrameState;
56 import org.graalvm.compiler.lir.LIRInstruction;
57 import org.graalvm.compiler.lir.LIRVerifier;
58 import org.graalvm.compiler.lir.LabelRef;
59 import org.graalvm.compiler.lir.StandardOp;
60 import org.graalvm.compiler.lir.StandardOp.BlockEndOp;
61 import org.graalvm.compiler.lir.StandardOp.LabelOp;
62 import org.graalvm.compiler.lir.StandardOp.SaveRegistersOp;
63 import org.graalvm.compiler.lir.SwitchStrategy;
64 import org.graalvm.compiler.lir.Variable;
65 import org.graalvm.compiler.lir.hashing.Hasher;
66 import org.graalvm.compiler.options.Option;
67 import org.graalvm.compiler.options.OptionKey;
68 import org.graalvm.compiler.options.OptionType;
69 import org.graalvm.compiler.options.OptionValues;
70
71 import jdk.vm.ci.code.CallingConvention;
72 import jdk.vm.ci.code.CodeCacheProvider;
73 import jdk.vm.ci.code.Register;
74 import jdk.vm.ci.code.RegisterAttributes;
75 import jdk.vm.ci.code.RegisterConfig;
76 import jdk.vm.ci.code.StackSlot;
77 import jdk.vm.ci.code.TargetDescription;
78 import jdk.vm.ci.meta.AllocatableValue;
79 import jdk.vm.ci.meta.Constant;
80 import jdk.vm.ci.meta.JavaConstant;
81 import jdk.vm.ci.meta.JavaKind;
82 import jdk.vm.ci.meta.MetaAccessProvider;
587 public LIRGenerationResult getResult() {
588 return res;
589 }
590
591 @Override
592 public void emitBlackhole(Value operand) {
593 append(new StandardOp.BlackholeOp(operand));
594 }
595
596 @Override
597 public LIRInstruction createBenchmarkCounter(String name, String group, Value increment) {
598 throw GraalError.unimplemented();
599 }
600
601 @Override
602 public LIRInstruction createMultiBenchmarkCounter(String[] names, String[] groups, Value[] increments) {
603 throw GraalError.unimplemented();
604 }
605
606 @Override
607 public abstract SaveRegistersOp createZapRegisters(Register[] zappedRegisters, JavaConstant[] zapValues);
608
609 @Override
610 public SaveRegistersOp createZapRegisters() {
611 Register[] zappedRegisters = getResult().getFrameMap().getRegisterConfig().getAllocatableRegisters().toArray();
612 JavaConstant[] zapValues = new JavaConstant[zappedRegisters.length];
613 for (int i = 0; i < zappedRegisters.length; i++) {
614 PlatformKind kind = target().arch.getLargestStorableKind(zappedRegisters[i].getRegisterCategory());
615 zapValues[i] = zapValueForKind(kind);
616 }
617 return createZapRegisters(zappedRegisters, zapValues);
618 }
619
620 @Override
621 public abstract LIRInstruction createZapArgumentSpace(StackSlot[] zappedStack, JavaConstant[] zapValues);
622
623 @Override
624 public LIRInstruction zapArgumentSpace() {
625 List<StackSlot> slots = null;
626 for (AllocatableValue arg : res.getCallingConvention().getArguments()) {
627 if (isStackSlot(arg)) {
628 if (slots == null) {
629 slots = new ArrayList<>();
630 }
631 slots.add((StackSlot) arg);
|
42 import org.graalvm.compiler.core.common.calc.Condition;
43 import org.graalvm.compiler.core.common.cfg.AbstractBlockBase;
44 import org.graalvm.compiler.core.common.spi.CodeGenProviders;
45 import org.graalvm.compiler.core.common.spi.ForeignCallLinkage;
46 import org.graalvm.compiler.core.common.spi.ForeignCallsProvider;
47 import org.graalvm.compiler.core.common.spi.LIRKindTool;
48 import org.graalvm.compiler.core.common.type.Stamp;
49 import org.graalvm.compiler.debug.DebugCloseable;
50 import org.graalvm.compiler.debug.GraalError;
51 import org.graalvm.compiler.debug.TTY;
52 import org.graalvm.compiler.graph.NodeSourcePosition;
53 import org.graalvm.compiler.lir.ConstantValue;
54 import org.graalvm.compiler.lir.LIR;
55 import org.graalvm.compiler.lir.LIRFrameState;
56 import org.graalvm.compiler.lir.LIRInstruction;
57 import org.graalvm.compiler.lir.LIRVerifier;
58 import org.graalvm.compiler.lir.LabelRef;
59 import org.graalvm.compiler.lir.StandardOp;
60 import org.graalvm.compiler.lir.StandardOp.BlockEndOp;
61 import org.graalvm.compiler.lir.StandardOp.LabelOp;
62 import org.graalvm.compiler.lir.StandardOp.ZapRegistersOp;
63 import org.graalvm.compiler.lir.SwitchStrategy;
64 import org.graalvm.compiler.lir.Variable;
65 import org.graalvm.compiler.lir.hashing.Hasher;
66 import org.graalvm.compiler.options.Option;
67 import org.graalvm.compiler.options.OptionKey;
68 import org.graalvm.compiler.options.OptionType;
69 import org.graalvm.compiler.options.OptionValues;
70
71 import jdk.vm.ci.code.CallingConvention;
72 import jdk.vm.ci.code.CodeCacheProvider;
73 import jdk.vm.ci.code.Register;
74 import jdk.vm.ci.code.RegisterAttributes;
75 import jdk.vm.ci.code.RegisterConfig;
76 import jdk.vm.ci.code.StackSlot;
77 import jdk.vm.ci.code.TargetDescription;
78 import jdk.vm.ci.meta.AllocatableValue;
79 import jdk.vm.ci.meta.Constant;
80 import jdk.vm.ci.meta.JavaConstant;
81 import jdk.vm.ci.meta.JavaKind;
82 import jdk.vm.ci.meta.MetaAccessProvider;
587 public LIRGenerationResult getResult() {
588 return res;
589 }
590
591 @Override
592 public void emitBlackhole(Value operand) {
593 append(new StandardOp.BlackholeOp(operand));
594 }
595
596 @Override
597 public LIRInstruction createBenchmarkCounter(String name, String group, Value increment) {
598 throw GraalError.unimplemented();
599 }
600
601 @Override
602 public LIRInstruction createMultiBenchmarkCounter(String[] names, String[] groups, Value[] increments) {
603 throw GraalError.unimplemented();
604 }
605
606 @Override
607 public abstract ZapRegistersOp createZapRegisters(Register[] zappedRegisters, JavaConstant[] zapValues);
608
609 @Override
610 public ZapRegistersOp createZapRegisters() {
611 Register[] zappedRegisters = getResult().getFrameMap().getRegisterConfig().getAllocatableRegisters().toArray();
612 return createZapRegisters(zappedRegisters);
613 }
614
615 @Override
616 public ZapRegistersOp createZapRegisters(Register[] zappedRegisters) {
617 JavaConstant[] zapValues = new JavaConstant[zappedRegisters.length];
618 for (int i = 0; i < zappedRegisters.length; i++) {
619 PlatformKind kind = target().arch.getLargestStorableKind(zappedRegisters[i].getRegisterCategory());
620 zapValues[i] = zapValueForKind(kind);
621 }
622 return createZapRegisters(zappedRegisters, zapValues);
623 }
624
625 @Override
626 public abstract LIRInstruction createZapArgumentSpace(StackSlot[] zappedStack, JavaConstant[] zapValues);
627
628 @Override
629 public LIRInstruction zapArgumentSpace() {
630 List<StackSlot> slots = null;
631 for (AllocatableValue arg : res.getCallingConvention().getArguments()) {
632 if (isStackSlot(arg)) {
633 if (slots == null) {
634 slots = new ArrayList<>();
635 }
636 slots.add((StackSlot) arg);
|