Changeset 180317 in webkit
- Timestamp:
- Feb 18, 2015 3:52:16 PM (9 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r180279 r180317 1 2015-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 1 59 2015-02-18 Filip Pizlo <fpizlo@apple.com> 2 60 -
trunk/Source/JavaScriptCore/dfg/DFGPlan.cpp
r180279 r180317 387 387 388 388 FTL::State state(dfg); 389 if (!FTL::lowerDFGToLLVM(state)) { 390 FTL::fail(state); 391 return FTLPath; 392 } 389 FTL::lowerDFGToLLVM(state); 393 390 394 391 if (reportCompileTimes()) -
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp
r180279 r180317 94 94 : m_graph(state.graph) 95 95 , m_ftlState(state) 96 , m_loweringSucceeded(true)97 96 , m_heaps(state.context) 98 97 , m_out(state.context) … … 104 103 { 105 104 } 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() 112 107 { 113 108 CString name; … … 281 276 break; 282 277 default: 283 LOWERING_FAILED(node, "Bad flush format for argument");278 DFG_CRASH(m_graph, node, "Bad flush format for argument"); 284 279 break; 285 280 } 286 281 } 287 288 if (!m_loweringSucceeded)289 return m_loweringSucceeded;290 291 282 m_out.jump(lowBlock(m_graph.block(0))); 292 283 293 for (BasicBlock* block : preOrder) {284 for (BasicBlock* block : preOrder) 294 285 compileBlock(block); 295 296 if (!m_loweringSucceeded)297 return m_loweringSucceeded;298 }299 286 300 287 if (Options::dumpLLVMIR()) … … 305 292 if (validationEnabled()) 306 293 verifyModule(m_ftlState.module); 307 308 return m_loweringSucceeded;309 294 } 310 295 … … 339 324 break; 340 325 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; 343 328 } 344 329 m_phis.add(node, buildAlloca(m_out.m_builder, type)); … … 844 829 break; 845 830 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 } 852 834 853 835 if (!m_state.isValid()) { … … 886 868 break; 887 869 default: 888 LOWERING_FAILED(m_node, "Bad use kind");870 DFG_CRASH(m_graph, m_node, "Bad use kind"); 889 871 break; 890 872 } … … 912 894 break; 913 895 default: 914 LOWERING_FAILED(m_node, "Bad use kind");896 DFG_CRASH(m_graph, m_node, "Bad use kind"); 915 897 break; 916 898 } … … 950 932 951 933 default: 952 LOWERING_FAILED(m_node, "Bad use kind");934 DFG_CRASH(m_graph, m_node, "Bad use kind"); 953 935 } 954 936 } … … 975 957 976 958 default: 977 LOWERING_FAILED(m_node, "Bad use kind");959 DFG_CRASH(m_graph, m_node, "Bad use kind"); 978 960 } 979 961 } … … 1038 1020 1039 1021 default: 1040 LOWERING_FAILED(m_node, "Bad use kind");1022 DFG_CRASH(m_graph, m_node, "Bad use kind"); 1041 1023 break; 1042 1024 } … … 1145 1127 1146 1128 default: 1147 LOWERING_FAILED(m_node, "Bad flush format");1129 DFG_CRASH(m_graph, m_node, "Bad flush format"); 1148 1130 break; 1149 1131 } … … 1305 1287 1306 1288 default: 1307 LOWERING_FAILED(m_node, "Bad use kind");1289 DFG_CRASH(m_graph, m_node, "Bad use kind"); 1308 1290 break; 1309 1291 } … … 1379 1361 1380 1362 default: 1381 LOWERING_FAILED(m_node, "Bad use kind");1363 DFG_CRASH(m_graph, m_node, "Bad use kind"); 1382 1364 break; 1383 1365 } … … 1482 1464 1483 1465 default: 1484 LOWERING_FAILED(m_node, "Bad use kind");1466 DFG_CRASH(m_graph, m_node, "Bad use kind"); 1485 1467 break; 1486 1468 } … … 1580 1562 1581 1563 default: 1582 LOWERING_FAILED(m_node, "Bad use kind");1564 DFG_CRASH(m_graph, m_node, "Bad use kind"); 1583 1565 break; 1584 1566 } … … 1631 1613 1632 1614 default: 1633 LOWERING_FAILED(m_node, "Bad use kind");1615 DFG_CRASH(m_graph, m_node, "Bad use kind"); 1634 1616 break; 1635 1617 } … … 1657 1639 1658 1640 default: 1659 LOWERING_FAILED(m_node, "Bad use kind");1641 DFG_CRASH(m_graph, m_node, "Bad use kind"); 1660 1642 break; 1661 1643 } … … 1782 1764 1783 1765 default: 1784 LOWERING_FAILED(m_node, "Bad use kind");1766 DFG_CRASH(m_graph, m_node, "Bad use kind"); 1785 1767 break; 1786 1768 } … … 1920 1902 break; 1921 1903 default: 1922 LOWERING_FAILED(m_node, "Bad array type");1923 return;1904 DFG_CRASH(m_graph, m_node, "Bad array type"); 1905 break; 1924 1906 } 1925 1907 … … 1989 1971 1990 1972 default: 1991 LOWERING_FAILED(m_node, "Bad use kind");1973 DFG_CRASH(m_graph, m_node, "Bad use kind"); 1992 1974 return; 1993 1975 } … … 2161 2143 // https://bugs.webkit.org/show_bug.cgi?id=129576 2162 2144 2163 LOWERING_FAILED(m_node, "Unimplemented"); 2164 return; 2145 DFG_CRASH(m_graph, m_node, "Unimplemented"); 2165 2146 } 2166 2147 … … 2208 2189 } 2209 2190 2210 LOWERING_FAILED(m_node, "Bad array type");2191 DFG_CRASH(m_graph, m_node, "Bad array type"); 2211 2192 return; 2212 2193 } … … 2358 2339 break; 2359 2340 default: 2360 LOWERING_FAILED(m_node, "Bad element size"); 2361 return; 2341 DFG_CRASH(m_graph, m_node, "Bad element size"); 2362 2342 } 2363 2343 … … 2403 2383 break; 2404 2384 default: 2405 LOWERING_FAILED(m_node, "Bad typed array type"); 2406 return; 2385 DFG_CRASH(m_graph, m_node, "Bad typed array type"); 2407 2386 } 2408 2387 … … 2411 2390 } 2412 2391 2413 LOWERING_FAILED(m_node, "Bad array type");2392 DFG_CRASH(m_graph, m_node, "Bad array type"); 2414 2393 return; 2415 2394 } } … … 2515 2494 break; 2516 2495 } 2517 2496 2518 2497 default: 2519 LOWERING_FAILED(m_node, "Bad array type"); 2520 return; 2498 DFG_CRASH(m_graph, m_node, "Bad array type"); 2521 2499 } 2522 2500 … … 2611 2589 2612 2590 default: 2613 LOWERING_FAILED(m_node, "Bad use kind"); 2614 return; 2591 DFG_CRASH(m_graph, m_node, "Bad use kind"); 2615 2592 } 2616 2593 … … 2629 2606 break; 2630 2607 default: 2631 LOWERING_FAILED(m_node, "Bad element size"); 2632 return; 2608 DFG_CRASH(m_graph, m_node, "Bad element size"); 2633 2609 } 2634 2610 } else /* !isInt(type) */ { … … 2644 2620 break; 2645 2621 default: 2646 LOWERING_FAILED(m_node, "Bad typed array type"); 2647 return; 2622 DFG_CRASH(m_graph, m_node, "Bad typed array type"); 2648 2623 } 2649 2624 } … … 2669 2644 } 2670 2645 2671 LOWERING_FAILED(m_node, "Bad array type");2672 return;2646 DFG_CRASH(m_graph, m_node, "Bad array type"); 2647 break; 2673 2648 } 2674 2649 } … … 2741 2716 2742 2717 default: 2743 LOWERING_FAILED(m_node, "Bad array type");2718 DFG_CRASH(m_graph, m_node, "Bad array type"); 2744 2719 return; 2745 2720 } … … 2799 2774 2800 2775 default: 2801 LOWERING_FAILED(m_node, "Bad array type");2776 DFG_CRASH(m_graph, m_node, "Bad array type"); 2802 2777 return; 2803 2778 } … … 2836 2811 case ALL_BLANK_INDEXING_TYPES: 2837 2812 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; 2840 2815 2841 2816 case ALL_DOUBLE_INDEXING_TYPES: … … 2854 2829 2855 2830 default: 2856 LOWERING_FAILED(m_node, "Corrupt indexing type");2857 return;2831 DFG_CRASH(m_graph, m_node, "Corrupt indexing type"); 2832 break; 2858 2833 } 2859 2834 } … … 3136 3111 3137 3112 default: 3138 LOWERING_FAILED(m_node, "Bad use kind");3139 return;3113 DFG_CRASH(m_graph, m_node, "Bad use kind"); 3114 break; 3140 3115 } 3141 3116 } … … 3228 3203 break; 3229 3204 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; 3232 3207 } 3233 3208 m_out.jump(continuation); … … 3649 3624 return; 3650 3625 } 3651 3652 LOWERING_FAILED(m_node, "Bad use kinds");3626 3627 DFG_CRASH(m_graph, m_node, "Bad use kinds"); 3653 3628 } 3654 3629 … … 3743 3718 } 3744 3719 3745 LOWERING_FAILED(m_node, "Bad use kinds");3720 DFG_CRASH(m_graph, m_node, "Bad use kinds"); 3746 3721 } 3747 3722 … … 4010 3985 4011 3986 default: 4012 LOWERING_FAILED(m_node, "Bad use kind");4013 return;3987 DFG_CRASH(m_graph, m_node, "Bad use kind"); 3988 break; 4014 3989 } 4015 3990 … … 4056 4031 4057 4032 default: 4058 LOWERING_FAILED(m_node, "Bad use kind");4059 return;4033 DFG_CRASH(m_graph, m_node, "Bad use kind"); 4034 break; 4060 4035 } 4061 4036 … … 4109 4084 4110 4085 case SwitchString: { 4111 LOWERING_FAILED(m_node, "Unimplemented");4086 DFG_CRASH(m_graph, m_node, "Unimplemented"); 4112 4087 return; 4113 4088 } … … 4132 4107 4133 4108 default: 4134 LOWERING_FAILED(m_node, "Bad use kind");4109 DFG_CRASH(m_graph, m_node, "Bad use kind"); 4135 4110 return; 4136 4111 } … … 4140 4115 } } 4141 4116 4142 LOWERING_FAILED(m_node, "Bad switch kind");4117 DFG_CRASH(m_graph, m_node, "Bad switch kind"); 4143 4118 } 4144 4119 … … 5110 5085 } 5111 5086 5112 LOWERING_FAILED(m_node, "Bad use kinds");5087 DFG_CRASH(m_graph, m_node, "Bad use kinds"); 5113 5088 } 5114 5089 … … 5423 5398 } 5424 5399 default: 5425 LOWERING_FAILED(m_node, "Bad use kind");5400 DFG_CRASH(m_graph, m_node, "Bad use kind"); 5426 5401 return 0; 5427 5402 } … … 5802 5777 return Int52; 5803 5778 } 5804 LOWERING_FAILED(m_node, "Bad use kind");5779 DFG_CRASH(m_graph, m_node, "Bad use kind"); 5805 5780 return Int52; 5806 5781 } … … 5946 5921 } 5947 5922 5948 LOWERING_FAILED(m_node, "Value not defined");5923 DFG_CRASH(m_graph, m_node, "Value not defined"); 5949 5924 return 0; 5950 5925 } … … 6261 6236 break; 6262 6237 default: 6263 LOWERING_FAILED(m_node, "Unsupported speculation use kind"); 6264 return; 6238 DFG_CRASH(m_graph, m_node, "Unsupported speculation use kind"); 6265 6239 } 6266 6240 } … … 6323 6297 switch (arrayMode.arrayClass()) { 6324 6298 case Array::OriginalArray: 6325 LOWERING_FAILED(m_node, "Unexpected original array");6299 DFG_CRASH(m_graph, m_node, "Unexpected original array"); 6326 6300 return 0; 6327 6301 … … 6343 6317 } 6344 6318 6345 LOWERING_FAILED(m_node, "Corrupt array class"); 6346 return 0; 6319 DFG_CRASH(m_graph, m_node, "Corrupt array class"); 6347 6320 } 6348 6321 … … 6854 6827 } 6855 6828 6856 LOWERING_FAILED(m_node, "Invalid flush format");6829 DFG_CRASH(m_graph, m_node, "Invalid flush format"); 6857 6830 return ExitValue::dead(); 6858 6831 } … … 6927 6900 return exitArgument(arguments, ValueFormatDouble, value.value()); 6928 6901 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()); 6930 6903 return ExitValue::dead(); 6931 6904 } … … 6985 6958 } 6986 6959 6987 LOWERING_FAILED(m_node, "Corrupt int52 kind");6960 DFG_CRASH(m_graph, m_node, "Corrupt int52 kind"); 6988 6961 } 6989 6962 void setJSValue(Node* node, LValue value) … … 7140 7113 } 7141 7114 7142 NO_RETURN_DUE_TO_ASSERT void loweringFailed(Node* node, const char* file, int line, const char* function, const char* assertion)7143 {7144 #ifndef NDEBUG7145 m_graph.handleAssertionFailure(node, file, line, function, (assertion));7146 #else7147 UNUSED_PARAM(node);7148 UNUSED_PARAM(file);7149 UNUSED_PARAM(line);7150 UNUSED_PARAM(function);7151 UNUSED_PARAM(assertion);7152 #endif7153 m_loweringSucceeded = false;7154 }7155 7156 7115 AvailabilityMap& availabilityMap() { return m_availabilityCalculator.m_availability; } 7157 7116 … … 7161 7120 Graph& m_graph; 7162 7121 State& m_ftlState; 7163 bool m_loweringSucceeded;7164 7122 AbstractHeapRepository m_heaps; 7165 7123 Output m_out; … … 7209 7167 unsigned m_tbaaKind; 7210 7168 unsigned m_tbaaStructKind; 7211 7212 #undef LOWERING_FAILED7213 7169 }; 7214 7170 7215 boollowerDFGToLLVM(State& state)7171 void lowerDFGToLLVM(State& state) 7216 7172 { 7217 7173 LowerDFGToLLVM lowering(state); 7218 returnlowering.lower();7174 lowering.lower(); 7219 7175 } 7220 7176 -
trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.h
r180247 r180317 34 34 namespace JSC { namespace FTL { 35 35 36 boollowerDFGToLLVM(State&);36 void lowerDFGToLLVM(State&); 37 37 38 38 } } // namespace JSC::FTL
Note: See TracChangeset
for help on using the changeset viewer.