As best I understand it, while instruction prefetch is a complex affair, data prefetch is limited to detecting incrementing sequential address access, unless directed through a PREFETCH op. I can't a find a good reference, but I believe at best the CPU can only optimize by detecting stride.
In no circumstance will the CPU magically understand the semantics of some data structure.
In no circumstance will the CPU magically understand the semantics of some data structure.