A common post condition of the various visitor functions in CodeGen is that instructions, that do not return any values, simply return a nullptr Value as a sentinel. This has not been the case however for calls to some builtins returning void, as well as for an initializer expression of the form void(). This would then lead to ICEs in CodeGen on code relying on nullptr being returned for void values, which is eg. the case for conditional expressions [0].
This patch fixes that by returning nullptr Values for intrinsics known not to return any values as well as for a scalar initializer returning void.
Fixes https://github.com/llvm/llvm-project/issues/53127
Note:
I opted to adjust these functions as an idealistic goal to be more consistent with the rest of the codebase. An alternative implementation that would have also fixed the above issue and would be less code is to simply handle it within the visit function of the conditional expression, by simply checking if it the type of the expression is void and returning bailing out by returning nullptr there instead of creating the invalid phi node. If you prefer that version or something of the sorts please let me know