When committing call instructions, (a) create rather than clone if we're using a non-void function as if void, as this results in the wrong size record being created, and (b) cast values to the types expected by the target function rather than the original call instruction.

Both of these cases are only encountered when function pointer coercion has been used coupled with confidence that your calling convention will tolerate the pun.