149de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen//===-- llvm/Target/TargetIntrinsicInfo.h - Instruction Info ----*- C++ -*-===//
249de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen//
349de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen//                     The LLVM Compiler Infrastructure
449de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen//
549de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen// This file is distributed under the University of Illinois Open Source
649de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen// License. See LICENSE.TXT for details.
749de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen//
849de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen//===----------------------------------------------------------------------===//
949de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen//
1049de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen// This file describes the target intrinsic instructions to the code generator.
1149de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen//
1249de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen//===----------------------------------------------------------------------===//
1349de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen
1449de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen#ifndef LLVM_TARGET_TARGETINTRINSICINFO_H
1549de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen#define LLVM_TARGET_TARGETINTRINSICINFO_H
1649de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen
1782c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang#include <string>
1882c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang
1949de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesennamespace llvm {
2049de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen
2149de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesenclass Function;
2249de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesenclass Module;
230d52ff1f7b993750a74a5d4432273092de9af069Mon P Wangclass Type;
2449de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen
2549de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen//---------------------------------------------------------------------------
2649de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen///
2749de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen/// TargetIntrinsicInfo - Interface to description of machine instruction set
2849de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen///
2949de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesenclass TargetIntrinsicInfo {
300383606b657aa9770e6aee126b358afe9328ac4aJakob Stoklund Olesen  TargetIntrinsicInfo(const TargetIntrinsicInfo &); // DO NOT IMPLEMENT
310383606b657aa9770e6aee126b358afe9328ac4aJakob Stoklund Olesen  void operator=(const TargetIntrinsicInfo &);      // DO NOT IMPLEMENT
3249de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesenpublic:
330383606b657aa9770e6aee126b358afe9328ac4aJakob Stoklund Olesen  TargetIntrinsicInfo();
3449de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen  virtual ~TargetIntrinsicInfo();
3549de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen
360383606b657aa9770e6aee126b358afe9328ac4aJakob Stoklund Olesen  /// Return the name of a target intrinsic, e.g. "llvm.bfin.ssync".
3782c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang  /// The Tys and numTys parameters are for intrinsics with overloaded types
3882c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang  /// (e.g., those using iAny or fAny). For a declaration for an overloaded
3982c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang  /// intrinsic, Tys should point to an array of numTys pointers to Type,
4082c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang  /// and must provide exactly one type for each overloaded type in the
4182c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang  /// intrinsic.
42db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  virtual std::string getName(unsigned IID, Type **Tys = 0,
4382c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang                              unsigned numTys = 0) const = 0;
440d52ff1f7b993750a74a5d4432273092de9af069Mon P Wang
450383606b657aa9770e6aee126b358afe9328ac4aJakob Stoklund Olesen  /// Look up target intrinsic by name. Return intrinsic ID or 0 for unknown
460383606b657aa9770e6aee126b358afe9328ac4aJakob Stoklund Olesen  /// names.
470383606b657aa9770e6aee126b358afe9328ac4aJakob Stoklund Olesen  virtual unsigned lookupName(const char *Name, unsigned Len) const =0;
480d52ff1f7b993750a74a5d4432273092de9af069Mon P Wang
490383606b657aa9770e6aee126b358afe9328ac4aJakob Stoklund Olesen  /// Return the target intrinsic ID of a function, or 0.
500383606b657aa9770e6aee126b358afe9328ac4aJakob Stoklund Olesen  virtual unsigned getIntrinsicID(Function *F) const;
5182c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang
5282c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang  /// Returns true if the intrinsic can be overloaded.
5382c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang  virtual bool isOverloaded(unsigned IID) const = 0;
5482c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang
5582c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang  /// Create or insert an LLVM Function declaration for an intrinsic,
5682c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang  /// and return it. The Tys and numTys are for intrinsics with overloaded
5782c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang  /// types. See above for more information.
58db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  virtual Function *getDeclaration(Module *M, unsigned ID, Type **Tys = 0,
5982c443655d0b840d909bc0dc153ce02614a75f07Mon P Wang                                   unsigned numTys = 0) const = 0;
6049de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen};
6149de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen
6249de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen} // End llvm namespace
6349de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen
6449de98214b82fefeb8f16efbf8cdd8813a85469bDale Johannesen#endif
65