comparison graal/com.oracle.truffle.dsl.processor/src/com/oracle/truffle/dsl/processor/generator/NodeGenFactory.java @ 18777:76cbf5f33f82

Truffle-DSL: fixed bug for polymorphic execute optimization.
author Christian Humer <christian.humer@gmail.com>
date Mon, 05 Jan 2015 02:38:44 +0100
parents c0fb70634640
children f4d78e4a878d
comparison
equal deleted inserted replaced
18776:c0fb70634640 18777:76cbf5f33f82
1722 for (ExecutableTypeData executableType : specializedExecutables) { 1722 for (ExecutableTypeData executableType : specializedExecutables) {
1723 hasSpecializedTypes = polyChainBuilder.startIf(hasSpecializedTypes); 1723 hasSpecializedTypes = polyChainBuilder.startIf(hasSpecializedTypes);
1724 polyChainBuilder.tree(TypeSystemCodeGenerator.check(executableType.getType(), CodeTreeBuilder.singleString(valueFieldName))); 1724 polyChainBuilder.tree(TypeSystemCodeGenerator.check(executableType.getType(), CodeTreeBuilder.singleString(valueFieldName)));
1725 polyChainBuilder.end(); 1725 polyChainBuilder.end();
1726 polyChainBuilder.startBlock(); 1726 polyChainBuilder.startBlock();
1727 polyChainBuilder.startStatement().string(profileField).string(" = ").typeLiteral(executableType.getType().getPrimitiveType()).end(); 1727 polyChainBuilder.startStatement().tree(accessParent(profileField)).string(" = ").typeLiteral(executableType.getType().getPrimitiveType()).end();
1728 polyChainBuilder.end(); 1728 polyChainBuilder.end();
1729 } 1729 }
1730 1730
1731 polyChainBuilder.startElseBlock(); 1731 polyChainBuilder.startElseBlock();
1732 polyChainBuilder.startStatement().string(profileField).string(" = ").typeLiteral(genericType.getPrimitiveType()).end(); 1732 polyChainBuilder.startStatement().tree(accessParent(profileField)).string(" = ").typeLiteral(genericType.getPrimitiveType()).end();
1733 polyChainBuilder.end(); 1733 polyChainBuilder.end();
1734 polyChainBuilder.startReturn().string(valueFieldName).end(); 1734 polyChainBuilder.startReturn().string(valueFieldName).end();
1735 polyChainBuilder.end(); 1735 polyChainBuilder.end();
1736 1736
1737 // else -> execute generic 1737 // else -> execute generic
1743 if (encounteredUnexpectedResult) { 1743 if (encounteredUnexpectedResult) {
1744 builder.startTryBlock(); 1744 builder.startTryBlock();
1745 builder.tree(executePolymorphic); 1745 builder.tree(executePolymorphic);
1746 builder.end(); 1746 builder.end();
1747 builder.startCatchBlock(getType(UnexpectedResultException.class), "ex"); 1747 builder.startCatchBlock(getType(UnexpectedResultException.class), "ex");
1748 builder.startStatement().string(profileField).string(" = ").typeLiteral(genericType.getPrimitiveType()).end(); 1748 builder.startStatement().tree(accessParent(profileField)).string(" = ").typeLiteral(genericType.getPrimitiveType()).end();
1749 builder.startReturn().string("ex.getResult()").end(); 1749 builder.startReturn().string("ex.getResult()").end();
1750 builder.end(); 1750 builder.end();
1751 } else { 1751 } else {
1752 builder.tree(executePolymorphic); 1752 builder.tree(executePolymorphic);
1753 } 1753 }