Changeset 235538 in webkit
- Timestamp:
- Aug 31, 2018, 12:45:02 AM (8 years ago)
- Location:
- trunk
- Files:
-
- 1 added
- 6 edited
-
JSTests/ChangeLog (modified) (1 diff)
-
JSTests/stress/may-exit-should-be-false-regexp-constant-folding.js (added)
-
Source/JavaScriptCore/ChangeLog (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGNode.cpp (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGNode.h (modified) (1 diff)
-
Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/JSTests/ChangeLog
r235515 r235538 1 2018-08-31 Saam barati <sbarati@apple.com> 2 3 convertToRegExpMatchFastGlobal must use KnownString as the child use kind 4 https://bugs.webkit.org/show_bug.cgi?id=189173 5 <rdar://problem/43501645> 6 7 Reviewed by Michael Saboff. 8 9 * stress/may-exit-should-be-false-regexp-constant-folding.js: Added. 10 (foo): 11 (bar): 12 1 13 2018-08-30 Saam barati <sbarati@apple.com> 2 14 -
trunk/Source/JavaScriptCore/ChangeLog
r235527 r235538 1 2018-08-31 Saam barati <sbarati@apple.com> 2 3 convertToRegExpMatchFastGlobal must use KnownString as the child use kind 4 https://bugs.webkit.org/show_bug.cgi?id=189173 5 <rdar://problem/43501645> 6 7 Reviewed by Michael Saboff. 8 9 We were crashing during validation because mayExit returned true 10 at a point in the program when we weren't allowed to exit. 11 12 The issue was is in StrengthReduction: we end up emitting code that 13 had a StringUse on an edge after a node that did side effects and before 14 an ExitOK/bytecode number transition. However, StrenghReduction did the 15 right thing here and also emitted the type checks before the node with 16 side effects. It just did bad bookkeeping. The node we convert to needs 17 to use KnownStringUse instead of StringUse for the child edge. 18 19 * dfg/DFGNode.cpp: 20 (JSC::DFG::Node::convertToRegExpExecNonGlobalOrStickyWithoutChecks): 21 (JSC::DFG::Node::convertToRegExpMatchFastGlobalWithoutChecks): 22 (JSC::DFG::Node::convertToRegExpExecNonGlobalOrSticky): Deleted. 23 (JSC::DFG::Node::convertToRegExpMatchFastGlobal): Deleted. 24 * dfg/DFGNode.h: 25 * dfg/DFGStrengthReductionPhase.cpp: 26 (JSC::DFG::StrengthReductionPhase::handleNode): 27 1 28 2018-08-30 Saam barati <sbarati@apple.com> 2 29 -
trunk/Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h
r235106 r235538 2218 2218 case RegExpMatchFast: 2219 2219 ASSERT(node->child2().useKind() == RegExpObjectUse); 2220 ASSERT(node->child3().useKind() == StringUse );2220 ASSERT(node->child3().useKind() == StringUse || node->child3().useKind() == KnownStringUse); 2221 2221 setTypeForNode(node, SpecOther | SpecArray); 2222 2222 break; 2223 2223 2224 2224 case RegExpMatchFastGlobal: 2225 ASSERT(node->child2().useKind() == StringUse );2225 ASSERT(node->child2().useKind() == StringUse || node->child2().useKind() == KnownStringUse); 2226 2226 setTypeForNode(node, SpecOther | SpecArray); 2227 2227 break; -
trunk/Source/JavaScriptCore/dfg/DFGNode.cpp
r232000 r235538 269 269 } 270 270 271 void Node::convertToRegExpExecNonGlobalOrSticky (FrozenValue* regExp)271 void Node::convertToRegExpExecNonGlobalOrStickyWithoutChecks(FrozenValue* regExp) 272 272 { 273 273 ASSERT(op() == RegExpExec); 274 274 setOpAndDefaultFlags(RegExpExecNonGlobalOrSticky); 275 275 children.child1() = Edge(children.child1().node(), KnownCellUse); 276 children.child2() = Edge(children.child3().node(), StringUse);276 children.child2() = Edge(children.child3().node(), KnownStringUse); 277 277 children.child3() = Edge(); 278 278 m_opInfo = regExp; 279 279 } 280 280 281 void Node::convertToRegExpMatchFastGlobal (FrozenValue* regExp)281 void Node::convertToRegExpMatchFastGlobalWithoutChecks(FrozenValue* regExp) 282 282 { 283 283 ASSERT(op() == RegExpMatchFast); 284 284 setOpAndDefaultFlags(RegExpMatchFastGlobal); 285 285 children.child1() = Edge(children.child1().node(), KnownCellUse); 286 children.child2() = Edge(children.child3().node(), StringUse);286 children.child2() = Edge(children.child3().node(), KnownStringUse); 287 287 children.child3() = Edge(); 288 288 m_opInfo = regExp; -
trunk/Source/JavaScriptCore/dfg/DFGNode.h
r235106 r235538 758 758 void convertToCallDOM(Graph&); 759 759 760 void convertToRegExpExecNonGlobalOrSticky (FrozenValue* regExp);761 void convertToRegExpMatchFastGlobal (FrozenValue* regExp);760 void convertToRegExpExecNonGlobalOrStickyWithoutChecks(FrozenValue* regExp); 761 void convertToRegExpMatchFastGlobalWithoutChecks(FrozenValue* regExp); 762 762 763 763 void convertToSetRegExpObjectLastIndex() -
trunk/Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp
r234178 r235538 509 509 m_nodeIndex, origin, jsNumber(0), UntypedUse)); 510 510 origin = origin.withInvalidExit(); 511 m_node->convertToRegExpMatchFastGlobal (m_graph.freeze(regExp));511 m_node->convertToRegExpMatchFastGlobalWithoutChecks(m_graph.freeze(regExp)); 512 512 m_node->origin = origin; 513 513 m_changed = true; … … 775 775 m_insertionSet.insertNode( 776 776 m_nodeIndex, SpecNone, Check, origin, m_node->children.justChecks()); 777 m_node->convertToRegExpExecNonGlobalOrSticky (m_graph.freeze(regExp));777 m_node->convertToRegExpExecNonGlobalOrStickyWithoutChecks(m_graph.freeze(regExp)); 778 778 m_changed = true; 779 779 return true;
Note:
See TracChangeset
for help on using the changeset viewer.