Skip to content

Commit 7181420

Browse files
committed
[JSC] Attach more precise String types in DFG AI
https://bugs.webkit.org/show_bug.cgi?id=294236 rdar://152903113 Reviewed by Yijia Huang. Some of DFG nodes should say the result string is already resolved. * Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h: (JSC::DFG::AbstractInterpreter<AbstractStateType>::executeEffects): Canonical link: https://commits.webkit.org/296029@main
1 parent bdd5e4b commit 7181420

1 file changed

Lines changed: 13 additions & 13 deletions

File tree

Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ bool AbstractInterpreter<AbstractStateType>::executeEffects(unsigned clobberLimi
432432
case LazyJSValue::SingleCharacterString:
433433
case LazyJSValue::KnownStringImpl:
434434
case LazyJSValue::NewStringImpl:
435-
setTypeForNode(node, SpecString);
435+
setTypeForNode(node, SpecStringResolved);
436436
break;
437437
}
438438
break;
@@ -1026,7 +1026,7 @@ bool AbstractInterpreter<AbstractStateType>::executeEffects(unsigned clobberLimi
10261026
}
10271027

10281028
case MakeRope: {
1029-
setForNode(node, m_vm.stringStructure.get());
1029+
setTypeForNode(node, SpecString);
10301030
break;
10311031
}
10321032

@@ -2593,18 +2593,18 @@ bool AbstractInterpreter<AbstractStateType>::executeEffects(unsigned clobberLimi
25932593
DFG_CRASH(m_graph, node, "Bad use kind");
25942594
break;
25952595
}
2596-
setTypeForNode(node, SpecString);
2596+
setTypeForNode(node, SpecStringResolved);
25972597
break;
25982598

25992599
case StringCharAt:
2600-
setForNode(node, m_vm.stringStructure.get());
2600+
setTypeForNode(node, SpecStringResolved);
26012601
break;
26022602

26032603
case StringAt: {
26042604
if (node->arrayMode().isOutOfBounds())
26052605
setTypeForNode(node, SpecString | SpecOther);
26062606
else
2607-
setForNode(node, m_vm.stringStructure.get());
2607+
setTypeForNode(node, SpecString);
26082608
break;
26092609
}
26102610

@@ -2876,7 +2876,7 @@ bool AbstractInterpreter<AbstractStateType>::executeEffects(unsigned clobberLimi
28762876
clobberWorld();
28772877
makeHeapTopForNode(node);
28782878
} else
2879-
setForNode(node, m_vm.stringStructure.get());
2879+
setTypeForNode(node, SpecStringResolved);
28802880
break;
28812881
case Array::DirectArguments:
28822882
case Array::ScopedArguments:
@@ -3288,15 +3288,15 @@ bool AbstractInterpreter<AbstractStateType>::executeEffects(unsigned clobberLimi
32883288
// This doesn't clobber the world. It just reads and writes regexp state.
32893289
} else
32903290
clobberWorld();
3291-
setForNode(node, m_vm.stringStructure.get());
3291+
setTypeForNode(node, SpecString);
32923292
break;
32933293

32943294
case StringReplaceString:
32953295
if (node->child3().useKind() != StringUse) {
32963296
// child3 could be non String (e.g. function). In this case, any side effect can happen.
32973297
clobberWorld();
32983298
}
3299-
setForNode(node, m_vm.stringStructure.get());
3299+
setTypeForNode(node, SpecString);
33003300
break;
33013301

33023302
case Jump:
@@ -3501,7 +3501,7 @@ bool AbstractInterpreter<AbstractStateType>::executeEffects(unsigned clobberLimi
35013501
RELEASE_ASSERT_NOT_REACHED();
35023502
break;
35033503
}
3504-
setForNode(node, m_vm.stringStructure.get());
3504+
setTypeForNode(node, SpecString);
35053505
break;
35063506
}
35073507

@@ -3514,7 +3514,7 @@ bool AbstractInterpreter<AbstractStateType>::executeEffects(unsigned clobberLimi
35143514
break;
35153515
}
35163516
}
3517-
setForNode(node, m_vm.stringStructure.get());
3517+
setTypeForNode(node, SpecString);
35183518
break;
35193519
}
35203520

@@ -3549,17 +3549,17 @@ bool AbstractInterpreter<AbstractStateType>::executeEffects(unsigned clobberLimi
35493549
int32_t radix = radixValue.asInt32();
35503550
if (2 <= radix && radix <= 36) {
35513551
didFoldClobberWorld();
3552-
setForNode(node, m_graph.m_vm.stringStructure.get());
3552+
setTypeForNode(node, SpecString);
35533553
break;
35543554
}
35553555
}
35563556
clobberWorld();
3557-
setForNode(node, m_graph.m_vm.stringStructure.get());
3557+
setTypeForNode(node, SpecString);
35583558
break;
35593559
}
35603560

35613561
case NumberToStringWithValidRadixConstant: {
3562-
setForNode(node, m_graph.m_vm.stringStructure.get());
3562+
setTypeForNode(node, SpecString);
35633563
break;
35643564
}
35653565

0 commit comments

Comments
 (0)