- Source/JavaScriptCore/ChangeLog +24 lines
Lines 1-3 Source/JavaScriptCore/ChangeLog_sec1
1
2015-09-01  Filip Pizlo  <fpizlo@apple.com>
2
3
        DFG AI assertions about not having to do type checks at the point of a Known use kind are unsound
4
        https://bugs.webkit.org/show_bug.cgi?id=148649
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        We often generate IR like:
9
10
        Check(Int32:@x)
11
        ...
12
        Foo(KnownInt32:@x)
13
14
        It would be valid for any optimization that somehow proves the type of @x to remove the
15
        Check node entirely. But then, AI might fail on an assertion at Foo() because of the
16
        KnownInt32 use kind, if AI isn't smart enough to construct the same proof that the former
17
        optimization used for removing the Check.
18
19
        The correct solution is to remove the compile-time assertions about Known use kinds
20
        having already been checked.
21
22
        * dfg/DFGAbstractInterpreterInlines.h:
23
        (JSC::DFG::AbstractInterpreter<AbstractStateType>::verifyEdge):
24
1
2015-08-31  Yusuke Suzuki  <utatane.tea@gmail.com>
25
2015-08-31  Yusuke Suzuki  <utatane.tea@gmail.com>
2
26
3
        [ES6] Introduce ModuleProgramExecutable families and compile Module code to bytecode
27
        [ES6] Introduce ModuleProgramExecutable families and compile Module code to bytecode
- Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h +6 lines
Lines 108-113 void AbstractInterpreter<AbstractStateTy Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h_sec1
108
template<typename AbstractStateType>
108
template<typename AbstractStateType>
109
void AbstractInterpreter<AbstractStateType>::verifyEdge(Node* node, Edge edge)
109
void AbstractInterpreter<AbstractStateType>::verifyEdge(Node* node, Edge edge)
110
{
110
{
111
    // Some use kinds are required to not have checks, because we know somehow that the incoming
112
    // value will already have the type we want. In those cases, AI may not be smart enough to
113
    // prove that this is indeed the case.
114
    if (shouldNotHaveTypeCheck(edge.useKind()))
115
        return;
116
    
111
    if (!(forNode(edge).m_type & ~typeFilterFor(edge.useKind())))
117
    if (!(forNode(edge).m_type & ~typeFilterFor(edge.useKind())))
112
        return;
118
        return;
113
    
119
    

Return to Bug 148649