Relax more guards
This diff significantly generalizes guard relaxation and adds support
for more bytecode instructions. Before, only CGetL, SetL, RetC, and
RetV were able to relax their inputs, and only in limited ways,
e.g. if their outputs were not used or only used in specific ways.
The new approach follows how the input types flow into the output
types, thus allowing dependencies to be relaxed even if they feed a
chain of values through the tracelet.
This diff also add support for relaxing inputs for the following
bytecode instructions:
- Pop*
- FCall
- FCallArray
- AddElemC
- ArrayIdx
- SetS
- SetG
- ContPack
- ContRetC
- ContHandle
The spill area was also increased (from 16 to 32 cells) since relaxed
dependencies increase register pressure -- relaxed types are not
immediates that can be burned in and need to reside in registers
instead.