This is the enhancement suggested in D42536 to fix a shortcoming in regular InstCombine's canEvaluate* functionality.
When we have multiple uses of a value, but they're all in one instruction, we can allow that expression to be narrowed or widened for the same cost as a single-use value.
AFAICT, this can only matter for multiply: sub/and/or/xor/select would be simplified away if the operands are the same value; add becomes shl; shifts with a variable shift amount aren't handled.
Sorry, I did not notice this before.
But should not we do the same check also for the "Select" and "PHI" below?
Could that be related to the infinite loop caused by this patch?