Fix bug in register assignment of IsObjectAndBranch.
authorfschneider@chromium.org <fschneider@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 28 Jun 2011 09:09:07 +0000 (09:09 +0000)
committerfschneider@chromium.org <fschneider@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Tue, 28 Jun 2011 09:09:07 +0000 (09:09 +0000)
Make sure that input and temp registers don't overlap.
Review URL: http://codereview.chromium.org/7273026

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@8443 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/arm/lithium-arm.cc
src/ia32/lithium-ia32.cc

index 9849f4a..3ec4ba1 100644 (file)
@@ -1098,7 +1098,7 @@ LInstruction* LChunkBuilder::DoTest(HTest* instr) {
     HIsObject* compare = HIsObject::cast(v);
     ASSERT(compare->value()->representation().IsTagged());
     LOperand* temp = TempRegister();
-    return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()), temp);
+    return new LIsObjectAndBranch(UseRegister(compare->value()), temp);
   } else if (v->IsCompareObjectEq()) {
     HCompareObjectEq* compare = HCompareObjectEq::cast(v);
     return new LCmpObjectEqAndBranch(UseRegisterAtStart(compare->left()),
index 9981991..1bece63 100644 (file)
@@ -1098,7 +1098,7 @@ LInstruction* LChunkBuilder::DoTest(HTest* instr) {
     ASSERT(compare->value()->representation().IsTagged());
     LOperand* temp1 = TempRegister();
     LOperand* temp2 = TempRegister();
-    return new LIsObjectAndBranch(UseRegisterAtStart(compare->value()),
+    return new LIsObjectAndBranch(UseRegister(compare->value()),
                                   temp1,
                                   temp2);
   } else if (v->IsCompareObjectEq()) {