Skip to content

Commit 226394d

Browse files
committed
[X86] Remove extra MOV after widening atomic load
This change adds patterns to optimize out an extra MOV present after widening the atomic load.
1 parent e358aca commit 226394d

File tree

2 files changed

+466
-74
lines changed

2 files changed

+466
-74
lines changed

llvm/lib/Target/X86/X86InstrCompiler.td

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1204,6 +1204,22 @@ def : Pat<(i16 (atomic_load_nonext_16 addr:$src)), (MOV16rm addr:$src)>;
12041204
def : Pat<(i32 (atomic_load_nonext_32 addr:$src)), (MOV32rm addr:$src)>;
12051205
def : 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.
12081224
def : Pat<(atomic_store_32 (i32 (bitconvert (f32 FR32:$src))), addr:$dst),
12091225
(MOVSSmr addr:$dst, FR32:$src)>, Requires<[UseSSE1]>;

0 commit comments

Comments
 (0)