For PR950:
[oota-llvm.git] / include / llvm / Intrinsics.td
index e142a0791df3cf86dce7b5d13cd6336f123bfb76..3169c22a057a2ce01b9c94d2c2e1ec0a4edd2247 100644 (file)
@@ -24,24 +24,24 @@ class IntrinsicProperty;
 // if correct) to the least aggressive.  If no property is set, the worst case 
 // is assumed (IntrWriteMem).
 
-// InstrNoMem - The intrinsic does not access memory or have any other side
+// IntrNoMem - The intrinsic does not access memory or have any other side
 // effects.  It may be CSE'd deleted if dead, etc.
-def InstrNoMem : IntrinsicProperty;
+def IntrNoMem : IntrinsicProperty;
 
-// InstrReadArgMem - This intrinsic reads only from memory that one of its
+// IntrReadArgMem - This intrinsic reads only from memory that one of its
 // arguments points to, but may read an unspecified amount.
-def InstrReadArgMem : IntrinsicProperty;
+def IntrReadArgMem : IntrinsicProperty;
 
 // IntrReadMem - This intrinsic reads from unspecified memory, so it cannot be
 // moved across stores.  However, it can be reordered otherwise and can be
 // deleted if dead.
 def IntrReadMem : IntrinsicProperty;
 
-// InstrWriteArgMem - This intrinsic reads and writes only from memory that one
+// IntrWriteArgMem - This intrinsic reads and writes only from memory that one
 // of its arguments points to, but may access an unspecified amount.  It has no
 // other side effects.  This may only be used if the intrinsic doesn't "capture"
 // the argument pointer (e.g. storing it someplace).
-def InstrWriteArgMem : IntrinsicProperty;
+def IntrWriteArgMem : IntrinsicProperty;
 
 // IntrWriteMem - This intrinsic may read or modify unspecified memory or has 
 // other side effects.  It cannot be modified by the optimizer.  This is the
@@ -75,10 +75,15 @@ def llvm_uint_ty       : LLVMType<i32, "Type::UIntTyID">;
 def llvm_ulong_ty      : LLVMType<i64, "Type::ULongTyID">;
 def llvm_float_ty      : LLVMType<f32, "Type::FloatTyID">;
 def llvm_double_ty     : LLVMType<f64, "Type::DoubleTyID">;
-def llvm_ptr_ty        : LLVMType<OtherVT, "Type::PointerTyID">;     // sbyte*
-def llvm_ptrptr_ty     : LLVMType<OtherVT, "Type::PointerTyID">;     // sbyte**
-def llvm_descriptor_ty : LLVMType<OtherVT, "Type::PointerTyID">;     // global*
+def llvm_ptr_ty        : LLVMType<iPTR, "Type::PointerTyID">;     // sbyte*
+def llvm_ptrptr_ty     : LLVMType<iPTR, "Type::PointerTyID">;     // sbyte**
+def llvm_descriptor_ty : LLVMType<iPTR, "Type::PointerTyID">;     // global*
 
+def llvm_v16i8_ty      : LLVMPackedType<v16i8,16, llvm_sbyte_ty>;  // 16 x sbyte
+def llvm_v8i16_ty      : LLVMPackedType<v8i16, 8, llvm_short_ty>;  // 8 x short
+
+def llvm_v2i64_ty      : LLVMPackedType<v2i64, 2, llvm_long_ty>;   // 2 x long
+def llvm_v2i32_ty      : LLVMPackedType<v2i32, 2, llvm_int_ty>;    // 2 x int
 def llvm_v4i32_ty      : LLVMPackedType<v4i32, 4, llvm_int_ty>;    // 4 x int
 def llvm_v4f32_ty      : LLVMPackedType<v4f32, 4, llvm_float_ty>;  // 4 x float
 def llvm_v2f64_ty      : LLVMPackedType<v2f64, 2, llvm_double_ty>; // 2 x double
@@ -125,14 +130,14 @@ def int_vaend   : Intrinsic<[llvm_void_ty, llvm_ptrptr_ty], [], "llvm.va_end">;
 //  
 def int_gcroot  : Intrinsic<[llvm_void_ty, llvm_ptrptr_ty, llvm_ptr_ty]>;
 def int_gcread  : Intrinsic<[llvm_ptr_ty, llvm_ptr_ty, llvm_ptrptr_ty],
-                            [InstrReadArgMem]>;
+                            [IntrReadArgMem]>;
 def int_gcwrite : Intrinsic<[llvm_void_ty, llvm_ptr_ty, llvm_ptr_ty,
-                             llvm_ptrptr_ty], [InstrWriteArgMem]>;
+                             llvm_ptrptr_ty], [IntrWriteArgMem]>;
 
 //===--------------------- Code Generator Intrinsics ----------------------===//
 //  
-def int_returnaddress : Intrinsic<[llvm_ptr_ty, llvm_uint_ty], [InstrNoMem]>;
-def int_frameaddress  : Intrinsic<[llvm_ptr_ty, llvm_uint_ty], [InstrNoMem]>;
+def int_returnaddress : Intrinsic<[llvm_ptr_ty, llvm_uint_ty], [IntrNoMem]>;
+def int_frameaddress  : Intrinsic<[llvm_ptr_ty, llvm_uint_ty], [IntrNoMem]>;
 def int_stacksave     : Intrinsic<[llvm_ptr_ty], [IntrReadMem]>;
 def int_stackrestore  : Intrinsic<[llvm_void_ty, llvm_ptr_ty]>;
 def int_prefetch      : Intrinsic<[llvm_void_ty, llvm_ptr_ty, 
@@ -144,7 +149,7 @@ def int_readcyclecounter : Intrinsic<[llvm_ulong_ty]>;
 //===------------------- Standard C Library Intrinsics --------------------===//
 //
 
-let Properties = [InstrWriteArgMem] in {
+let Properties = [IntrWriteArgMem] in {
   def int_memcpy_i32  : Intrinsic<[llvm_void_ty, llvm_ptr_ty, llvm_ptr_ty,
                                    llvm_uint_ty, llvm_uint_ty]>;
   def int_memcpy_i64  : Intrinsic<[llvm_void_ty, llvm_ptr_ty, llvm_ptr_ty,
@@ -159,26 +164,29 @@ let Properties = [InstrWriteArgMem] in {
                                    llvm_ulong_ty, llvm_uint_ty]>;
 }
 
-let Properties = [InstrNoMem] in {
+let Properties = [IntrNoMem] in {
   def int_isunordered_f32 : Intrinsic<[llvm_bool_ty, 
                                        llvm_float_ty,  llvm_float_ty]>;
   def int_isunordered_f64 : Intrinsic<[llvm_bool_ty, 
                                        llvm_double_ty, llvm_double_ty]>;
   def int_sqrt_f32 : Intrinsic<[llvm_float_ty , llvm_float_ty]>;
   def int_sqrt_f64 : Intrinsic<[llvm_double_ty, llvm_double_ty]>;
+
+  def int_powi_f32 : Intrinsic<[llvm_float_ty , llvm_float_ty, llvm_int_ty]>;
+  def int_powi_f64 : Intrinsic<[llvm_double_ty, llvm_double_ty, llvm_int_ty]>;
 }
 
 // NOTE: these are internal interfaces.
 def int_setjmp     : Intrinsic<[llvm_int_ty , llvm_ptr_ty]>;
 def int_longjmp    : Intrinsic<[llvm_void_ty, llvm_ptr_ty, llvm_int_ty]>;
-def int_sigsetjmp  : Intrinsic<[llvm_int_ty , llvm_ptr_ty]>;
+def int_sigsetjmp  : Intrinsic<[llvm_int_ty , llvm_ptr_ty, llvm_int_ty]>;
 def int_siglongjmp : Intrinsic<[llvm_void_ty, llvm_ptr_ty, llvm_int_ty]>;
 
 //===-------------------- Bit Manipulation Intrinsics ---------------------===//
 //
 
 // None of these intrinsics accesses memory at all.
-let Properties = [InstrNoMem] in {
+let Properties = [IntrNoMem] in {
   def int_bswap_i16 : Intrinsic<[llvm_ushort_ty, llvm_ushort_ty]>;
   def int_bswap_i32 : Intrinsic<[llvm_uint_ty,   llvm_uint_ty]>;
   def int_bswap_i64 : Intrinsic<[llvm_ulong_ty,  llvm_ulong_ty]>;
@@ -215,44 +223,5 @@ def int_dbg_declare      : Intrinsic<[llvm_void_ty, llvm_ptr_ty,
 // Target-specific intrinsics
 //===----------------------------------------------------------------------===//
 
-//===----------------------------------------------------------------------===//
-// PowerPC Intrinsics
-//
-let TargetPrefix = "ppc" in {  // All intrinsics start with "llvm.ppc.".
-  def int_ppc_altivec_lvx : GCCBuiltin<"__builtin_altivec_lvx">,
-              Intrinsic<[llvm_v4i32_ty, llvm_int_ty, llvm_ptr_ty],
-                        [IntrReadMem]>;
-  def int_ppc_altivec_stvx : GCCBuiltin<"__builtin_altivec_stvx">,
-              Intrinsic<[llvm_void_ty, llvm_v4i32_ty, llvm_int_ty, llvm_ptr_ty],
-                        [IntrWriteMem]>;
-                            
-  def int_ppc_altivec_vmaddfp : GCCBuiltin<"__builtin_altivec_vmaddfp">,
-              Intrinsic<[llvm_v4f32_ty, llvm_v4f32_ty,
-                         llvm_v4f32_ty, llvm_v4f32_ty], [InstrNoMem]>;
-  def int_ppc_altivec_vadduwm : GCCBuiltin<"__builtin_altivec_vadduwm">,
-              Intrinsic<[llvm_v4i32_ty, llvm_v4i32_ty, llvm_v4i32_ty],
-                        [InstrNoMem]>;
-  
-}
-
-
-//===----------------------------------------------------------------------===//
-// X86 Intrinsics
-//
-// SSE1
-
-let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_sse_movmskps : GCCBuiltin<"__builtin_ia32_movmskps">,
-              Intrinsic<[llvm_int_ty, llvm_v4f32_ty], [InstrNoMem]>;
-}
-
-let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_sse_ldmxcsr : GCCBuiltin<"__builtin_ia32_ldmxcsr">,
-              Intrinsic<[llvm_void_ty, llvm_ptr_ty], [IntrWriteMem]>;
-}
-
-// SSE2
-let TargetPrefix = "x86" in {  // All intrinsics start with "llvm.x86.".
-  def int_x86_sse2_movmskpd : GCCBuiltin<"__builtin_ia32_movmskpd">,
-              Intrinsic<[llvm_int_ty, llvm_v2f64_ty], [InstrNoMem]>;
-}
+include "llvm/IntrinsicsPowerPC.td"
+include "llvm/IntrinsicsX86.td"