Split stack alias class of CallEffects into inputs, actrec and outputs
commit1907baaf05c703b54d71ee4758de29b3bd55d035
authorJan Oravec <jan@fb.com>
Thu, 3 Oct 2019 00:44:18 +0000 (2 17:44 -0700)
committerFacebook Github Bot <facebook-github-bot@users.noreply.github.com>
Thu, 3 Oct 2019 00:47:09 +0000 (2 17:47 -0700)
tree58767906fa5c48cb20fb376b5d98090bf2a962ed
parent88f773817565b993fe710a0abf906b70ca13c265
Split stack alias class of CallEffects into inputs, actrec and outputs

Summary:
CallEffects is conflating three separate alias classes together, so split
the `stack` alias class into:

- `inputs` (arguments, unpack, generics): the callee reads them
- `actrec`: the instruction writes it, but the write is currently modeled via SpillFrame, so we pretend to read it
- `outputs` (inout): the callee writes it
- `kills`: this already exists, but was also part of the `stack`

This diff also fixes handling of `outputs`, allowing store-elim to move
NullUninit writes for inout to the catch.

It also provides sufficient enough granularity to kill SpillFrame.

Reviewed By: markw65

Differential Revision: D17709363

fbshipit-source-id: 1c83dbd2a02143c280474b3a863099006f982062
hphp/runtime/base/execution-context.cpp
hphp/runtime/vm/bytecode.cpp
hphp/runtime/vm/jit/alias-analysis.cpp
hphp/runtime/vm/jit/frame-state.cpp
hphp/runtime/vm/jit/load-elim.cpp
hphp/runtime/vm/jit/memory-effects.cpp
hphp/runtime/vm/jit/memory-effects.h
hphp/runtime/vm/jit/refcount-opts.cpp
hphp/runtime/vm/jit/store-elim.cpp
hphp/runtime/vm/unwind.cpp