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 11:01:26 UTC
svn commit: r532673 - in /harmony/enhanced/drlvm/trunk:
src/test/regression/H3738/ src/test/regression/H3738/Test.java
src/test/regression/H3738/run.test.xml
vm/jitrino/src/codegenerator/ia32/Ia32I8Lowerer.cpp
Author: varlax
Date: Thu Apr 26 02:01:25 2007
New Revision: 532673
URL: http://svn.apache.org/viewvc?view=rev&rev=532673
Log:
Applied HARMONY-3738 [drlvm][jit][vmmagic] I8Lowerer does not eliminate all I8PseudoInsts when address arithmetic with vmmagics is used.
Added:
harmony/enhanced/drlvm/trunk/src/test/regression/H3738/
harmony/enhanced/drlvm/trunk/src/test/regression/H3738/Test.java
harmony/enhanced/drlvm/trunk/src/test/regression/H3738/run.test.xml
Modified:
harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32I8Lowerer.cpp
Added: harmony/enhanced/drlvm/trunk/src/test/regression/H3738/Test.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H3738/Test.java?view=auto&rev=532673
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H3738/Test.java (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H3738/Test.java Thu Apr 26 02:01:25 2007
@@ -0,0 +1,17 @@
+package org.apache.harmony.drlvm.tests.regression.h3738;
+
+import junit.framework.TestCase;
+import org.vmmagic.unboxed.*;
+
+public class Test extends TestCase {
+
+ static Address a;
+ static long val;
+
+ public static void test() {
+ a = Address.fromLong(1L);
+ //crash in I8Lowerer here
+ val = a.toLong();
+ }
+}
+
Added: harmony/enhanced/drlvm/trunk/src/test/regression/H3738/run.test.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/src/test/regression/H3738/run.test.xml?view=auto&rev=532673
==============================================================================
--- harmony/enhanced/drlvm/trunk/src/test/regression/H3738/run.test.xml (added)
+++ harmony/enhanced/drlvm/trunk/src/test/regression/H3738/run.test.xml Thu Apr 26 02:01:25 2007
@@ -0,0 +1,8 @@
+<project name="RUN HARMONY-3738 Regression Test">
+ <target name="run-test">
+ <run-junit-test
+ test="org.apache.harmony.drlvm.tests.regression.h3738.Test"
+ vmarg="-Xem:opt">
+ </run-junit-test>
+ </target>
+</project>
Modified: harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32I8Lowerer.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32I8Lowerer.cpp?view=diff&rev=532673&r1=532672&r2=532673
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32I8Lowerer.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/jitrino/src/codegenerator/ia32/Ia32I8Lowerer.cpp Thu Apr 26 02:01:25 2007
@@ -199,6 +199,8 @@
{ return src1%src2; }
+static void checkIR(IRManager* irm);
+
void I8Lowerer::runImpl()
{
// I8 operation internal helpers
@@ -310,6 +312,8 @@
}
}
}
+
+ checkIR(irManager);
}
void I8Lowerer::processOpnds(Inst * inst)
@@ -415,8 +419,13 @@
//setns hi ; if lo is positive, then load 1 into hi
//sub hi, 1 ; if lo is positive, then hi is now '0'. otherwise, it's -1
irManager->newInstEx(Mnemonic_CDQ, 1, dst_2, dst_1)->insertBefore(inst);
- inst->unlink();
+ } else {
+ //fill upper word with 0
+ assert(mn == Mnemonic_MOVZX);
+ Opnd* imm0=irManager->newImmOpnd(irManager->getTypeManager().getInt32Type(), 0);
+ irManager->newInstEx(Mnemonic_MOV, 1, dst_2, imm0)->insertBefore(inst);
}
+ inst->unlink();
break;
case Mnemonic_PUSH :
assert(src1_1);
@@ -1359,5 +1368,20 @@
}
}
+//IR verification routine.
+//checks that there are no I8Pseudo insts left in CFG after the pass
+static void checkIR(IRManager* irm) {
+#ifdef _DEBUG
+ const Nodes& nodes = irm->getFlowGraph()->getNodes();
+ for (Nodes::const_iterator it = nodes.begin(), end = nodes.end(); it!=end; ++it) {
+ Node* node = *it;
+ for (Inst* inst = (Inst*)node->getFirstInst(); inst!=NULL; inst = inst->getNextInst()) {
+ assert(!inst->hasKind(Inst::Kind_I8PseudoInst));
+ }
+ }
+#endif
+}
+
}}
+