I'm not so sure.
I think the point using __builtin_expect is branch prediction, as stated above, by jclairem.
And the problem here is not only the cache misses the code can cause, but the wasted cycles in executing the branch marked as likely (or accelerated) when this is not the most probable branch to be executed. Even though you might want to optimize an unlikely branch because its execution time is critical, if you mark it as "likely" the CPU will start processing that branch every time (or most of the time) the function is called. So, the execution will then have to be thrown away and the CPU cycles will be wasted. Then the most probable executed branch (marked as "unlikely", to optimize the other one) will have to be executed again and so, the pipeline slowed down because of the branch misprediction.
Furthermore, the CPU has a branch prediction buffer (or something like that) so, if this function is called often, it will "know" that the most probable branch (marked as "unlikely") is, in fact, the "likely" branch, making the CPU hint totally useless. In case it is not called so often, a branch misprediction will occur for every call.
My apologies for the confusion created by the words [un]likely and most/less probable. It wasn't that easy to put. :P