Changeset 180679 in webkit
- Timestamp:
- Feb 26, 2015, 10:03:17 AM (12 years ago)
- Location:
- branches/safari-600.5-branch/Source/JavaScriptCore
- Files:
-
- 4 edited
-
ChangeLog (modified) (1 diff)
-
dfg/DFGPlan.cpp (modified) (1 diff)
-
ftl/FTLLowerDFGToLLVM.cpp (modified) (54 diffs)
-
ftl/FTLLowerDFGToLLVM.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/safari-600.5-branch/Source/JavaScriptCore/ChangeLog
r180463 r180679 1 2015-02-26 Babak Shafiei <bshafiei@apple.com> 2 3 Merge patch for r180247 and r180249. 4 5 2015-02-20 Michael Saboff <msaboff@apple.com> 6 7 CrashTracer: DFG_CRASH beneath JSC::FTL::LowerDFGToLLVM::compileNode 8 https://bugs.webkit.org/show_bug.cgi?id=141730 9 10 Reviewed by Geoffrey Garen. 11 12 Added a new failure handler, loweringFailed(), to LowerDFGToLLVM that reports failures 13 while processing DFG lowering. For debug builds, the failures are logged identical 14 to the way the DFG_CRASH() reports them. For release builds, the failures are reported 15 and that FTL compilation is terminated, but the process is allowed to continue. 16 Wrapped calls to loweringFailed() in a macro LOWERING_FAILED so the function and 17 line number are reported at the point of the inconsistancy. 18 19 Converted instances of DFG_CRASH to LOWERING_FAILED. 20 21 * dfg/DFGPlan.cpp: 22 (JSC::DFG::Plan::compileInThreadImpl): Added lowerDFGToLLVM() failure check that 23 will fail the FTL compile. 24 25 * ftl/FTLLowerDFGToLLVM.cpp: 26 (JSC::FTL::LowerDFGToLLVM::LowerDFGToLLVM): 27 Added new member variable, m_loweringSucceeded, to stop compilation on the first 28 reported failure. 29 30 * ftl/FTLLowerDFGToLLVM.cpp: 31 (JSC::FTL::LowerDFGToLLVM::lower): 32 * ftl/FTLLowerDFGToLLVM.h: 33 Added check for compilation failures and now report those failures via a boolean 34 return value. 35 36 * ftl/FTLLowerDFGToLLVM.cpp: 37 (JSC::FTL::LowerDFGToLLVM::createPhiVariables): 38 (JSC::FTL::LowerDFGToLLVM::compileNode): 39 (JSC::FTL::LowerDFGToLLVM::compileUpsilon): 40 (JSC::FTL::LowerDFGToLLVM::compilePhi): 41 (JSC::FTL::LowerDFGToLLVM::compileDoubleRep): 42 (JSC::FTL::LowerDFGToLLVM::compileValueRep): 43 (JSC::FTL::LowerDFGToLLVM::compileValueToInt32): 44 (JSC::FTL::LowerDFGToLLVM::compilePutLocal): 45 (JSC::FTL::LowerDFGToLLVM::compileArithAddOrSub): 46 (JSC::FTL::LowerDFGToLLVM::compileArithMul): 47 (JSC::FTL::LowerDFGToLLVM::compileArithDiv): 48 (JSC::FTL::LowerDFGToLLVM::compileArithMod): 49 (JSC::FTL::LowerDFGToLLVM::compileArithMinOrMax): 50 (JSC::FTL::LowerDFGToLLVM::compileArithAbs): 51 (JSC::FTL::LowerDFGToLLVM::compileArithNegate): 52 (JSC::FTL::LowerDFGToLLVM::compileArrayifyToStructure): 53 (JSC::FTL::LowerDFGToLLVM::compileGetById): 54 (JSC::FTL::LowerDFGToLLVM::compileGetMyArgumentByVal): 55 (JSC::FTL::LowerDFGToLLVM::compileGetArrayLength): 56 (JSC::FTL::LowerDFGToLLVM::compileGetByVal): 57 (JSC::FTL::LowerDFGToLLVM::compilePutByVal): 58 (JSC::FTL::LowerDFGToLLVM::compileArrayPush): 59 (JSC::FTL::LowerDFGToLLVM::compileArrayPop): 60 (JSC::FTL::LowerDFGToLLVM::compileNewArray): 61 (JSC::FTL::LowerDFGToLLVM::compileToString): 62 (JSC::FTL::LowerDFGToLLVM::compileMakeRope): 63 (JSC::FTL::LowerDFGToLLVM::compileCompareEq): 64 (JSC::FTL::LowerDFGToLLVM::compileCompareStrictEq): 65 (JSC::FTL::LowerDFGToLLVM::compileSwitch): 66 (JSC::FTL::LowerDFGToLLVM::compare): 67 (JSC::FTL::LowerDFGToLLVM::boolify): 68 (JSC::FTL::LowerDFGToLLVM::opposite): 69 (JSC::FTL::LowerDFGToLLVM::lowJSValue): 70 (JSC::FTL::LowerDFGToLLVM::speculate): 71 (JSC::FTL::LowerDFGToLLVM::isArrayType): 72 (JSC::FTL::LowerDFGToLLVM::exitValueForAvailability): 73 (JSC::FTL::LowerDFGToLLVM::exitValueForNode): 74 (JSC::FTL::LowerDFGToLLVM::setInt52): 75 Changed DFG_CRASH() to LOWERING_FAILED(). Updated related control flow as appropriate. 76 77 (JSC::FTL::LowerDFGToLLVM::loweringFailed): New error reporting member function. 78 1 79 2015-02-20 Dana Burkart <dburkart@apple.com> 2 80 -
branches/safari-600.5-branch/Source/JavaScriptCore/dfg/DFGPlan.cpp
r170876 r180679 349 349 350 350 FTL::State state(dfg); 351 FTL::lowerDFGToLLVM(state); 351 if (!FTL::lowerDFGToLLVM(state)) { 352 FTL::fail(state); 353 return FTLPath; 354 } 352 355 353 356 if (reportCompileTimes()) -
branches/safari-600.5-branch/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp
r171411 r180679 69 69 : m_graph(state.graph) 70 70 , m_ftlState(state) 71 , m_loweringSucceeded(true) 71 72 , m_heaps(state.context) 72 73 , m_out(state.context) … … 77 78 { 78 79 } 79 80 void lower() 80 81 82 #define LOWERING_FAILED(node, reason) \ 83 loweringFailed((node), __FILE__, __LINE__, WTF_PRETTY_FUNCTION, (reason)); 84 85 bool lower() 81 86 { 82 87 CString name; … … 158 163 m_out.unreachable(); 159 164 165 if (!m_loweringSucceeded) 166 return m_loweringSucceeded; 167 160 168 Vector<BasicBlock*> depthFirst; 161 169 m_graph.getBlocksInDepthFirstOrder(depthFirst); 162 for (unsigned i = 0; i < depthFirst.size(); ++i) 170 for (unsigned i = 0; i < depthFirst.size(); ++i) { 163 171 compileBlock(depthFirst[i]); 172 if (!m_loweringSucceeded) 173 return m_loweringSucceeded; 174 } 164 175 165 176 if (Options::dumpLLVMIR()) … … 170 181 if (validationEnabled()) 171 182 verifyModule(m_ftlState.module); 183 184 return m_loweringSucceeded; 172 185 } 173 186 … … 202 215 break; 203 216 default: 204 RELEASE_ASSERT_NOT_REACHED();205 break;217 LOWERING_FAILED(node, "Bad Phi node result type"); 218 return; 206 219 } 207 220 m_phis.add(node, buildAlloca(m_out.m_builder, type)); … … 632 645 break; 633 646 default: 634 dataLog("Unrecognized node in FTL backend:\n"); 635 m_graph.dump(WTF::dataFile(), " ", m_node); 636 dataLog("\n"); 637 dataLog("Full graph dump:\n"); 638 m_graph.dump(); 639 RELEASE_ASSERT_NOT_REACHED(); 640 break; 641 } 642 647 LOWERING_FAILED(m_node, "Unrecognized node in FTL backend"); 648 break; 649 } 650 651 if (!m_loweringSucceeded) 652 return false; 653 643 654 if (shouldExecuteEffects) 644 655 m_interpreter.executeEffects(nodeIndex); … … 671 682 break; 672 683 default: 673 RELEASE_ASSERT_NOT_REACHED();684 LOWERING_FAILED(m_node, "Bad use kind"); 674 685 break; 675 686 } … … 697 708 break; 698 709 default: 699 RELEASE_ASSERT_NOT_REACHED();710 LOWERING_FAILED(m_node, "Bad use kind"); 700 711 break; 701 712 } … … 740 751 741 752 default: 742 RELEASE_ASSERT_NOT_REACHED();753 LOWERING_FAILED(m_node, "Bad use kind"); 743 754 } 744 755 } … … 765 776 766 777 default: 767 RELEASE_ASSERT_NOT_REACHED();778 LOWERING_FAILED(m_node, "Bad use kind"); 768 779 } 769 780 } … … 789 800 790 801 default: 791 RELEASE_ASSERT_NOT_REACHED();802 LOWERING_FAILED(m_node, "Bad use kind"); 792 803 } 793 804 } … … 828 839 829 840 default: 830 RELEASE_ASSERT_NOT_REACHED();841 LOWERING_FAILED(m_node, "Bad use kind"); 831 842 break; 832 843 } … … 861 872 862 873 default: 863 RELEASE_ASSERT_NOT_REACHED();874 LOWERING_FAILED(m_node, "Bad flush format"); 864 875 return; 865 876 } … … 891 902 break; 892 903 default: 893 RELEASE_ASSERT_NOT_REACHED();904 LOWERING_FAILED(m_node, "Bad use kind"); 894 905 break; 895 906 } … … 962 973 963 974 default: 964 RELEASE_ASSERT_NOT_REACHED();965 break;975 LOWERING_FAILED(m_node, "Bad flush format for argument"); 976 return; 966 977 } 967 978 … … 1138 1149 1139 1150 default: 1140 RELEASE_ASSERT_NOT_REACHED();1151 LOWERING_FAILED(m_node, "Bad use kind"); 1141 1152 break; 1142 1153 } … … 1212 1223 1213 1224 default: 1214 RELEASE_ASSERT_NOT_REACHED();1225 LOWERING_FAILED(m_node, "Bad use kind"); 1215 1226 break; 1216 1227 } … … 1315 1326 1316 1327 default: 1317 RELEASE_ASSERT_NOT_REACHED();1328 LOWERING_FAILED(m_node, "Bad use kind"); 1318 1329 break; 1319 1330 } … … 1413 1424 1414 1425 default: 1415 RELEASE_ASSERT_NOT_REACHED();1426 LOWERING_FAILED(m_node, "Bad use kind"); 1416 1427 break; 1417 1428 } … … 1464 1475 1465 1476 default: 1466 RELEASE_ASSERT_NOT_REACHED();1477 LOWERING_FAILED(m_node, "Bad use kind"); 1467 1478 break; 1468 1479 } … … 1490 1501 1491 1502 default: 1492 RELEASE_ASSERT_NOT_REACHED();1503 LOWERING_FAILED(m_node, "Bad use kind"); 1493 1504 break; 1494 1505 } … … 1557 1568 1558 1569 default: 1559 RELEASE_ASSERT_NOT_REACHED();1570 LOWERING_FAILED(m_node, "Bad use kind"); 1560 1571 break; 1561 1572 } … … 1723 1734 break; 1724 1735 default: 1725 RELEASE_ASSERT_NOT_REACHED();1726 break;1736 LOWERING_FAILED(m_node, "Bad array type"); 1737 return; 1727 1738 } 1728 1739 … … 1797 1808 1798 1809 default: 1799 RELEASE_ASSERT_NOT_REACHED();1810 LOWERING_FAILED(m_node, "Bad use kind"); 1800 1811 return; 1801 1812 } … … 1949 1960 // https://bugs.webkit.org/show_bug.cgi?id=129576 1950 1961 1951 RELEASE_ASSERT_NOT_REACHED(); 1962 LOWERING_FAILED(m_node, "Unimplemented"); 1963 return; 1952 1964 } 1953 1965 … … 1986 1998 } 1987 1999 1988 RELEASE_ASSERT_NOT_REACHED();2000 LOWERING_FAILED(m_node, "Bad array type"); 1989 2001 return; 1990 2002 } … … 2136 2148 break; 2137 2149 default: 2138 RELEASE_ASSERT_NOT_REACHED(); 2150 LOWERING_FAILED(m_node, "Bad element size"); 2151 return; 2139 2152 } 2140 2153 … … 2180 2193 break; 2181 2194 default: 2182 RELEASE_ASSERT_NOT_REACHED(); 2195 LOWERING_FAILED(m_node, "Bad typed array type"); 2196 return; 2183 2197 } 2184 2198 … … 2187 2201 } 2188 2202 2189 RELEASE_ASSERT_NOT_REACHED();2203 LOWERING_FAILED(m_node, "Bad array type"); 2190 2204 return; 2191 2205 } } … … 2293 2307 2294 2308 default: 2295 RELEASE_ASSERT_NOT_REACHED(); 2309 LOWERING_FAILED(m_node, "Bad array type"); 2310 return; 2296 2311 } 2297 2312 … … 2386 2401 2387 2402 default: 2388 RELEASE_ASSERT_NOT_REACHED(); 2403 LOWERING_FAILED(m_node, "Bad use kind"); 2404 return; 2389 2405 } 2390 2406 … … 2403 2419 break; 2404 2420 default: 2405 RELEASE_ASSERT_NOT_REACHED(); 2421 LOWERING_FAILED(m_node, "Bad element size"); 2422 return; 2406 2423 } 2407 2424 } else /* !isInt(type) */ { … … 2417 2434 break; 2418 2435 default: 2419 RELEASE_ASSERT_NOT_REACHED(); 2436 LOWERING_FAILED(m_node, "Bad typed array type"); 2437 return; 2420 2438 } 2421 2439 } … … 2441 2459 } 2442 2460 2443 RELEASE_ASSERT_NOT_REACHED();2444 break;2461 LOWERING_FAILED(m_node, "Bad array type"); 2462 return; 2445 2463 } 2446 2464 } … … 2513 2531 2514 2532 default: 2515 RELEASE_ASSERT_NOT_REACHED();2533 LOWERING_FAILED(m_node, "Bad array type"); 2516 2534 return; 2517 2535 } … … 2571 2589 2572 2590 default: 2573 RELEASE_ASSERT_NOT_REACHED();2591 LOWERING_FAILED(m_node, "Bad array type"); 2574 2592 return; 2575 2593 } … … 2930 2948 2931 2949 default: 2932 RELEASE_ASSERT_NOT_REACHED();2933 break;2950 LOWERING_FAILED(m_node, "Bad use kind"); 2951 return; 2934 2952 } 2935 2953 } … … 3022 3040 break; 3023 3041 default: 3024 RELEASE_ASSERT_NOT_REACHED(); 3042 LOWERING_FAILED(m_node, "Bad number of children"); 3043 return; 3025 3044 break; 3026 3045 } … … 3427 3446 return; 3428 3447 } 3429 3430 RELEASE_ASSERT_NOT_REACHED();3448 3449 LOWERING_FAILED(m_node, "Bad use kinds"); 3431 3450 } 3432 3451 … … 3521 3540 } 3522 3541 3523 RELEASE_ASSERT_NOT_REACHED();3542 LOWERING_FAILED(m_node, "Bad use kinds"); 3524 3543 } 3525 3544 … … 3657 3676 3658 3677 default: 3659 RELEASE_ASSERT_NOT_REACHED();3660 break;3678 LOWERING_FAILED(m_node, "Bad use kind"); 3679 return; 3661 3680 } 3662 3681 … … 3703 3722 3704 3723 default: 3705 RELEASE_ASSERT_NOT_REACHED();3706 break;3724 LOWERING_FAILED(m_node, "Bad use kind"); 3725 return; 3707 3726 } 3708 3727 … … 3756 3775 3757 3776 case SwitchString: 3758 RELEASE_ASSERT_NOT_REACHED();3759 break; 3760 } 3761 3762 RELEASE_ASSERT_NOT_REACHED();3777 LOWERING_FAILED(m_node, "Unimplemented"); 3778 break; 3779 } 3780 3781 LOWERING_FAILED(m_node, "Bad switch kind"); 3763 3782 } 3764 3783 … … 4217 4236 } 4218 4237 4219 RELEASE_ASSERT_NOT_REACHED();4238 LOWERING_FAILED(m_node, "Bad use kinds"); 4220 4239 } 4221 4240 … … 4496 4515 } 4497 4516 default: 4498 RELEASE_ASSERT_NOT_REACHED();4517 LOWERING_FAILED(m_node, "Bad use kind"); 4499 4518 return 0; 4500 4519 } … … 4869 4888 return Int52; 4870 4889 } 4871 RELEASE_ASSERT_NOT_REACHED();4890 LOWERING_FAILED(m_node, "Bad use kind"); 4872 4891 return Int52; 4873 4892 } … … 5014 5033 } 5015 5034 5016 RELEASE_ASSERT_NOT_REACHED();5035 LOWERING_FAILED(m_node, "Corrupt array class"); 5017 5036 return 0; 5018 5037 } … … 5326 5345 break; 5327 5346 default: 5328 dataLog("Unsupported speculation use kind: ", edge.useKind(), "\n");5329 RELEASE_ASSERT_NOT_REACHED();5347 LOWERING_FAILED(m_node, "Unsupported speculation use kind"); 5348 return; 5330 5349 } 5331 5350 } … … 5388 5407 switch (arrayMode.arrayClass()) { 5389 5408 case Array::OriginalArray: 5390 RELEASE_ASSERT_NOT_REACHED();5409 LOWERING_FAILED(m_node, "Unexpected original array"); 5391 5410 return 0; 5392 5411 … … 5408 5427 } 5409 5428 5410 RELEASE_ASSERT_NOT_REACHED(); 5429 LOWERING_FAILED(m_node, "Corrupt array class"); 5430 return 0; 5411 5431 } 5412 5432 … … 6044 6064 } 6045 6065 6046 RELEASE_ASSERT_NOT_REACHED();6066 LOWERING_FAILED(m_node, "Corrupt int52 kind"); 6047 6067 } 6048 6068 void setJSValue(Node* node, LValue value) … … 6171 6191 } 6172 6192 6193 NO_RETURN_DUE_TO_ASSERT void loweringFailed(Node* node, const char* file, int line, const char* function, const char* assertion) 6194 { 6195 if (!ASSERT_DISABLED) { 6196 dataLog("FTL ASSERTION FAILED: ", assertion, "\n"); 6197 dataLog(file, "(", line, ") : ", function, "\n"); 6198 dataLog("While handling node ", node, "\n"); 6199 RELEASE_ASSERT_NOT_REACHED(); 6200 } 6201 6202 m_loweringSucceeded = false; 6203 } 6204 6173 6205 VM& vm() { return m_graph.m_vm; } 6174 6206 CodeBlock* codeBlock() { return m_graph.m_codeBlock; } … … 6176 6208 Graph& m_graph; 6177 6209 State& m_ftlState; 6210 bool m_loweringSucceeded; 6178 6211 AbstractHeapRepository m_heaps; 6179 6212 Output m_out; … … 6216 6249 }; 6217 6250 6218 voidlowerDFGToLLVM(State& state)6251 bool lowerDFGToLLVM(State& state) 6219 6252 { 6220 6253 LowerDFGToLLVM lowering(state); 6221 lowering.lower();6254 return lowering.lower(); 6222 6255 } 6223 6256 -
branches/safari-600.5-branch/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.h
r164424 r180679 34 34 namespace JSC { namespace FTL { 35 35 36 voidlowerDFGToLLVM(State&);36 bool lowerDFGToLLVM(State&); 37 37 38 38 } } // namespace JSC::FTL
Note:
See TracChangeset
for help on using the changeset viewer.