- Add ReqBindJmp, and ReqBindJmpCond instructions which emit service
requests.
- GuardLoc/GuardStk always imply cross-trace control flow
- New CheckLoc/CheckStk instructions imply inside-of-trace
control flow.
- Renamed GuardType to CheckType to match this convention (we were
loosly following it in the api to irtranslator, so I spread it
through everything)
- Check{Loc,Stk} can be optimized into SideExitGuard{Stk,Loc}
- Reimplement jumpopts using this:
- Check{Loc,Stk} branching to a "normal exit" can turn into
a SyncABIRegs; SideExitGuard{Loc,Stk}.
- A conditional jump to a normal exit followed by another normal
exit turns into SyncABIRegs; ReqBindJmpFoo.
- Remove the ExitTraceFoo instructions.
- Remove IRInstruction::{get,set}TCA.
- Remove order dependence in the ir.h enum. (bsimmers has some
ideas about generic branch fusion that would reduce the
duplication there wrt this new set of similar op names; we
discussed it and for now it seemed ok to have a whole ReqBindJmp*
family, though.)
- Fix the creation of unused REQ_BIND_JMPs in astubs. I think there
was also unused dead jumps-to-fallbacks in astubs due to the (now
unneeded) guard-hoisting optimizations, but I haven't verified.
- Some random cleanup along the way (adding consts to members,
comments, removed some weird functions in codegen, etc).
I was learning from @jdelong and he said that you should use
double quotes for local includes and angle brackets for library
includes. I asked why our code was the way it was, and he said he wanted
to clean it up. I beat him to it :)
Conflicts:
hphp/runtime/base/server/admin_request_handler.cpp
hphp/runtime/vm/named_entity.h
This change is mostly for FB internal organizational reasons.
Building is not effected beyond the fact that the target now
lands in hphp/hhvm/hhvm rather than src/hhvm/hhvm.