To summarize, deciding when to drop prefetches is a complex issue. The one clear-cut case where prefetches should be dropped is when they reference invalid addresses. Because of our desire to minimize the performance overhead for this case (which can arise frequently when speculatively prefetching pointers), we would lean toward dropping prefetches as soon as a TLB miss is detected, even though this means giving up the ability to hide latency during legitimate TLB misses. A better solution may be to distinguish ``speculative'' and ``non-speculative'' prefetches, to give software control over this policy. Finally, given that prefetches are issued selectively, it makes little difference whether they are dropped once the prefetch issue buffer fills up, since this rarely happens.
Once a prefetch has been issued to the memory subsystem, it is simply a matter of finding the data and then moving it close to the processor. Both halves of this mechanism will be discussed in the next section.