Name discarded values
Discarded values, or “holes”, are left-values written _.
This pass replaces these holes with variables. In order to avoid overwriting live variables, the replacement variables must usually be fresh.
When such a hole is the destination of an in-place operation (many instructions
of the x86_64 instruction set operate in-place), it is often not possible to
fill it correctly. Hence compilation will abort. Consider for instance the
instruction written below compiled on x86_64 (where x holds the address of
some machine word in memory).
_ = [x] + 1;
The instruction that loads a value and increments it (INC) operates in-place,
i.e., write its result in memory, here at address x. Therefore, as it is not
possible to discard the result, compilation fails.