The current primops for prefetching do not properly work in pure code; namely, the primops are not 'hoisted' into the correct call sites based on when arguments are evaluated. Instead, they should use a seq-like interface, which will cause it to be evaluated when the needed term is.
See Trac #9353 for the full discussion.