- Source/JavaScriptCore/ChangeLog +26 lines
Lines 1-3 Source/JavaScriptCore/ChangeLog_sec1
1
2013-07-18  Filip Pizlo  <fpizlo@apple.com>
2
3
        fourthTier: CFA should consider live-at-head for clobbering and dumping
4
        https://bugs.webkit.org/show_bug.cgi?id=118857
5
6
        Reviewed by NOBODY (OOPS!).
7
        
8
        - clobberStructures() was not considering nodes live-at-head when in SSA
9
          form. This means it would fail to clobber some structures.
10
        
11
        - dump() was not considering nodes live-at-head when in SSA form. This
12
          means it wouldn't dump everything that you might be interested in.
13
        
14
        - AbstractState::m_currentNode is a useless variable and we should get
15
          rid of it.
16
17
        * dfg/DFGAbstractState.cpp:
18
        (JSC::DFG::AbstractState::AbstractState):
19
        (JSC::DFG::AbstractState::beginBasicBlock):
20
        (JSC::DFG::AbstractState::reset):
21
        (JSC::DFG::AbstractState::startExecuting):
22
        (JSC::DFG::AbstractState::clobberStructures):
23
        (JSC::DFG::AbstractState::dump):
24
        * dfg/DFGAbstractState.h:
25
        (AbstractState):
26
1
2013-07-16  Filip Pizlo  <fpizlo@apple.com>
27
2013-07-16  Filip Pizlo  <fpizlo@apple.com>
2
28
3
        fourthTier: Add a phase to create loop pre-headers
29
        fourthTier: Add a phase to create loop pre-headers
- Source/JavaScriptCore/dfg/DFGAbstractState.cpp -17 / +20 lines
Lines 42-48 AbstractState::AbstractState(Graph& grap Source/JavaScriptCore/dfg/DFGAbstractState.cpp_sec1
42
    , m_graph(graph)
42
    , m_graph(graph)
43
    , m_variables(m_codeBlock->numParameters(), graph.m_localVars)
43
    , m_variables(m_codeBlock->numParameters(), graph.m_localVars)
44
    , m_block(0)
44
    , m_block(0)
45
    , m_currentNode(0)
46
{
45
{
47
}
46
}
48
47
Lines 90-96 void AbstractState::beginBasicBlock(Basi Source/JavaScriptCore/dfg/DFGAbstractState.cpp_sec2
90
    m_isValid = true;
89
    m_isValid = true;
91
    m_foundConstants = false;
90
    m_foundConstants = false;
92
    m_branchDirection = InvalidBranchDirection;
91
    m_branchDirection = InvalidBranchDirection;
93
    m_currentNode = 0;
94
}
92
}
95
93
96
static void setLiveValues(HashMap<Node*, AbstractValue>& values, HashSet<Node*>& live)
94
static void setLiveValues(HashMap<Node*, AbstractValue>& values, HashSet<Node*>& live)
Lines 262-268 void AbstractState::reset() Source/JavaScriptCore/dfg/DFGAbstractState.cpp_sec3
262
    m_block = 0;
260
    m_block = 0;
263
    m_isValid = false;
261
    m_isValid = false;
264
    m_branchDirection = InvalidBranchDirection;
262
    m_branchDirection = InvalidBranchDirection;
265
    m_currentNode = 0;
266
}
263
}
267
264
268
AbstractState::BooleanResult AbstractState::booleanResult(Node* node, AbstractValue& value)
265
AbstractState::BooleanResult AbstractState::booleanResult(Node* node, AbstractValue& value)
Lines 295-307 bool AbstractState::startExecuting(Node* Source/JavaScriptCore/dfg/DFGAbstractState.cpp_sec4
295
    
292
    
296
    node->setCanExit(false);
293
    node->setCanExit(false);
297
    
294
    
298
    if (!node->shouldGenerate()) {
295
    return node->shouldGenerate();
299
        m_currentNode = 0;
300
        return false;
301
    }
302
    
303
    m_currentNode = node;
304
    return true;
305
}
296
}
306
297
307
bool AbstractState::startExecuting(unsigned indexInBlock)
298
bool AbstractState::startExecuting(unsigned indexInBlock)
Lines 1747-1752 inline void AbstractState::clobberStruct Source/JavaScriptCore/dfg/DFGAbstractState.cpp_sec5
1747
        return;
1738
        return;
1748
    for (size_t i = indexInBlock + 1; i--;)
1739
    for (size_t i = indexInBlock + 1; i--;)
1749
        forNode(m_block->at(i)).clobberStructures();
1740
        forNode(m_block->at(i)).clobberStructures();
1741
    if (m_graph.m_form == SSA) {
1742
        HashSet<Node*>::iterator iter = m_block->ssa->liveAtHead.begin();
1743
        HashSet<Node*>::iterator end = m_block->ssa->liveAtHead.end();
1744
        for (; iter != end; ++iter)
1745
            forNode(*iter).clobberStructures();
1746
    }
1750
    for (size_t i = m_variables.numberOfArguments(); i--;)
1747
    for (size_t i = m_variables.numberOfArguments(); i--;)
1751
        m_variables.argument(i).clobberStructures();
1748
        m_variables.argument(i).clobberStructures();
1752
    for (size_t i = m_variables.numberOfLocals(); i--;)
1749
    for (size_t i = m_variables.numberOfLocals(); i--;)
Lines 1959-1976 inline bool AbstractState::mergeVariable Source/JavaScriptCore/dfg/DFGAbstractState.cpp_sec6
1959
1956
1960
void AbstractState::dump(PrintStream& out)
1957
void AbstractState::dump(PrintStream& out)
1961
{
1958
{
1962
    bool first = true;
1959
    CommaPrinter comma(" ");
1960
    if (m_graph.m_form == SSA) {
1961
        HashSet<Node*>::iterator iter = m_block->ssa->liveAtHead.begin();
1962
        HashSet<Node*>::iterator end = m_block->ssa->liveAtHead.end();
1963
        for (; iter != end; ++iter) {
1964
            Node* node = *iter;
1965
            AbstractValue& value = forNode(node);
1966
            if (value.isClear())
1967
                continue;
1968
            out.print(comma, node, ":", value);
1969
        }
1970
    }
1963
    for (size_t i = 0; i < m_block->size(); ++i) {
1971
    for (size_t i = 0; i < m_block->size(); ++i) {
1964
        Node* node = m_block->at(i);
1972
        Node* node = m_block->at(i);
1965
        AbstractValue& value = forNode(node);
1973
        AbstractValue& value = forNode(node);
1966
        if (value.isClear())
1974
        if (value.isClear())
1967
            continue;
1975
            continue;
1968
        if (first)
1976
        out.print(comma, node, ":", value);
1969
            first = false;
1970
        else
1971
            out.printf(" ");
1972
        out.printf("@%lu:", static_cast<unsigned long>(node->index()));
1973
        value.dump(out);
1974
    }
1977
    }
1975
}
1978
}
1976
1979
- Source/JavaScriptCore/dfg/DFGAbstractState.h -1 lines
Lines 313-319 private: Source/JavaScriptCore/dfg/DFGAbstractState.h_sec1
313
    
313
    
314
    Operands<AbstractValue> m_variables;
314
    Operands<AbstractValue> m_variables;
315
    BasicBlock* m_block;
315
    BasicBlock* m_block;
316
    Node* m_currentNode;
317
    
316
    
318
    bool m_haveStructures;
317
    bool m_haveStructures;
319
    bool m_foundConstants;
318
    bool m_foundConstants;

Return to Bug 118857