Ignore:
Timestamp:
Oct 18, 2013, 9:55:42 AM (12 years ago)
Author:
[email protected]
Message:

Fix a FlushLiveness problem.
https://bugs.webkit.org/show_bug.cgi?id=122984

Patch by Nadav Rotem <[email protected]> on 2013-10-18
Reviewed by Filip Pizlo.

Source/JavaScriptCore:

  • dfg/DFGFlushLivenessAnalysisPhase.cpp:

(JSC::DFG::FlushLivenessAnalysisPhase::process):

LayoutTests:

  • js/regress/script-tests/stepanov_container.js: Added.
  • js/regress/stepanov_container-expected.txt: Added.
  • js/regress/stepanov_container.html: Added.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/dfg/DFGFlushLivenessAnalysisPhase.cpp

    r156984 r157637  
    151151                // Three possibilities:
    152152                // 1) Predecessor format is Dead, in which case it acquires our format.
    153                 // 2) Predecessor format is identical to our format, in which case we
     153                // 2) Predecessor format is not Dead but our format is dead, in which
     154                //    case we acquire the predecessor format.
     155                // 3) Predecessor format is identical to our format, in which case we
    154156                //    do nothing.
    155                 // 3) Predecessor format is different from our format and it's not Dead,
     157                // 4) Predecessor format is different from our format and it's not Dead,
    156158                //    in which case we have an erroneous set of Flushes and SetLocals.
    157                
    158                 // FIXME: What if the predecessor was already processed by the fixpoint
    159                 // and says "not Dead" and the current block says "Dead"? We may want to
    160                 // revisit this, and say that this is is acceptable.
    161                
     159
    162160                if (!predecessorFlush) {
    163161                    predecessorFlush = myFlush;
    164162                    continue;
    165163                }
    166                
     164
     165                if (!myFlush) {
     166                    m_live[j] = predecessorFlush;
     167                    continue;
     168                }
     169
    167170                if (predecessorFlush == myFlush)
    168171                    continue;
Note: See TracChangeset for help on using the changeset viewer.