Changeset 180317 in webkit


Ignore:
Timestamp:
Feb 18, 2015 3:52:16 PM (9 years ago)
Author:
msaboff@apple.com
Message:

Rollout r180247 & r180249 from trunk
https://bugs.webkit.org/show_bug.cgi?id=141773

Reviewed by Filip Pizlo.

Theses changes makes sense to fix the crash reported in https://bugs.webkit.org/show_bug.cgi?id=141730
only for branches. The change to fail the FTL compile but continue running is not comprehensive
enough for general use on trunk.

  • dfg/DFGPlan.cpp:

(JSC::DFG::Plan::compileInThreadImpl):

  • ftl/FTLLowerDFGToLLVM.cpp:

(JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM):
(JSC::FTL::LowerDFGToLLVM::lower):
(JSC::FTL::LowerDFGToLLVM::createPhiVariables):
(JSC::FTL::LowerDFGToLLVM::compileNode):
(JSC::FTL::LowerDFGToLLVM::compileUpsilon):
(JSC::FTL::LowerDFGToLLVM::compilePhi):
(JSC::FTL::LowerDFGToLLVM::compileDoubleRep):
(JSC::FTL::LowerDFGToLLVM::compileValueRep):
(JSC::FTL::LowerDFGToLLVM::compileValueToInt32):
(JSC::FTL::LowerDFGToLLVM::compilePutLocal):
(JSC::FTL::LowerDFGToLLVM::compileArithAddOrSub):
(JSC::FTL::LowerDFGToLLVM::compileArithMul):
(JSC::FTL::LowerDFGToLLVM::compileArithDiv):
(JSC::FTL::LowerDFGToLLVM::compileArithMod):
(JSC::FTL::LowerDFGToLLVM::compileArithMinOrMax):
(JSC::FTL::LowerDFGToLLVM::compileArithAbs):
(JSC::FTL::LowerDFGToLLVM::compileArithNegate):
(JSC::FTL::LowerDFGToLLVM::compileArrayifyToStructure):
(JSC::FTL::LowerDFGToLLVM::compileGetById):
(JSC::FTL::LowerDFGToLLVM::compileGetMyArgumentByVal):
(JSC::FTL::LowerDFGToLLVM::compileGetArrayLength):
(JSC::FTL::LowerDFGToLLVM::compileGetByVal):
(JSC::FTL::LowerDFGToLLVM::compilePutByVal):
(JSC::FTL::LowerDFGToLLVM::compileArrayPush):
(JSC::FTL::LowerDFGToLLVM::compileArrayPop):
(JSC::FTL::LowerDFGToLLVM::compileNewArray):
(JSC::FTL::LowerDFGToLLVM::compileToString):
(JSC::FTL::LowerDFGToLLVM::compileMakeRope):
(JSC::FTL::LowerDFGToLLVM::compileCompareEq):
(JSC::FTL::LowerDFGToLLVM::compileCompareStrictEq):
(JSC::FTL::LowerDFGToLLVM::compileSwitch):
(JSC::FTL::LowerDFGToLLVM::compare):
(JSC::FTL::LowerDFGToLLVM::boolify):
(JSC::FTL::LowerDFGToLLVM::opposite):
(JSC::FTL::LowerDFGToLLVM::lowJSValue):
(JSC::FTL::LowerDFGToLLVM::speculate):
(JSC::FTL::LowerDFGToLLVM::isArrayType):
(JSC::FTL::LowerDFGToLLVM::exitValueForAvailability):
(JSC::FTL::LowerDFGToLLVM::exitValueForNode):
(JSC::FTL::LowerDFGToLLVM::setInt52):
(JSC::FTL::lowerDFGToLLVM):
(JSC::FTL::LowerDFGToLLVM::loweringFailed): Deleted.

  • ftl/FTLLowerDFGToLLVM.h:
Location:
trunk/Source/JavaScriptCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r180279 r180317  
     12015-02-18  Michael Saboff  <msaboff@apple.com>
     2
     3        Rollout r180247 & r180249 from trunk
     4        https://bugs.webkit.org/show_bug.cgi?id=141773
     5
     6        Reviewed by Filip Pizlo.
     7
     8        Theses changes makes sense to fix the crash reported in https://bugs.webkit.org/show_bug.cgi?id=141730
     9        only for branches.  The change to fail the FTL compile but continue running is not comprehensive
     10        enough for general use on trunk.
     11
     12        * dfg/DFGPlan.cpp:
     13        (JSC::DFG::Plan::compileInThreadImpl):
     14        * ftl/FTLLowerDFGToLLVM.cpp:
     15        (JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM):
     16        (JSC::FTL::LowerDFGToLLVM::lower):
     17        (JSC::FTL::LowerDFGToLLVM::createPhiVariables):
     18        (JSC::FTL::LowerDFGToLLVM::compileNode):
     19        (JSC::FTL::LowerDFGToLLVM::compileUpsilon):
     20        (JSC::FTL::LowerDFGToLLVM::compilePhi):
     21        (JSC::FTL::LowerDFGToLLVM::compileDoubleRep):
     22        (JSC::FTL::LowerDFGToLLVM::compileValueRep):
     23        (JSC::FTL::LowerDFGToLLVM::compileValueToInt32):
     24        (JSC::FTL::LowerDFGToLLVM::compilePutLocal):
     25        (JSC::FTL::LowerDFGToLLVM::compileArithAddOrSub):
     26        (JSC::FTL::LowerDFGToLLVM::compileArithMul):
     27        (JSC::FTL::LowerDFGToLLVM::compileArithDiv):
     28        (JSC::FTL::LowerDFGToLLVM::compileArithMod):
     29        (JSC::FTL::LowerDFGToLLVM::compileArithMinOrMax):
     30        (JSC::FTL::LowerDFGToLLVM::compileArithAbs):
     31        (JSC::FTL::LowerDFGToLLVM::compileArithNegate):
     32        (JSC::FTL::LowerDFGToLLVM::compileArrayifyToStructure):
     33        (JSC::FTL::LowerDFGToLLVM::compileGetById):
     34        (JSC::FTL::LowerDFGToLLVM::compileGetMyArgumentByVal):
     35        (JSC::FTL::LowerDFGToLLVM::compileGetArrayLength):
     36        (JSC::FTL::LowerDFGToLLVM::compileGetByVal):
     37        (JSC::FTL::LowerDFGToLLVM::compilePutByVal):
     38        (JSC::FTL::LowerDFGToLLVM::compileArrayPush):
     39        (JSC::FTL::LowerDFGToLLVM::compileArrayPop):
     40        (JSC::FTL::LowerDFGToLLVM::compileNewArray):
     41        (JSC::FTL::LowerDFGToLLVM::compileToString):
     42        (JSC::FTL::LowerDFGToLLVM::compileMakeRope):
     43        (JSC::FTL::LowerDFGToLLVM::compileCompareEq):
     44        (JSC::FTL::LowerDFGToLLVM::compileCompareStrictEq):
     45        (JSC::FTL::LowerDFGToLLVM::compileSwitch):
     46        (JSC::FTL::LowerDFGToLLVM::compare):
     47        (JSC::FTL::LowerDFGToLLVM::boolify):
     48        (JSC::FTL::LowerDFGToLLVM::opposite):
     49        (JSC::FTL::LowerDFGToLLVM::lowJSValue):
     50        (JSC::FTL::LowerDFGToLLVM::speculate):
     51        (JSC::FTL::LowerDFGToLLVM::isArrayType):
     52        (JSC::FTL::LowerDFGToLLVM::exitValueForAvailability):
     53        (JSC::FTL::LowerDFGToLLVM::exitValueForNode):
     54        (JSC::FTL::LowerDFGToLLVM::setInt52):
     55        (JSC::FTL::lowerDFGToLLVM):
     56        (JSC::FTL::LowerDFGToLLVM::loweringFailed): Deleted.
     57        * ftl/FTLLowerDFGToLLVM.h:
     58
    1592015-02-18  Filip Pizlo  <fpizlo@apple.com>
    260
  • trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp

    r180279 r180317  
    387387
    388388        FTL::State state(dfg);
    389         if (!FTL::lowerDFGToLLVM(state)) {
    390             FTL::fail(state);
    391             return FTLPath;
    392         }
     389        FTL::lowerDFGToLLVM(state);
    393390       
    394391        if (reportCompileTimes())
  • trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp

    r180279 r180317  
    9494        : m_graph(state.graph)
    9595        , m_ftlState(state)
    96         , m_loweringSucceeded(true)
    9796        , m_heaps(state.context)
    9897        , m_out(state.context)
     
    104103    {
    105104    }
    106 
    107 
    108 #define LOWERING_FAILED(node, reason)                                  \
    109     loweringFailed((node), __FILE__, __LINE__, WTF_PRETTY_FUNCTION, (reason));
    110 
    111     bool lower()
     105   
     106    void lower()
    112107    {
    113108        CString name;
     
    281276                break;
    282277            default:
    283                 LOWERING_FAILED(node, "Bad flush format for argument");
     278                DFG_CRASH(m_graph, node, "Bad flush format for argument");
    284279                break;
    285280            }
    286281        }
    287 
    288         if (!m_loweringSucceeded)
    289             return m_loweringSucceeded;
    290 
    291282        m_out.jump(lowBlock(m_graph.block(0)));
    292283       
    293         for (BasicBlock* block : preOrder) {
     284        for (BasicBlock* block : preOrder)
    294285            compileBlock(block);
    295 
    296             if (!m_loweringSucceeded)
    297                 return m_loweringSucceeded;
    298         }
    299286       
    300287        if (Options::dumpLLVMIR())
     
    305292        if (validationEnabled())
    306293            verifyModule(m_ftlState.module);
    307 
    308         return m_loweringSucceeded;
    309294    }
    310295
     
    339324                    break;
    340325                default:
    341                     LOWERING_FAILED(node, "Bad Phi node result type");
    342                     return;
     326                    DFG_CRASH(m_graph, node, "Bad Phi node result type");
     327                    break;
    343328                }
    344329                m_phis.add(node, buildAlloca(m_out.m_builder, type));
     
    844829            break;
    845830        default:
    846             LOWERING_FAILED(m_node, "Unrecognized node in FTL backend");
    847             break;
    848         }
    849 
    850         if (!m_loweringSucceeded)
    851             return false;
     831            DFG_CRASH(m_graph, m_node, "Unrecognized node in FTL backend");
     832            break;
     833        }
    852834
    853835        if (!m_state.isValid()) {
     
    886868            break;
    887869        default:
    888             LOWERING_FAILED(m_node, "Bad use kind");
     870            DFG_CRASH(m_graph, m_node, "Bad use kind");
    889871            break;
    890872        }
     
    912894            break;
    913895        default:
    914             LOWERING_FAILED(m_node, "Bad use kind");
     896            DFG_CRASH(m_graph, m_node, "Bad use kind");
    915897            break;
    916898        }
     
    950932           
    951933        default:
    952             LOWERING_FAILED(m_node, "Bad use kind");
     934            DFG_CRASH(m_graph, m_node, "Bad use kind");
    953935        }
    954936    }
     
    975957           
    976958        default:
    977             LOWERING_FAILED(m_node, "Bad use kind");
     959            DFG_CRASH(m_graph, m_node, "Bad use kind");
    978960        }
    979961    }
     
    10381020           
    10391021        default:
    1040             LOWERING_FAILED(m_node, "Bad use kind");
     1022            DFG_CRASH(m_graph, m_node, "Bad use kind");
    10411023            break;
    10421024        }
     
    11451127           
    11461128        default:
    1147             LOWERING_FAILED(m_node, "Bad flush format");
     1129            DFG_CRASH(m_graph, m_node, "Bad flush format");
    11481130            break;
    11491131        }
     
    13051287           
    13061288        default:
    1307             LOWERING_FAILED(m_node, "Bad use kind");
     1289            DFG_CRASH(m_graph, m_node, "Bad use kind");
    13081290            break;
    13091291        }
     
    13791361           
    13801362        default:
    1381             LOWERING_FAILED(m_node, "Bad use kind");
     1363            DFG_CRASH(m_graph, m_node, "Bad use kind");
    13821364            break;
    13831365        }
     
    14821464           
    14831465        default:
    1484             LOWERING_FAILED(m_node, "Bad use kind");
     1466            DFG_CRASH(m_graph, m_node, "Bad use kind");
    14851467            break;
    14861468        }
     
    15801562           
    15811563        default:
    1582             LOWERING_FAILED(m_node, "Bad use kind");
     1564            DFG_CRASH(m_graph, m_node, "Bad use kind");
    15831565            break;
    15841566        }
     
    16311613           
    16321614        default:
    1633             LOWERING_FAILED(m_node, "Bad use kind");
     1615            DFG_CRASH(m_graph, m_node, "Bad use kind");
    16341616            break;
    16351617        }
     
    16571639           
    16581640        default:
    1659             LOWERING_FAILED(m_node, "Bad use kind");
     1641            DFG_CRASH(m_graph, m_node, "Bad use kind");
    16601642            break;
    16611643        }
     
    17821764           
    17831765        default:
    1784             LOWERING_FAILED(m_node, "Bad use kind");
     1766            DFG_CRASH(m_graph, m_node, "Bad use kind");
    17851767            break;
    17861768        }
     
    19201902            break;
    19211903        default:
    1922             LOWERING_FAILED(m_node, "Bad array type");
    1923             return;
     1904            DFG_CRASH(m_graph, m_node, "Bad array type");
     1905            break;
    19241906        }
    19251907       
     
    19891971           
    19901972        default:
    1991             LOWERING_FAILED(m_node, "Bad use kind");
     1973            DFG_CRASH(m_graph, m_node, "Bad use kind");
    19921974            return;
    19931975        }
     
    21612143            // https://bugs.webkit.org/show_bug.cgi?id=129576
    21622144           
    2163             LOWERING_FAILED(m_node, "Unimplemented");
    2164             return;
     2145            DFG_CRASH(m_graph, m_node, "Unimplemented");
    21652146        }
    21662147       
     
    22082189            }
    22092190           
    2210             LOWERING_FAILED(m_node, "Bad array type");
     2191            DFG_CRASH(m_graph, m_node, "Bad array type");
    22112192            return;
    22122193        }
     
    23582339                        break;
    23592340                    default:
    2360                         LOWERING_FAILED(m_node, "Bad element size");
    2361                         return;
     2341                        DFG_CRASH(m_graph, m_node, "Bad element size");
    23622342                    }
    23632343                   
     
    24032383                    break;
    24042384                default:
    2405                     LOWERING_FAILED(m_node, "Bad typed array type");
    2406                     return;
     2385                    DFG_CRASH(m_graph, m_node, "Bad typed array type");
    24072386                }
    24082387               
     
    24112390            }
    24122391           
    2413             LOWERING_FAILED(m_node, "Bad array type");
     2392            DFG_CRASH(m_graph, m_node, "Bad array type");
    24142393            return;
    24152394        } }
     
    25152494                break;
    25162495            }
    2517 
     2496               
    25182497            default:
    2519                 LOWERING_FAILED(m_node, "Bad array type");
    2520                 return;
     2498                DFG_CRASH(m_graph, m_node, "Bad array type");
    25212499            }
    25222500
     
    26112589                       
    26122590                    default:
    2613                         LOWERING_FAILED(m_node, "Bad use kind");
    2614                         return;
     2591                        DFG_CRASH(m_graph, m_node, "Bad use kind");
    26152592                    }
    26162593                   
     
    26292606                        break;
    26302607                    default:
    2631                         LOWERING_FAILED(m_node, "Bad element size");
    2632                         return;
     2608                        DFG_CRASH(m_graph, m_node, "Bad element size");
    26332609                    }
    26342610                } else /* !isInt(type) */ {
     
    26442620                        break;
    26452621                    default:
    2646                         LOWERING_FAILED(m_node, "Bad typed array type");
    2647                         return;
     2622                        DFG_CRASH(m_graph, m_node, "Bad typed array type");
    26482623                    }
    26492624                }
     
    26692644            }
    26702645           
    2671             LOWERING_FAILED(m_node, "Bad array type");
    2672             return;
     2646            DFG_CRASH(m_graph, m_node, "Bad array type");
     2647            break;
    26732648        }
    26742649    }
     
    27412716           
    27422717        default:
    2743             LOWERING_FAILED(m_node, "Bad array type");
     2718            DFG_CRASH(m_graph, m_node, "Bad array type");
    27442719            return;
    27452720        }
     
    27992774
    28002775        default:
    2801             LOWERING_FAILED(m_node, "Bad array type");
     2776            DFG_CRASH(m_graph, m_node, "Bad array type");
    28022777            return;
    28032778        }
     
    28362811                case ALL_BLANK_INDEXING_TYPES:
    28372812                case ALL_UNDECIDED_INDEXING_TYPES:
    2838                     LOWERING_FAILED(m_node, "Bad indexing type");
    2839                     return;
     2813                    DFG_CRASH(m_graph, m_node, "Bad indexing type");
     2814                    break;
    28402815                   
    28412816                case ALL_DOUBLE_INDEXING_TYPES:
     
    28542829                   
    28552830                default:
    2856                     LOWERING_FAILED(m_node, "Corrupt indexing type");
    2857                     return;
     2831                    DFG_CRASH(m_graph, m_node, "Corrupt indexing type");
     2832                    break;
    28582833                }
    28592834            }
     
    31363111           
    31373112        default:
    3138             LOWERING_FAILED(m_node, "Bad use kind");
    3139             return;
     3113            DFG_CRASH(m_graph, m_node, "Bad use kind");
     3114            break;
    31403115        }
    31413116    }
     
    32283203            break;
    32293204        default:
    3230             LOWERING_FAILED(m_node, "Bad number of children");
    3231             return;
     3205            DFG_CRASH(m_graph, m_node, "Bad number of children");
     3206            break;
    32323207        }
    32333208        m_out.jump(continuation);
     
    36493624            return;
    36503625        }
    3651 
    3652         LOWERING_FAILED(m_node, "Bad use kinds");
     3626       
     3627        DFG_CRASH(m_graph, m_node, "Bad use kinds");
    36533628    }
    36543629   
     
    37433718        }
    37443719       
    3745         LOWERING_FAILED(m_node, "Bad use kinds");
     3720        DFG_CRASH(m_graph, m_node, "Bad use kinds");
    37463721    }
    37473722   
     
    40103985               
    40113986            default:
    4012                 LOWERING_FAILED(m_node, "Bad use kind");
    4013                 return;
     3987                DFG_CRASH(m_graph, m_node, "Bad use kind");
     3988                break;
    40143989            }
    40153990           
     
    40564031               
    40574032            default:
    4058                 LOWERING_FAILED(m_node, "Bad use kind");
    4059                 return;
     4033                DFG_CRASH(m_graph, m_node, "Bad use kind");
     4034                break;
    40604035            }
    40614036           
     
    41094084       
    41104085        case SwitchString: {
    4111             LOWERING_FAILED(m_node, "Unimplemented");
     4086            DFG_CRASH(m_graph, m_node, "Unimplemented");
    41124087            return;
    41134088        }
     
    41324107               
    41334108            default:
    4134                 LOWERING_FAILED(m_node, "Bad use kind");
     4109                DFG_CRASH(m_graph, m_node, "Bad use kind");
    41354110                return;
    41364111            }
     
    41404115        } }
    41414116       
    4142         LOWERING_FAILED(m_node, "Bad switch kind");
     4117        DFG_CRASH(m_graph, m_node, "Bad switch kind");
    41434118    }
    41444119   
     
    51105085        }
    51115086       
    5112         LOWERING_FAILED(m_node, "Bad use kinds");
     5087        DFG_CRASH(m_graph, m_node, "Bad use kinds");
    51135088    }
    51145089   
     
    54235398        }
    54245399        default:
    5425             LOWERING_FAILED(m_node, "Bad use kind");
     5400            DFG_CRASH(m_graph, m_node, "Bad use kind");
    54265401            return 0;
    54275402        }
     
    58025777            return Int52;
    58035778        }
    5804         LOWERING_FAILED(m_node, "Bad use kind");
     5779        DFG_CRASH(m_graph, m_node, "Bad use kind");
    58055780        return Int52;
    58065781    }
     
    59465921        }
    59475922       
    5948         LOWERING_FAILED(m_node, "Value not defined");
     5923        DFG_CRASH(m_graph, m_node, "Value not defined");
    59495924        return 0;
    59505925    }
     
    62616236            break;
    62626237        default:
    6263             LOWERING_FAILED(m_node, "Unsupported speculation use kind");
    6264             return;
     6238            DFG_CRASH(m_graph, m_node, "Unsupported speculation use kind");
    62656239        }
    62666240    }
     
    63236297            switch (arrayMode.arrayClass()) {
    63246298            case Array::OriginalArray:
    6325                 LOWERING_FAILED(m_node, "Unexpected original array");
     6299                DFG_CRASH(m_graph, m_node, "Unexpected original array");
    63266300                return 0;
    63276301               
     
    63436317            }
    63446318           
    6345             LOWERING_FAILED(m_node, "Corrupt array class");
    6346             return 0;
     6319            DFG_CRASH(m_graph, m_node, "Corrupt array class");
    63476320        }
    63486321           
     
    68546827        }
    68556828       
    6856         LOWERING_FAILED(m_node, "Invalid flush format");
     6829        DFG_CRASH(m_graph, m_node, "Invalid flush format");
    68576830        return ExitValue::dead();
    68586831    }
     
    69276900            return exitArgument(arguments, ValueFormatDouble, value.value());
    69286901
    6929         LOWERING_FAILED(m_node, toCString("Cannot find value for node: ", node).data());
     6902        DFG_CRASH(m_graph, m_node, toCString("Cannot find value for node: ", node).data());
    69306903        return ExitValue::dead();
    69316904    }
     
    69856958        }
    69866959       
    6987         LOWERING_FAILED(m_node, "Corrupt int52 kind");
     6960        DFG_CRASH(m_graph, m_node, "Corrupt int52 kind");
    69886961    }
    69896962    void setJSValue(Node* node, LValue value)
     
    71407113    }
    71417114
    7142     NO_RETURN_DUE_TO_ASSERT void loweringFailed(Node* node, const char* file, int line, const char* function, const char* assertion)
    7143     {
    7144 #ifndef NDEBUG
    7145         m_graph.handleAssertionFailure(node, file, line, function, (assertion));
    7146 #else
    7147         UNUSED_PARAM(node);
    7148         UNUSED_PARAM(file);
    7149         UNUSED_PARAM(line);
    7150         UNUSED_PARAM(function);
    7151         UNUSED_PARAM(assertion);
    7152 #endif
    7153         m_loweringSucceeded = false;
    7154     }
    7155 
    71567115    AvailabilityMap& availabilityMap() { return m_availabilityCalculator.m_availability; }
    71577116   
     
    71617120    Graph& m_graph;
    71627121    State& m_ftlState;
    7163     bool m_loweringSucceeded;
    71647122    AbstractHeapRepository m_heaps;
    71657123    Output m_out;
     
    72097167    unsigned m_tbaaKind;
    72107168    unsigned m_tbaaStructKind;
    7211 
    7212 #undef LOWERING_FAILED
    72137169};
    72147170
    7215 bool lowerDFGToLLVM(State& state)
     7171void lowerDFGToLLVM(State& state)
    72167172{
    72177173    LowerDFGToLLVM lowering(state);
    7218     return lowering.lower();
     7174    lowering.lower();
    72197175}
    72207176
  • trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.h

    r180247 r180317  
    3434namespace JSC { namespace FTL {
    3535
    36 bool lowerDFGToLLVM(State&);
     36void lowerDFGToLLVM(State&);
    3737
    3838} } // namespace JSC::FTL
Note: See TracChangeset for help on using the changeset viewer.