This was supposed to go with r79803
[oota-llvm.git] / include / llvm / Intrinsics.h
1 //===-- llvm/Instrinsics.h - LLVM Intrinsic Function Handling ---*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file defines a set of enums which allow processing of intrinsic
11 // functions.  Values of these enum types are returned by
12 // Function::getIntrinsicID.
13 //
14 //===----------------------------------------------------------------------===//
15
16 #ifndef LLVM_INTRINSICS_H
17 #define LLVM_INTRINSICS_H
18
19 #include <string>
20
21 namespace llvm {
22
23 class Type;
24 class FunctionType;
25 class Function;
26 class LLVMContext;
27 class Module;
28 class AttrListPtr;
29
30 /// Intrinsic Namespace - This namespace contains an enum with a value for
31 /// every intrinsic/builtin function known by LLVM.  These enum values are
32 /// returned by Function::getIntrinsicID().
33 ///
34 namespace Intrinsic {
35   enum ID {
36     not_intrinsic = 0,   // Must be zero
37
38     // Get the intrinsic enums generated from Intrinsics.td
39 #define GET_INTRINSIC_ENUM_VALUES
40 #include "llvm/Intrinsics.gen"    
41 #undef GET_INTRINSIC_ENUM_VALUES
42     , num_intrinsics
43   };
44   
45   /// Intrinsic::getName(ID) - Return the LLVM name for an intrinsic, such as
46   /// "llvm.ppc.altivec.lvx".
47   std::string getName(ID id, const Type **Tys = 0, unsigned numTys = 0);
48   
49   /// Intrinsic::getType(ID) - Return the function type for an intrinsic.
50   ///
51   const FunctionType *getType(LLVMContext &Context, ID id,
52                               const Type **Tys = 0, unsigned numTys = 0);
53
54   /// Intrinsic::isOverloaded(ID) - Returns true if the intrinsic can be
55   /// overloaded.
56   bool isOverloaded(ID id);
57
58   /// Intrinsic::getAttributes(ID) - Return the attributes for an intrinsic.
59   ///
60   AttrListPtr getAttributes(ID id);
61
62   /// Intrinsic::getDeclaration(M, ID) - Create or insert an LLVM Function
63   /// declaration for an intrinsic, and return it.
64   ///
65   /// The Tys and numTys parameters are for intrinsics with overloaded types
66   /// (e.g., those using iAny or fAny). For a declaration for an overloaded
67   /// intrinsic, Tys should point to an array of numTys pointers to Type,
68   /// and must provide exactly one type for each overloaded type in the
69   /// intrinsic.
70   Function *getDeclaration(Module *M, ID id, const Type **Tys = 0, 
71                            unsigned numTys = 0);
72                            
73   /// Map a GCC builtin name to an intrinsic ID.
74   ID getIntrinsicForGCCBuiltin(const char *Prefix, const char *BuiltinName);
75   
76 } // End Intrinsic namespace
77
78 } // End llvm namespace
79
80 #endif