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