find-throw-tag needs to traverse all the catch frames on the stack until it finds the tag, and therefore would be slower then checking a dynamically bound variable. If the check needs to be called often, then it is normally better to bind a special variable when the catch is established, and then check that variable. In situations when the check is rare (for example, it is called only in cases of error), using
find-throw-tag is better because it eliminates the overhead of binding the special.
LispWorks User Guide and Reference Manual - 13 Feb 2015