|  | //===-- llvm/Instrinsics.h - LLVM Intrinsic Function Handling ---*- C++ -*-===// | 
|  | // | 
|  | //                     The LLVM Compiler Infrastructure | 
|  | // | 
|  | // This file is distributed under the University of Illinois Open Source | 
|  | // License. See LICENSE.TXT for details. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  | // | 
|  | // This file defines a set of enums which allow processing of intrinsic | 
|  | // functions.  Values of these enum types are returned by | 
|  | // Function::getIntrinsicID. | 
|  | // | 
|  | //===----------------------------------------------------------------------===// | 
|  |  | 
|  | #ifndef LLVM_INTRINSICS_H | 
|  | #define LLVM_INTRINSICS_H | 
|  |  | 
|  | #include "llvm/ADT/ArrayRef.h" | 
|  | #include <string> | 
|  |  | 
|  | namespace llvm { | 
|  |  | 
|  | class Type; | 
|  | class FunctionType; | 
|  | class Function; | 
|  | class LLVMContext; | 
|  | class Module; | 
|  | class AttrListPtr; | 
|  |  | 
|  | /// Intrinsic Namespace - This namespace contains an enum with a value for | 
|  | /// every intrinsic/builtin function known by LLVM.  These enum values are | 
|  | /// returned by Function::getIntrinsicID(). | 
|  | /// | 
|  | namespace Intrinsic { | 
|  | enum ID { | 
|  | not_intrinsic = 0,   // Must be zero | 
|  |  | 
|  | // Get the intrinsic enums generated from Intrinsics.td | 
|  | #define GET_INTRINSIC_ENUM_VALUES | 
|  | #include "llvm/Intrinsics.gen" | 
|  | #undef GET_INTRINSIC_ENUM_VALUES | 
|  | , num_intrinsics | 
|  | }; | 
|  |  | 
|  | /// Intrinsic::getName(ID) - Return the LLVM name for an intrinsic, such as | 
|  | /// "llvm.ppc.altivec.lvx". | 
|  | std::string getName(ID id, ArrayRef<Type*> Tys = ArrayRef<Type*>()); | 
|  |  | 
|  | /// Intrinsic::getType(ID) - Return the function type for an intrinsic. | 
|  | /// | 
|  | FunctionType *getType(LLVMContext &Context, ID id, | 
|  | ArrayRef<Type*> Tys = ArrayRef<Type*>()); | 
|  |  | 
|  | /// Intrinsic::isOverloaded(ID) - Returns true if the intrinsic can be | 
|  | /// overloaded. | 
|  | bool isOverloaded(ID id); | 
|  |  | 
|  | /// Intrinsic::getAttributes(ID) - Return the attributes for an intrinsic. | 
|  | /// | 
|  | AttrListPtr getAttributes(ID id); | 
|  |  | 
|  | /// Intrinsic::getDeclaration(M, ID) - Create or insert an LLVM Function | 
|  | /// declaration for an intrinsic, and return it. | 
|  | /// | 
|  | /// The Tys and numTys parameters are for intrinsics with overloaded types | 
|  | /// (e.g., those using iAny, fAny, vAny, or iPTRAny). For a declaration for an | 
|  | /// overloaded intrinsic, Tys should point to an array of numTys pointers to | 
|  | /// Type, and must provide exactly one type for each overloaded type in the | 
|  | /// intrinsic. | 
|  | Function *getDeclaration(Module *M, ID id, | 
|  | ArrayRef<Type*> Tys = ArrayRef<Type*>()); | 
|  |  | 
|  | /// Map a GCC builtin name to an intrinsic ID. | 
|  | ID getIntrinsicForGCCBuiltin(const char *Prefix, const char *BuiltinName); | 
|  |  | 
|  | } // End Intrinsic namespace | 
|  |  | 
|  | } // End llvm namespace | 
|  |  | 
|  | #endif |