Mercurial > hg > graal-compiler
comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/node/NodeCodeGenerator.java @ 13275:bd5c996b5d25
Truffle-DSL: fixed wrong transferToInterpreter with transferToInterpreterAndInvalidate.
author | Christian Humer <christian.humer@gmail.com> |
---|---|
date | Thu, 05 Dec 2013 13:39:08 +0100 |
parents | 0b8335a4fb13 |
children | 25ecb47a6d0e |
comparison
equal
deleted
inserted
replaced
13274:e4862151eefd | 13275:bd5c996b5d25 |
---|---|
476 | 476 |
477 protected CodeTree createExpectType(TypeSystemData typeSystem, TypeData sourceType, TypeData targetType, CodeTree expression) { | 477 protected CodeTree createExpectType(TypeSystemData typeSystem, TypeData sourceType, TypeData targetType, CodeTree expression) { |
478 return createCastType(typeSystem, sourceType, targetType, true, expression); | 478 return createCastType(typeSystem, sourceType, targetType, true, expression); |
479 } | 479 } |
480 | 480 |
481 public CodeTree createDeoptimize(CodeTreeBuilder parent) { | |
482 CodeTreeBuilder builder = new CodeTreeBuilder(parent); | |
483 builder.startStatement(); | |
484 builder.startStaticCall(getContext().getTruffleTypes().getCompilerDirectives(), "transferToInterpreterAndInvalidate").end(); | |
485 builder.end(); | |
486 return builder.getRoot(); | |
487 } | |
488 | |
481 private class NodeFactoryFactory extends ClassElementFactory<NodeData> { | 489 private class NodeFactoryFactory extends ClassElementFactory<NodeData> { |
482 | 490 |
483 private final Map<NodeData, List<TypeElement>> childTypes; | 491 private final Map<NodeData, List<TypeElement>> childTypes; |
484 private CodeTypeElement generatedNode; | 492 private CodeTypeElement generatedNode; |
485 | 493 |
2468 builder.end(); // statement | 2476 builder.end(); // statement |
2469 | 2477 |
2470 return builder.getRoot(); | 2478 return builder.getRoot(); |
2471 } | 2479 } |
2472 | 2480 |
2473 protected CodeTree createDeoptimize(CodeTreeBuilder parent) { | |
2474 CodeTreeBuilder builder = new CodeTreeBuilder(parent); | |
2475 builder.startStatement(); | |
2476 builder.startStaticCall(getContext().getTruffleTypes().getCompilerDirectives(), "transferToInterpreter").end(); | |
2477 builder.end(); | |
2478 return builder.getRoot(); | |
2479 } | |
2480 | |
2481 protected CodeTree createReturnExecuteAndSpecialize(CodeTreeBuilder parent, ExecutableTypeData executable, SpecializationData current, ActualParameter exceptionParam, String reason) { | 2481 protected CodeTree createReturnExecuteAndSpecialize(CodeTreeBuilder parent, ExecutableTypeData executable, SpecializationData current, ActualParameter exceptionParam, String reason) { |
2482 NodeData node = current.getNode(); | 2482 NodeData node = current.getNode(); |
2483 SpecializationData generic = node.getGenericSpecialization(); | 2483 SpecializationData generic = node.getGenericSpecialization(); |
2484 CodeTreeBuilder specializeCall = new CodeTreeBuilder(parent); | 2484 CodeTreeBuilder specializeCall = new CodeTreeBuilder(parent); |
2485 specializeCall.startCall(EXECUTE_SPECIALIZE_NAME); | 2485 specializeCall.startCall(EXECUTE_SPECIALIZE_NAME); |
2784 | 2784 |
2785 private CodeTree createAppendPolymorphic(CodeTreeBuilder parent, SpecializationData specialization) { | 2785 private CodeTree createAppendPolymorphic(CodeTreeBuilder parent, SpecializationData specialization) { |
2786 NodeData node = specialization.getNode(); | 2786 NodeData node = specialization.getNode(); |
2787 | 2787 |
2788 CodeTreeBuilder builder = new CodeTreeBuilder(parent); | 2788 CodeTreeBuilder builder = new CodeTreeBuilder(parent); |
2789 builder.startStatement().startStaticCall(getContext().getTruffleTypes().getCompilerDirectives(), "transferToInterpreter").end().end(); | 2789 builder.tree(createDeoptimize(builder)); |
2790 | 2790 |
2791 builder.declaration(getContext().getTruffleTypes().getNode(), "root", "this"); | 2791 builder.declaration(getContext().getTruffleTypes().getNode(), "root", "this"); |
2792 builder.declaration(getContext().getType(int.class), "depth", "0"); | 2792 builder.declaration(getContext().getType(int.class), "depth", "0"); |
2793 builder.tree(createFindRoot(builder, node, true)); | 2793 builder.tree(createFindRoot(builder, node, true)); |
2794 builder.newLine(); | 2794 builder.newLine(); |