f4942ec853
- 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).