If we are only removing bits that were added by the extend we should be able to use a smaller extend. I think.
We already reduce cases like this when there is binop in between. For example:
define float @bar(half %a, half %x) { %b = fpext half %a to double %z = fpext half %x to double %y = fmul double %b, %z %c = fptrunc double %y to float ret float %c }
I don't think that this comment clarifies anything, since case 10 no longer exists. It would probably be clearer to just remove it; the repository history documents what it "used to be".