You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by va...@apache.org on 2007/04/26 12:34:56 UTC
svn commit: r532693 - in /harmony/enhanced/drlvm/trunk:
src/test/regression/H1840/run.test.xml vm/jitrino/src/optimizer/FlowGraph.cpp
Author: varlax
Date: Thu Apr 26 03:34:52 2007
New Revision: 532693
URL: http://svn.apache.org/viewvc?view=rev&rev=532693
Log:
Applied HARMONY-1841 [drlvm][jit] Jitrino OPT crashes when returnAddress is on the top of the stack before astore or astore_<n> instruction
Modified:
harmony/enhanced/drlvm/trunk/src/test/regression/H1840/run.test.xml
harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp
Modified: harmony/enhanced/drlvm/trunk/src/test/regression/H1840/run.test.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H1840/run.test.xml?view=diff&rev=532693&r1=532692&r2=532693
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H1840/run.test.xml (original)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H1840/run.test.xml Thu Apr 26 03:34:52 2007
@@ -4,6 +4,10 @@
test="org.apache.harmony.drlvm.tests.regression.h1840.SimplestTest"
vmarg="-Xem:jet -XX:-vm.assert_dialog">
</run-junit-test>
+ <run-junit-test
+ test="org.apache.harmony.drlvm.tests.regression.h1840.SimplestTest"
+ vmarg="-Xem:opt -XX:-vm.assert_dialog">
+ </run-junit-test>
</target>
</project>
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp?view=diff&rev=532693&r1=532692&r2=532693
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/optimizer/FlowGraph.cpp Thu Apr 26 03:34:52 2007
@@ -537,17 +537,18 @@
++eiter;
Node *node = edge->getSourceNode();
Inst* last = (Inst*)node->getLastInst();
- assert(last->isJSR());
- last->unlink();
- assert(node->getOutDegree() == 2);
- Node* t1 = node->getOutEdges().front()->getTargetNode();
- Node* t2 = node->getOutEdges().back()->getTargetNode();
- if(t1 == entryJSR) {
- fg.removeEdge(node, t2);
+ if (last->isJSR()) {
+ last->unlink();
}
- else {
- assert(t2 == entryJSR);
- fg.removeEdge(node, t1);
+ if (node->getOutDegree() == 2) {
+ Node* t1 = node->getOutEdges().front()->getTargetNode();
+ Node* t2 = node->getOutEdges().back()->getTargetNode();
+ if(t1 == entryJSR) {
+ fg.removeEdge(node, t2);
+ } else {
+ assert(t2 == entryJSR);
+ fg.removeEdge(node, t1);
+ }
}
}
} else if (entryJSR->hasOnlyOnePredEdge()) {