I speak mostly from an ARMv7 perspective (so pipelines, caches, prefetchers, etc are par for the course).
Your literal pool has a high degree of spacial locality WRT the instruction that references it. You can take measures to optimize this (see the ltorg directive) making I$ hits very likely.
In the end, the assembler is free to pick and choose which method is best for the target CPU and input code.