This is to handle return value 'null' correctly; it has a different meaning for guards. Problems remain, though...
This just improves type inference a tiny bit.
This is a common fast-path that now gets code generated as ESmall. This should give the VM a fair change to spot the temp objects. It would be ideal to be able to code generate it as int, but then we need to have more control over the case when such a type is later merged after a branch.
Elixir has some codegen (for unicode) that creates huge switches of integers, which all branch to one or two different targets. This code special cases such code (that would otherwise be lookupswitch) so that we use one or two bit sets to determine the outcome. This reduces generated code size significantly for this particular case.
Right now spawn does not honour the process_limit value.