comment update
[oota-llvm.git] / include / llvm / Intrinsics.td
index 633063eb48fecef5537ab8c87e6f447ac73d165e..f9cee6217d8f5a9a09c70df76f3fd1af13242667 100644 (file)
@@ -48,6 +48,9 @@ def IntrWriteArgMem : IntrinsicProperty;
 // default if the intrinsic has no other Intr*Mem property.
 def IntrWriteMem : IntrinsicProperty;
 
+// Commutative - This intrinsic is commutative: X op Y == Y op X.
+def Commutative : IntrinsicProperty;
+
 //===----------------------------------------------------------------------===//
 // Types used by intrinsics.
 //===----------------------------------------------------------------------===//
@@ -61,6 +64,11 @@ class LLVMPointerType<LLVMType elty>
   LLVMType ElTy = elty;
 } 
 
+class LLVMAnyPointerType<LLVMType elty>
+  : LLVMType<iPTRAny>{
+  LLVMType ElTy = elty;
+} 
+
 class LLVMMatchType<int num>
   : LLVMType<OtherVT>{
   int Number = num;
@@ -81,6 +89,7 @@ def llvm_f128_ty       : LLVMType<f128>;
 def llvm_ppcf128_ty    : LLVMType<ppcf128>;
 def llvm_ptr_ty        : LLVMPointerType<llvm_i8_ty>;             // i8*
 def llvm_ptrptr_ty     : LLVMPointerType<llvm_ptr_ty>;            // i8**
+def llvm_anyptr_ty     : LLVMPointerType<llvm_i8_ty>;             // (space)i8*
 def llvm_empty_ty      : LLVMType<OtherVT>;                       // { }
 def llvm_descriptor_ty : LLVMPointerType<llvm_empty_ty>;          // { }*
 
@@ -267,58 +276,63 @@ def int_init_trampoline : Intrinsic<[llvm_ptr_ty, llvm_ptr_ty, llvm_ptr_ty,
 def int_memory_barrier : Intrinsic<[llvm_void_ty, llvm_i1_ty, llvm_i1_ty, 
                                     llvm_i1_ty, llvm_i1_ty, llvm_i1_ty], []>;
 
-def int_atomic_lcs   : Intrinsic<[llvm_anyint_ty,
-                                  LLVMPointerType<LLVMMatchType<0>>,
+def int_atomic_cmp_swap : Intrinsic<[llvm_anyint_ty,
+                                  LLVMAnyPointerType<LLVMMatchType<0>>,
                                   LLVMMatchType<0>, LLVMMatchType<0>],
                                  [IntrWriteArgMem]>,
-                       GCCBuiltin<"__sync_val_compare_and_swap">;
-def int_atomic_las   : Intrinsic<[llvm_anyint_ty,
-                                  LLVMPointerType<LLVMMatchType<0>>,
+                           GCCBuiltin<"__sync_val_compare_and_swap">;
+def int_atomic_load_add : Intrinsic<[llvm_anyint_ty,
+                                  LLVMAnyPointerType<LLVMMatchType<0>>,
                                   LLVMMatchType<0>],
                                  [IntrWriteArgMem]>,
-                       GCCBuiltin<"__sync_fetch_and_add">;
-def int_atomic_swap   : Intrinsic<[llvm_anyint_ty,
-                                  LLVMPointerType<LLVMMatchType<0>>,
+                           GCCBuiltin<"__sync_fetch_and_add">;
+def int_atomic_swap     : Intrinsic<[llvm_anyint_ty,
+                                  LLVMAnyPointerType<LLVMMatchType<0>>,
                                   LLVMMatchType<0>],
                                 [IntrWriteArgMem]>,
-                       GCCBuiltin<"__sync_lock_test_and_set">;
-def int_atomic_lss   : Intrinsic<[llvm_anyint_ty,
-                                  LLVMPointerType<LLVMMatchType<0>>,
+                           GCCBuiltin<"__sync_lock_test_and_set">;
+def int_atomic_load_sub : Intrinsic<[llvm_anyint_ty,
+                                  LLVMAnyPointerType<LLVMMatchType<0>>,
                                   LLVMMatchType<0>],
                                  [IntrWriteArgMem]>,
-                       GCCBuiltin<"__sync_fetch_and_sub">;
+                           GCCBuiltin<"__sync_fetch_and_sub">;
 def int_atomic_load_and : Intrinsic<[llvm_anyint_ty,
-                                  LLVMPointerType<LLVMMatchType<0>>,
+                                  LLVMAnyPointerType<LLVMMatchType<0>>,
                                   LLVMMatchType<0>],
                                  [IntrWriteArgMem]>,
                            GCCBuiltin<"__sync_fetch_and_and">;
 def int_atomic_load_or   : Intrinsic<[llvm_anyint_ty,
-                                  LLVMPointerType<LLVMMatchType<0>>,
+                                  LLVMAnyPointerType<LLVMMatchType<0>>,
                                   LLVMMatchType<0>],
                                  [IntrWriteArgMem]>,
                            GCCBuiltin<"__sync_fetch_and_or">;
-def int_atomic_load_xor  : Intrinsic<[llvm_anyint_ty,
-                                  LLVMPointerType<LLVMMatchType<0>>,
+def int_atomic_load_xor : Intrinsic<[llvm_anyint_ty,
+                                  LLVMAnyPointerType<LLVMMatchType<0>>,
                                   LLVMMatchType<0>],
                                  [IntrWriteArgMem]>,
                            GCCBuiltin<"__sync_fetch_and_xor">;
+def int_atomic_load_nand : Intrinsic<[llvm_anyint_ty,
+                                  LLVMAnyPointerType<LLVMMatchType<0>>,
+                                  LLVMMatchType<0>],
+                                 [IntrWriteArgMem]>,
+                           GCCBuiltin<"__sync_fetch_and_nand">;
 def int_atomic_load_min  : Intrinsic<[llvm_anyint_ty,
-                                   LLVMPointerType<LLVMMatchType<0>>,
+                                   LLVMAnyPointerType<LLVMMatchType<0>>,
                                    LLVMMatchType<0>],
                                   [IntrWriteArgMem]>,
                            GCCBuiltin<"__sync_fetch_and_min">;
 def int_atomic_load_max  : Intrinsic<[llvm_anyint_ty,
-                                   LLVMPointerType<LLVMMatchType<0>>,
+                                   LLVMAnyPointerType<LLVMMatchType<0>>,
                                    LLVMMatchType<0>],
                                   [IntrWriteArgMem]>,
                            GCCBuiltin<"__sync_fetch_and_max">;
 def int_atomic_load_umin : Intrinsic<[llvm_anyint_ty,
-                                   LLVMPointerType<LLVMMatchType<0>>,
+                                   LLVMAnyPointerType<LLVMMatchType<0>>,
                                    LLVMMatchType<0>],
                                   [IntrWriteArgMem]>,
                            GCCBuiltin<"__sync_fetch_and_umin">;
 def int_atomic_load_umax : Intrinsic<[llvm_anyint_ty,
-                                   LLVMPointerType<LLVMMatchType<0>>,
+                                   LLVMAnyPointerType<LLVMMatchType<0>>,
                                    LLVMMatchType<0>],
                                   [IntrWriteArgMem]>,
                            GCCBuiltin<"__sync_fetch_and_umax">;