mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 19:52:54 +01:00
7925cc72c0
1. There is now a "PAListPtr" class, which is a smart pointer around the underlying uniqued parameter attribute list object, and manages its refcount. It is now impossible to mess up the refcount. 2. PAListPtr is now the main interface to the underlying object, and the underlying object is now completely opaque. 3. Implementation details like SmallVector and FoldingSet are now no longer part of the interface. 4. You can create a PAListPtr with an arbitrary sequence of ParamAttrsWithIndex's, no need to make a SmallVector of a specific size (you can just use an array or scalar or vector if you wish). 5. All the client code that had to check for a null pointer before dereferencing the pointer is simplified to just access the PAListPtr directly. 6. The interfaces for adding attrs to a list and removing them is a bit simpler. Phase #2 will rename some stuff (e.g. PAListPtr) and do other less invasive changes. llvm-svn: 48289
70 lines
2.2 KiB
C++
70 lines
2.2 KiB
C++
//===-- 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
|
|
|
|
namespace llvm {
|
|
|
|
class Type;
|
|
class FunctionType;
|
|
class Function;
|
|
class Module;
|
|
class PAListPtr;
|
|
|
|
/// 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, const Type **Tys = 0, unsigned numTys = 0);
|
|
|
|
/// Intrinsic::getType(ID) - Return the function type for an intrinsic.
|
|
///
|
|
const FunctionType *getType(ID id, const Type **Tys = 0, unsigned numTys = 0);
|
|
|
|
/// Intrinsic::getParamAttrs(ID) - Return the attributes for an intrinsic.
|
|
///
|
|
PAListPtr getParamAttrs(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
|
|
/// (i.e., those using iAny or fAny). 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, const Type **Tys = 0,
|
|
unsigned numTys = 0);
|
|
|
|
} // End Intrinsic namespace
|
|
|
|
} // End llvm namespace
|
|
|
|
#endif
|