@@ -842,15 +842,26 @@ pub enum Locality {
842842 /// Data is expected to be reused eventually.
843843 ///
844844 /// Typically prefetches into L3 cache (if the CPU supports it).
845- L3 = 1 ,
845+ L3 ,
846846 /// Data is expected to be reused in the near future.
847847 ///
848848 /// Typically prefetches into L2 cache.
849- L2 = 2 ,
849+ L2 ,
850850 /// Data is expected to be reused very soon.
851851 ///
852852 /// Typically prefetches into L1 cache.
853- L1 = 3 ,
853+ L1 ,
854+ }
855+
856+ impl Locality {
857+ /// Convert to the constant that LLVM associates with a locality.
858+ const fn to_llvm ( self ) -> i32 {
859+ match self {
860+ Self :: L3 => 1 ,
861+ Self :: L2 => 2 ,
862+ Self :: L1 => 3 ,
863+ }
864+ }
854865}
855866
856867/// Prefetch the cache line containing `ptr` for a future read.
@@ -882,9 +893,9 @@ pub enum Locality {
882893#[ unstable( feature = "hint_prefetch" , issue = "146941" ) ]
883894pub const fn prefetch_read < T > ( ptr : * const T , locality : Locality ) {
884895 match locality {
885- Locality :: L3 => intrinsics:: prefetch_read_data :: < T , { Locality :: L3 as i32 } > ( ptr) ,
886- Locality :: L2 => intrinsics:: prefetch_read_data :: < T , { Locality :: L2 as i32 } > ( ptr) ,
887- Locality :: L1 => intrinsics:: prefetch_read_data :: < T , { Locality :: L1 as i32 } > ( ptr) ,
896+ Locality :: L3 => intrinsics:: prefetch_read_data :: < T , { Locality :: L3 . to_llvm ( ) } > ( ptr) ,
897+ Locality :: L2 => intrinsics:: prefetch_read_data :: < T , { Locality :: L2 . to_llvm ( ) } > ( ptr) ,
898+ Locality :: L1 => intrinsics:: prefetch_read_data :: < T , { Locality :: L1 . to_llvm ( ) } > ( ptr) ,
888899 }
889900}
890901
@@ -919,9 +930,9 @@ pub const fn prefetch_read_non_temporal<T>(ptr: *const T, locality: Locality) {
919930#[ unstable( feature = "hint_prefetch" , issue = "146941" ) ]
920931pub const fn prefetch_write < T > ( ptr : * mut T , locality : Locality ) {
921932 match locality {
922- Locality :: L3 => intrinsics:: prefetch_write_data :: < T , { Locality :: L3 as i32 } > ( ptr) ,
923- Locality :: L2 => intrinsics:: prefetch_write_data :: < T , { Locality :: L2 as i32 } > ( ptr) ,
924- Locality :: L1 => intrinsics:: prefetch_write_data :: < T , { Locality :: L1 as i32 } > ( ptr) ,
933+ Locality :: L3 => intrinsics:: prefetch_write_data :: < T , { Locality :: L3 . to_llvm ( ) } > ( ptr) ,
934+ Locality :: L2 => intrinsics:: prefetch_write_data :: < T , { Locality :: L2 . to_llvm ( ) } > ( ptr) ,
935+ Locality :: L1 => intrinsics:: prefetch_write_data :: < T , { Locality :: L1 . to_llvm ( ) } > ( ptr) ,
925936 }
926937}
927938
@@ -956,8 +967,8 @@ pub const fn prefetch_write_non_temporal<T>(ptr: *const T, locality: Locality) {
956967#[ unstable( feature = "hint_prefetch" , issue = "146941" ) ]
957968pub const fn prefetch_read_instruction < T > ( ptr : * const T , locality : Locality ) {
958969 match locality {
959- Locality :: L3 => intrinsics:: prefetch_read_instruction :: < T , { Locality :: L3 as i32 } > ( ptr) ,
960- Locality :: L2 => intrinsics:: prefetch_read_instruction :: < T , { Locality :: L2 as i32 } > ( ptr) ,
961- Locality :: L1 => intrinsics:: prefetch_read_instruction :: < T , { Locality :: L1 as i32 } > ( ptr) ,
970+ Locality :: L3 => intrinsics:: prefetch_read_instruction :: < T , { Locality :: L3 . to_llvm ( ) } > ( ptr) ,
971+ Locality :: L2 => intrinsics:: prefetch_read_instruction :: < T , { Locality :: L2 . to_llvm ( ) } > ( ptr) ,
972+ Locality :: L1 => intrinsics:: prefetch_read_instruction :: < T , { Locality :: L1 . to_llvm ( ) } > ( ptr) ,
962973 }
963974}
0 commit comments