Title: [196280] trunk/Source/_javascript_Core
Revision
196280
Author
fpi...@apple.com
Date
2016-02-08 17:06:23 -0800 (Mon, 08 Feb 2016)

Log Message

B3::foldPathConstants() needs to execute its insertion set
https://bugs.webkit.org/show_bug.cgi?id=154020

Reviewed by Saam Barati.

* b3/B3FoldPathConstants.cpp:
* b3/testb3.cpp:
(JSC::B3::testFoldPathEqual): Added this. It used to crash in validation.
(JSC::B3::run):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (196279 => 196280)


--- trunk/Source/_javascript_Core/ChangeLog	2016-02-08 23:29:38 UTC (rev 196279)
+++ trunk/Source/_javascript_Core/ChangeLog	2016-02-09 01:06:23 UTC (rev 196280)
@@ -1,3 +1,15 @@
+2016-02-08  Filip Pizlo  <fpi...@apple.com>
+
+        B3::foldPathConstants() needs to execute its insertion set
+        https://bugs.webkit.org/show_bug.cgi?id=154020
+
+        Reviewed by Saam Barati.
+
+        * b3/B3FoldPathConstants.cpp:
+        * b3/testb3.cpp:
+        (JSC::B3::testFoldPathEqual): Added this. It used to crash in validation.
+        (JSC::B3::run):
+
 2016-02-08  Yusuke Suzuki  <utatane....@gmail.com>
 
         [JSC] Introduce @isObject bytecode intrinsic and use it instead of JS implemented one

Modified: trunk/Source/_javascript_Core/b3/B3FoldPathConstants.cpp (196279 => 196280)


--- trunk/Source/_javascript_Core/b3/B3FoldPathConstants.cpp	2016-02-08 23:29:38 UTC (rev 196279)
+++ trunk/Source/_javascript_Core/b3/B3FoldPathConstants.cpp	2016-02-09 01:06:23 UTC (rev 196280)
@@ -194,6 +194,7 @@
                         child = override.valueNode;
                 }
             }
+            m_insertionSet.execute(block);
         }
 
         if (changed) {

Modified: trunk/Source/_javascript_Core/b3/testb3.cpp (196279 => 196280)


--- trunk/Source/_javascript_Core/b3/testb3.cpp	2016-02-08 23:29:38 UTC (rev 196279)
+++ trunk/Source/_javascript_Core/b3/testb3.cpp	2016-02-09 01:06:23 UTC (rev 196280)
@@ -10037,6 +10037,34 @@
     compile(proc);
 }
 
+void testFoldPathEqual()
+{
+    Procedure proc;
+    BasicBlock* root = proc.addBlock();
+    BasicBlock* thenBlock = proc.addBlock();
+    BasicBlock* elseBlock = proc.addBlock();
+
+    Value* arg = root->appendNew<ArgumentRegValue>(proc, Origin(), GPRInfo::argumentGPR0);
+
+    root->appendNew<ControlValue>(
+        proc, Branch, Origin(), arg, FrequentedBlock(thenBlock), FrequentedBlock(elseBlock));
+
+    thenBlock->appendNew<ControlValue>(
+        proc, Return, Origin(),
+        thenBlock->appendNew<Value>(
+            proc, Equal, Origin(), arg, thenBlock->appendNew<ConstPtrValue>(proc, Origin(), 0)));
+
+    elseBlock->appendNew<ControlValue>(
+        proc, Return, Origin(),
+        elseBlock->appendNew<Value>(
+            proc, Equal, Origin(), arg, elseBlock->appendNew<ConstPtrValue>(proc, Origin(), 0)));
+
+    auto code = compile(proc);
+    CHECK(invoke<intptr_t>(*code, 0) == 1);
+    CHECK(invoke<intptr_t>(*code, 1) == 0);
+    CHECK(invoke<intptr_t>(*code, 42) == 0);
+}
+
 // Make sure the compiler does not try to optimize anything out.
 NEVER_INLINE double zero()
 {
@@ -11435,10 +11463,9 @@
     RUN(testSShrShl64(-42000000000, 8, 8));
 
     RUN(testCheckMul64SShr());
-
     RUN(testComputeDivisionMagic<int32_t>(2, -2147483647, 0));
-
     RUN(testTrivialInfiniteLoop());
+    RUN(testFoldPathEqual());
 
     if (tasks.isEmpty())
         usage();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to