VarargsForwardingPhase should use bytecode liveness in addition to other uses to...
authorfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 27 Apr 2015 18:49:15 +0000 (18:49 +0000)
committerfpizlo@apple.com <fpizlo@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 27 Apr 2015 18:49:15 +0000 (18:49 +0000)
commit02dabedcb5788c83389379fc19906fc623704703
tree6a924b80022e9a1070e23d6546da5ddc368ba180
parent199b03b62bec1cf71f6c8bb97841ecb4beb80155
VarargsForwardingPhase should use bytecode liveness in addition to other uses to determine the last point that a candidate is used
https://bugs.webkit.org/show_bug.cgi?id=143843

Reviewed by Geoffrey Garen.

It will soon come to pass that Phantom isn't available at the time that
VarargsForwardingPhase runs. So, it needs to use some other mechanism for discovering when
a value dies for OSR.

This is simplified by two things:

1) The bytecode kill analysis is now reusable. This patch makes it even more reusable than
   before by polishing the API.

2) This phase already operates on one node at a time and allows itself to do a full search
   of the enclosing basic block for that node. This is fine because CreateDirectArguments
   and friends is a rarely occurring node. The fact that it operates on one node at a time
   makes it even easier to reason about OSR liveness - we just track the list of locals in
   which it is live.

This change has no effect right now but it is a necessary prerequisite to implementing
https://bugs.webkit.org/show_bug.cgi?id=143736.

* dfg/DFGBasicBlock.h:
(JSC::DFG::BasicBlock::tryAt):
* dfg/DFGForAllKills.h:
(JSC::DFG::forAllKilledOperands):
* dfg/DFGPhantomInsertionPhase.cpp:
* dfg/DFGVarargsForwardingPhase.cpp:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@183406 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/dfg/DFGBasicBlock.h
Source/JavaScriptCore/dfg/DFGForAllKills.h
Source/JavaScriptCore/dfg/DFGPhantomInsertionPhase.cpp
Source/JavaScriptCore/dfg/DFGVarargsForwardingPhase.cpp