aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/TargetSelectionDAG.td
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Target/TargetSelectionDAG.td')
-rw-r--r--lib/Target/TargetSelectionDAG.td105
1 files changed, 105 insertions, 0 deletions
diff --git a/lib/Target/TargetSelectionDAG.td b/lib/Target/TargetSelectionDAG.td
index a05d91b..e85589f 100644
--- a/lib/Target/TargetSelectionDAG.td
+++ b/lib/Target/TargetSelectionDAG.td
@@ -767,6 +767,111 @@ def atomic_load_add_64 : PatFrag<(ops node:$ptr, node:$inc),
return V->getValueType(0) == MVT::i64;
}]>;
+def atomic_load_sub_8 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_sub node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i8;
+}]>;
+def atomic_load_sub_16 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_sub node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i16;
+}]>;
+def atomic_load_sub_32 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_sub node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i32;
+}]>;
+def atomic_load_sub_64 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_sub node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i64;
+}]>;
+
+def atomic_load_and_8 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_and node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i8;
+}]>;
+def atomic_load_and_16 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_and node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i16;
+}]>;
+def atomic_load_and_32 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_and node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i32;
+}]>;
+def atomic_load_and_64 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_and node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i64;
+}]>;
+
+def atomic_load_or_8 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_or node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i8;
+}]>;
+def atomic_load_or_16 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_or node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i16;
+}]>;
+def atomic_load_or_32 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_or node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i32;
+}]>;
+def atomic_load_or_64 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_or node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i64;
+}]>;
+
+def atomic_load_xor_8 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_xor node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i8;
+}]>;
+def atomic_load_xor_16 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_xor node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i16;
+}]>;
+def atomic_load_xor_32 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_xor node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i32;
+}]>;
+def atomic_load_xor_64 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_xor node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i64;
+}]>;
+
+def atomic_load_nand_8 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_nand node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i8;
+}]>;
+def atomic_load_nand_16 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_nand node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i16;
+}]>;
+def atomic_load_nand_32 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_nand node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i32;
+}]>;
+def atomic_load_nand_64 : PatFrag<(ops node:$ptr, node:$inc),
+ (atomic_load_nand node:$ptr, node:$inc), [{
+ AtomicSDNode* V = cast<AtomicSDNode>(N);
+ return V->getValueType(0) == MVT::i64;
+}]>;
+
def atomic_swap_8 : PatFrag<(ops node:$ptr, node:$inc),
(atomic_swap node:$ptr, node:$inc), [{
AtomicSDNode* V = cast<AtomicSDNode>(N);