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();