< prev index next >

src/jdk.internal.vm.compiler/share/classes/org.graalvm.compiler.core/src/org/graalvm/compiler/core/gen/NodeLIRBuilder.java

Print this page




  42 import org.graalvm.compiler.core.match.MatchPattern;
  43 import org.graalvm.compiler.core.match.MatchRuleRegistry;
  44 import org.graalvm.compiler.core.match.MatchStatement;
  45 import org.graalvm.compiler.debug.DebugContext;
  46 import org.graalvm.compiler.debug.GraalError;
  47 import org.graalvm.compiler.debug.TTY;
  48 import org.graalvm.compiler.graph.GraalGraphError;
  49 import org.graalvm.compiler.graph.Node;
  50 import org.graalvm.compiler.graph.NodeMap;
  51 import org.graalvm.compiler.graph.NodeSourcePosition;
  52 import org.graalvm.compiler.graph.iterators.NodeIterable;
  53 import org.graalvm.compiler.lir.FullInfopointOp;
  54 import org.graalvm.compiler.lir.LIRFrameState;
  55 import org.graalvm.compiler.lir.LIRInstruction;
  56 import org.graalvm.compiler.lir.LabelRef;
  57 import org.graalvm.compiler.lir.StandardOp.JumpOp;
  58 import org.graalvm.compiler.lir.StandardOp.LabelOp;
  59 import org.graalvm.compiler.lir.SwitchStrategy;
  60 import org.graalvm.compiler.lir.Variable;
  61 import org.graalvm.compiler.lir.debug.LIRGenerationDebugContext;

  62 import org.graalvm.compiler.lir.gen.LIRGenerator;
  63 import org.graalvm.compiler.lir.gen.LIRGenerator.Options;
  64 import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
  65 import org.graalvm.compiler.lir.gen.LIRGeneratorTool.BlockScope;
  66 import org.graalvm.compiler.nodes.AbstractBeginNode;
  67 import org.graalvm.compiler.nodes.AbstractEndNode;
  68 import org.graalvm.compiler.nodes.AbstractMergeNode;
  69 import org.graalvm.compiler.nodes.ConstantNode;
  70 import org.graalvm.compiler.nodes.DeoptimizingNode;
  71 import org.graalvm.compiler.nodes.DirectCallTargetNode;
  72 import org.graalvm.compiler.nodes.FixedNode;
  73 import org.graalvm.compiler.nodes.FrameState;
  74 import org.graalvm.compiler.nodes.FullInfopointNode;
  75 import org.graalvm.compiler.nodes.IfNode;
  76 import org.graalvm.compiler.nodes.IndirectCallTargetNode;
  77 import org.graalvm.compiler.nodes.Invoke;
  78 import org.graalvm.compiler.nodes.InvokeWithExceptionNode;
  79 import org.graalvm.compiler.nodes.LogicConstantNode;
  80 import org.graalvm.compiler.nodes.LogicNode;
  81 import org.graalvm.compiler.nodes.LoopEndNode;


 560             LIRKind kind = gen.getLIRKind(isNullNode.getValue().stamp());
 561             Value nullValue = gen.emitConstant(kind, JavaConstant.NULL_POINTER);
 562             return gen.emitConditionalMove(kind.getPlatformKind(), operand(isNullNode.getValue()), nullValue, Condition.EQ, false, trueValue, falseValue);
 563         } else if (node instanceof CompareNode) {
 564             CompareNode compare = (CompareNode) node;
 565             PlatformKind kind = gen.getLIRKind(compare.getX().stamp()).getPlatformKind();
 566             return gen.emitConditionalMove(kind, operand(compare.getX()), operand(compare.getY()), compare.condition(), compare.unorderedIsTrue(), trueValue, falseValue);
 567         } else if (node instanceof LogicConstantNode) {
 568             return gen.emitMove(((LogicConstantNode) node).getValue() ? trueValue : falseValue);
 569         } else if (node instanceof IntegerTestNode) {
 570             IntegerTestNode test = (IntegerTestNode) node;
 571             return gen.emitIntegerTestMove(operand(test.getX()), operand(test.getY()), trueValue, falseValue);
 572         } else {
 573             throw GraalError.unimplemented(node.toString());
 574         }
 575     }
 576 
 577     @Override
 578     public void emitInvoke(Invoke x) {
 579         LoweredCallTargetNode callTarget = (LoweredCallTargetNode) x.callTarget();
 580         CallingConvention invokeCc = gen.getResult().getFrameMapBuilder().getRegisterConfig().getCallingConvention(callTarget.callType(), x.asNode().stamp().javaType(gen.getMetaAccess()),
 581                         callTarget.signature(), gen);
 582         gen.getResult().getFrameMapBuilder().callsMethod(invokeCc);
 583 
 584         Value[] parameters = visitInvokeArguments(invokeCc, callTarget.arguments());
 585 
 586         LabelRef exceptionEdge = null;
 587         if (x instanceof InvokeWithExceptionNode) {
 588             exceptionEdge = getLIRBlock(((InvokeWithExceptionNode) x).exceptionEdge());
 589         }
 590         LIRFrameState callState = stateWithExceptionEdge(x, exceptionEdge);
 591 
 592         Value result = invokeCc.getReturn();
 593         if (callTarget instanceof DirectCallTargetNode) {
 594             emitDirectCall((DirectCallTargetNode) callTarget, result, parameters, AllocatableValue.NONE, callState);
 595         } else if (callTarget instanceof IndirectCallTargetNode) {
 596             emitIndirectCall((IndirectCallTargetNode) callTarget, result, parameters, AllocatableValue.NONE, callState);
 597         } else {
 598             throw GraalError.shouldNotReachHere();
 599         }
 600 
 601         if (isLegal(result)) {
 602             setResult(x.asNode(), gen.emitMove(result));




  42 import org.graalvm.compiler.core.match.MatchPattern;
  43 import org.graalvm.compiler.core.match.MatchRuleRegistry;
  44 import org.graalvm.compiler.core.match.MatchStatement;
  45 import org.graalvm.compiler.debug.DebugContext;
  46 import org.graalvm.compiler.debug.GraalError;
  47 import org.graalvm.compiler.debug.TTY;
  48 import org.graalvm.compiler.graph.GraalGraphError;
  49 import org.graalvm.compiler.graph.Node;
  50 import org.graalvm.compiler.graph.NodeMap;
  51 import org.graalvm.compiler.graph.NodeSourcePosition;
  52 import org.graalvm.compiler.graph.iterators.NodeIterable;
  53 import org.graalvm.compiler.lir.FullInfopointOp;
  54 import org.graalvm.compiler.lir.LIRFrameState;
  55 import org.graalvm.compiler.lir.LIRInstruction;
  56 import org.graalvm.compiler.lir.LabelRef;
  57 import org.graalvm.compiler.lir.StandardOp.JumpOp;
  58 import org.graalvm.compiler.lir.StandardOp.LabelOp;
  59 import org.graalvm.compiler.lir.SwitchStrategy;
  60 import org.graalvm.compiler.lir.Variable;
  61 import org.graalvm.compiler.lir.debug.LIRGenerationDebugContext;
  62 import org.graalvm.compiler.lir.framemap.FrameMapBuilder;
  63 import org.graalvm.compiler.lir.gen.LIRGenerator;
  64 import org.graalvm.compiler.lir.gen.LIRGenerator.Options;
  65 import org.graalvm.compiler.lir.gen.LIRGeneratorTool;
  66 import org.graalvm.compiler.lir.gen.LIRGeneratorTool.BlockScope;
  67 import org.graalvm.compiler.nodes.AbstractBeginNode;
  68 import org.graalvm.compiler.nodes.AbstractEndNode;
  69 import org.graalvm.compiler.nodes.AbstractMergeNode;
  70 import org.graalvm.compiler.nodes.ConstantNode;
  71 import org.graalvm.compiler.nodes.DeoptimizingNode;
  72 import org.graalvm.compiler.nodes.DirectCallTargetNode;
  73 import org.graalvm.compiler.nodes.FixedNode;
  74 import org.graalvm.compiler.nodes.FrameState;
  75 import org.graalvm.compiler.nodes.FullInfopointNode;
  76 import org.graalvm.compiler.nodes.IfNode;
  77 import org.graalvm.compiler.nodes.IndirectCallTargetNode;
  78 import org.graalvm.compiler.nodes.Invoke;
  79 import org.graalvm.compiler.nodes.InvokeWithExceptionNode;
  80 import org.graalvm.compiler.nodes.LogicConstantNode;
  81 import org.graalvm.compiler.nodes.LogicNode;
  82 import org.graalvm.compiler.nodes.LoopEndNode;


 561             LIRKind kind = gen.getLIRKind(isNullNode.getValue().stamp());
 562             Value nullValue = gen.emitConstant(kind, JavaConstant.NULL_POINTER);
 563             return gen.emitConditionalMove(kind.getPlatformKind(), operand(isNullNode.getValue()), nullValue, Condition.EQ, false, trueValue, falseValue);
 564         } else if (node instanceof CompareNode) {
 565             CompareNode compare = (CompareNode) node;
 566             PlatformKind kind = gen.getLIRKind(compare.getX().stamp()).getPlatformKind();
 567             return gen.emitConditionalMove(kind, operand(compare.getX()), operand(compare.getY()), compare.condition(), compare.unorderedIsTrue(), trueValue, falseValue);
 568         } else if (node instanceof LogicConstantNode) {
 569             return gen.emitMove(((LogicConstantNode) node).getValue() ? trueValue : falseValue);
 570         } else if (node instanceof IntegerTestNode) {
 571             IntegerTestNode test = (IntegerTestNode) node;
 572             return gen.emitIntegerTestMove(operand(test.getX()), operand(test.getY()), trueValue, falseValue);
 573         } else {
 574             throw GraalError.unimplemented(node.toString());
 575         }
 576     }
 577 
 578     @Override
 579     public void emitInvoke(Invoke x) {
 580         LoweredCallTargetNode callTarget = (LoweredCallTargetNode) x.callTarget();
 581         FrameMapBuilder frameMapBuilder = gen.getResult().getFrameMapBuilder();
 582         CallingConvention invokeCc = frameMapBuilder.getRegisterConfig().getCallingConvention(callTarget.callType(), x.asNode().stamp().javaType(gen.getMetaAccess()), callTarget.signature(), gen);
 583         frameMapBuilder.callsMethod(invokeCc);
 584 
 585         Value[] parameters = visitInvokeArguments(invokeCc, callTarget.arguments());
 586 
 587         LabelRef exceptionEdge = null;
 588         if (x instanceof InvokeWithExceptionNode) {
 589             exceptionEdge = getLIRBlock(((InvokeWithExceptionNode) x).exceptionEdge());
 590         }
 591         LIRFrameState callState = stateWithExceptionEdge(x, exceptionEdge);
 592 
 593         Value result = invokeCc.getReturn();
 594         if (callTarget instanceof DirectCallTargetNode) {
 595             emitDirectCall((DirectCallTargetNode) callTarget, result, parameters, AllocatableValue.NONE, callState);
 596         } else if (callTarget instanceof IndirectCallTargetNode) {
 597             emitIndirectCall((IndirectCallTargetNode) callTarget, result, parameters, AllocatableValue.NONE, callState);
 598         } else {
 599             throw GraalError.shouldNotReachHere();
 600         }
 601 
 602         if (isLegal(result)) {
 603             setResult(x.asNode(), gen.emitMove(result));


< prev index next >