If an argument is unused, we can pass in undef instead of the original
value to remove the use of the original value completely.
I have no problem with this going in as is. I have one question though. Why do we have to wait for ValueSimplify to finish? Wouldn't it be useful for AAIsDead to have isDeadArg(Arg) and then ValueSimplify could use that to decide whether to simplify or not?