Reviewers: Michael Starzinger,

Message:
PTAL.

Description:
Fix NegateCompareOp and InvertCompareOp

BUG=v8:2537


Please review this at https://codereview.chromium.org/12217136/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files:
  M src/token.h
  A + test/mjsunit/regress/regress-2537.js


Index: src/token.h
diff --git a/src/token.h b/src/token.h
index 863ba6285760d4f8a015b9d22dab7962584aecf0..f46f496e566b13ebddc4e55daf424beeb4ba7401 100644
--- a/src/token.h
+++ b/src/token.h
@@ -230,6 +230,7 @@ class Token {
       case EQ: return NE;
       case NE: return EQ;
       case EQ_STRICT: return NE_STRICT;
+      case NE_STRICT: return EQ_STRICT;
       case LT: return GTE;
       case GT: return LTE;
       case LTE: return GT;
@@ -242,9 +243,10 @@ class Token {
   static Value InvertCompareOp(Value op) {
     ASSERT(IsCompareOp(op));
     switch (op) {
-      case EQ: return NE;
-      case NE: return EQ;
-      case EQ_STRICT: return NE_STRICT;
+      case EQ: return EQ;
+      case NE: return NE;
+      case EQ_STRICT: return EQ_STRICT;
+      case NE_STRICT: return NE_STRICT;
       case LT: return GT;
       case GT: return LT;
       case LTE: return GTE;
Index: test/mjsunit/regress/regress-2537.js
diff --git a/test/mjsunit/regress/regress-171641.js b/test/mjsunit/regress/regress-2537.js
similarity index 81%
copy from test/mjsunit/regress/regress-171641.js
copy to test/mjsunit/regress/regress-2537.js
index 8db6781821325f8f6253eb2df4abb2b362b001c0..c6b5af949055daefaabea64c1c11e775af324da3 100644
--- a/test/mjsunit/regress/regress-171641.js
+++ b/test/mjsunit/regress/regress-2537.js
@@ -27,14 +27,19 @@

 // Flags: --allow-natives-syntax

-function foo(k, p) {
-  for (var i = 0; i < 1; i++) {
-    p = Math.min(p, i);
+var large_int = 0x40000000;
+
+function foo(x, expected) {
+  assertEquals(expected, x);  // This succeeds.
+ x += 0; // Force int32 representation so that CompareIDAndBranch is used.
+  if (3 != x) {
+    x += 0;  // Poor man's "iDef".
+    // Fails due to Smi-tagging without overflow check.
+    assertEquals(expected, x);
   }
-  m = Math.floor((k | 0) / p);
 }

-foo(0, 1);
-foo(0, 1);
+foo(1, 1);
+foo(3, 3);
 %OptimizeFunctionOnNextCall(foo);
-foo(0, 1);
+foo(large_int, large_int);


--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to