Changeset 188883 in webkit


Ignore:
Timestamp:
Aug 24, 2015 2:41:37 PM (9 years ago)
Author:
basile_clement@apple.com
Message:

jsc-tailcall: We can't assert that registers are flushed when making a tail call
https://bugs.webkit.org/show_bug.cgi?id=148396

Reviewed by Michael Saboff.

We should be able to assert that registers are flushed when making a
tail call, since no additional code should ever be executed after the
tail call. However, because we can have Phantom() nodes keeping values
alive across a tail call, this assertion can (and does) fail in some
cases - even though those nodes are dead nodes that will not actually
generate any code. So we can't have the assertion.

  • dfg/DFGSpeculativeJIT32_64.cpp:

(JSC::DFG::SpeculativeJIT::emitCall):

  • dfg/DFGSpeculativeJIT64.cpp:

(JSC::DFG::SpeculativeJIT::emitCall):

Location:
branches/jsc-tailcall/Source/JavaScriptCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/jsc-tailcall/Source/JavaScriptCore/ChangeLog

    r188882 r188883  
     12015-08-24  Basile Clement  <basile_clement@apple.com>
     2
     3        jsc-tailcall: We can't assert that registers are flushed when making a tail call
     4        https://bugs.webkit.org/show_bug.cgi?id=148396
     5
     6        Reviewed by Michael Saboff.
     7
     8        We should be able to assert that registers are flushed when making a
     9        tail call, since no additional code should ever be executed after the
     10        tail call. However, because we can have Phantom() nodes keeping values
     11        alive across a tail call, this assertion can (and does) fail in some
     12        cases - even though those nodes are dead nodes that will not actually
     13        generate any code. So we can't have the assertion.
     14
     15        * dfg/DFGSpeculativeJIT32_64.cpp:
     16        (JSC::DFG::SpeculativeJIT::emitCall):
     17        * dfg/DFGSpeculativeJIT64.cpp:
     18        (JSC::DFG::SpeculativeJIT::emitCall):
     19
    1202015-08-24  Basile Clement  <basile_clement@apple.com>
    221
  • branches/jsc-tailcall/Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp

    r187868 r188883  
    820820    // the callee frame.
    821821    // https://bugs.webkit.org/show_bug.cgi?id=147508
    822     if (isTail)
    823         ASSERT(isFlushed());
    824     else
     822    if (!isTail)
    825823        flushRegisters();
    826824
  • branches/jsc-tailcall/Source/JavaScriptCore/dfg/DFGSpeculativeJIT64.cpp

    r188556 r188883  
    797797    // the callee frame.
    798798    // https://bugs.webkit.org/show_bug.cgi?id=147508
    799     if (isTail)
    800         ASSERT(isFlushed());
    801     else
     799    if (!isTail)
    802800        flushRegisters();
    803801
Note: See TracChangeset for help on using the changeset viewer.