The simplest thing to do, to start playing with type-specialization, would be to propagate types within blocks, but stop at branch instructions.
This will require modifying the context struct ctx_t to have somewhere to store local variable types.
We can start by propagating integer types and constants between instructions like putobject_INT2FIX_1_, opt_plus, opt_minus, etc. A good candidate benchmark to test such optimizations is optcarrot. We might also be able to eliminate multiple redundant array type checks.