| //===-- 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 |