summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target
diff options
context:
space:
mode:
authorMatt Arsenault <Matthew.Arsenault@amd.com>2014-06-11 18:08:42 +0000
committerMatt Arsenault <Matthew.Arsenault@amd.com>2014-06-11 18:08:42 +0000
commit0e69e8128c17686ec50e767644199251023f7b36 (patch)
tree64cc2b14c3bcb4643b4e8dfa4c7281901a0eb43d /llvm/lib/Target
parent8c6613d2bf53f1680bf3f940d2010e66e488c284 (diff)
downloadbcm5719-llvm-0e69e8128c17686ec50e767644199251023f7b36.tar.gz
bcm5719-llvm-0e69e8128c17686ec50e767644199251023f7b36.zip
R600/SI: Add other LDS atomic operations
llvm-svn: 210676
Diffstat (limited to 'llvm/lib/Target')
-rw-r--r--llvm/lib/Target/R600/SIInstructions.td15
1 files changed, 12 insertions, 3 deletions
diff --git a/llvm/lib/Target/R600/SIInstructions.td b/llvm/lib/Target/R600/SIInstructions.td
index bbe62a9dae8..a00a8ba9471 100644
--- a/llvm/lib/Target/R600/SIInstructions.td
+++ b/llvm/lib/Target/R600/SIInstructions.td
@@ -2210,7 +2210,7 @@ defm : DSWritePat <DS_WRITE_B16, i32, truncstorei16_local>;
defm : DSWritePat <DS_WRITE_B32, i32, local_store>;
defm : DSWritePat <DS_WRITE_B64, i64, local_store>;
-multiclass DSAtomicPat<DS inst, ValueType vt, PatFrag frag> {
+multiclass DSAtomicRetPat<DS inst, ValueType vt, PatFrag frag> {
def : Pat <
(frag (add i32:$ptr, (i32 IMM16bit:$offset)), vt:$value),
(inst (i1 0), $ptr, $value, (as_i16imm $offset))
@@ -2222,8 +2222,17 @@ multiclass DSAtomicPat<DS inst, ValueType vt, PatFrag frag> {
>;
}
-defm : DSAtomicPat<DS_ADD_RTN_U32, i32, atomic_load_add_local>;
-defm : DSAtomicPat<DS_SUB_RTN_U32, i32, atomic_load_sub_local>;
+defm : DSAtomicRetPat<DS_WRXCHG_RTN_B32, i32, atomic_swap_local>;
+defm : DSAtomicRetPat<DS_ADD_RTN_U32, i32, atomic_load_add_local>;
+defm : DSAtomicRetPat<DS_SUB_RTN_U32, i32, atomic_load_sub_local>;
+defm : DSAtomicRetPat<DS_AND_RTN_B32, i32, atomic_load_and_local>;
+defm : DSAtomicRetPat<DS_OR_RTN_B32, i32, atomic_load_or_local>;
+defm : DSAtomicRetPat<DS_XOR_RTN_B32, i32, atomic_load_xor_local>;
+defm : DSAtomicRetPat<DS_MIN_RTN_I32, i32, atomic_load_min_local>;
+defm : DSAtomicRetPat<DS_MAX_RTN_I32, i32, atomic_load_max_local>;
+defm : DSAtomicRetPat<DS_MIN_RTN_U32, i32, atomic_load_umin_local>;
+defm : DSAtomicRetPat<DS_MAX_RTN_U32, i32, atomic_load_umax_local>;
+
//===----------------------------------------------------------------------===//
// MUBUF Patterns
OpenPOWER on IntegriCloud