diff options
Diffstat (limited to 'contrib/llvm/lib/Target/AArch64/AArch64InstrAtomics.td')
-rw-r--r-- | contrib/llvm/lib/Target/AArch64/AArch64InstrAtomics.td | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/contrib/llvm/lib/Target/AArch64/AArch64InstrAtomics.td b/contrib/llvm/lib/Target/AArch64/AArch64InstrAtomics.td index 153bcf75cbcd..35cd7735ceb7 100644 --- a/contrib/llvm/lib/Target/AArch64/AArch64InstrAtomics.td +++ b/contrib/llvm/lib/Target/AArch64/AArch64InstrAtomics.td @@ -409,13 +409,18 @@ let Predicates = [HasLSE] in { defm : LDOPregister_patterns<"LDADD", "atomic_load_add">; defm : LDOPregister_patterns<"LDSET", "atomic_load_or">; defm : LDOPregister_patterns<"LDEOR", "atomic_load_xor">; + defm : LDOPregister_patterns<"LDCLR", "atomic_load_clr">; defm : LDOPregister_patterns<"LDSMAX", "atomic_load_max">; defm : LDOPregister_patterns<"LDSMIN", "atomic_load_min">; defm : LDOPregister_patterns<"LDUMAX", "atomic_load_umax">; defm : LDOPregister_patterns<"LDUMIN", "atomic_load_umin">; defm : LDOPregister_patterns<"SWP", "atomic_swap">; + defm : CASregister_patterns<"CAS", "atomic_cmp_swap">; + + // These two patterns are only needed for global isel, selection dag isel + // converts atomic load-sub into a sub and atomic load-add, and likewise for + // and -> clr. defm : LDOPregister_patterns_mod<"LDADD", "atomic_load_sub", "SUB">; defm : LDOPregister_patterns_mod<"LDCLR", "atomic_load_and", "ORN">; - defm : CASregister_patterns<"CAS", "atomic_cmp_swap">; } |