Mercurial > hg > graal-compiler
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 } |