Add an imploding if-then-else vasm construct
Summary:
The use case here is v/darray polymorphism logging. We want to
determine whether a given v/darray typehint sees both varray and darray
arguments, but we don't want to log with every single function
invocation (and ideally, we wouldn't even do the v/darray bit check).
To accomplish this, we use a smashable mov in the TC to flag if we've
hit each side of the branch. If both sides are hit, we then smash a jmp
to skip over the whole sequence.
In the case where both sides of the branch are taken, this largely
eliminates the cost in the steady state. If only one branch is taken,
this at least avoids the call, though not the branch itself.
Reviewed By: jjgriego
Differential Revision:
D14197287
fbshipit-source-id:
a5faf04acc60eb488e563e2b43005f696a8d5997