@@ -1204,6 +1204,22 @@ def : Pat<(i16 (atomic_load_nonext_16 addr:$src)), (MOV16rm addr:$src)>;
12041204def : Pat<(i32 (atomic_load_nonext_32 addr:$src)), (MOV32rm addr:$src)>;
12051205def : Pat<(i64 (atomic_load_nonext_64 addr:$src)), (MOV64rm addr:$src)>;
12061206
1207+ // load atomic <2 x i16>
1208+ def : Pat<(v4i32 (scalar_to_vector (i32 (atomic_load_32 addr:$src)))),
1209+ (MOVDI2PDIrm addr:$src)>, Requires<[UseSSE2]>;
1210+ def : Pat<(v4i32 (scalar_to_vector (i32 (atomic_load_32 addr:$src)))),
1211+ (VMOVSSrm addr:$src)>, Requires<[UseAVX]>;
1212+ def : Pat<(v4i32 (scalar_to_vector (i32 (atomic_load_32 addr:$src)))),
1213+ (VMOVSSZrm addr:$src)>, Requires<[HasAVX512]>;
1214+
1215+ // load atomic <2 x i32,float>
1216+ def : Pat<(v2i64 (scalar_to_vector (i64 (atomic_load_64 addr:$src)))),
1217+ (MOV64toPQIrm addr:$src)>, Requires<[UseSSE2]>;
1218+ def : Pat<(v2i64 (scalar_to_vector (i64 (atomic_load_64 addr:$src)))),
1219+ (VMOV64toPQIrm addr:$src)>, Requires<[UseAVX]>;
1220+ def : Pat<(v2i64 (scalar_to_vector (i64 (atomic_load_64 addr:$src)))),
1221+ (VMOV64toPQIZrm addr:$src)>, Requires<[HasAVX512]>;
1222+
12071223// Floating point loads/stores.
12081224def : Pat<(atomic_store_32 (i32 (bitconvert (f32 FR32:$src))), addr:$dst),
12091225 (MOVSSmr addr:$dst, FR32:$src)>, Requires<[UseSSE1]>;
0 commit comments