/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/include/llvm/Target/TargetIntrinsicInfo.h
Line | Count | Source (jump to first uncovered line) |
1 | | //===-- llvm/Target/TargetIntrinsicInfo.h - Instruction Info ----*- C++ -*-===// |
2 | | // |
3 | | // The LLVM Compiler Infrastructure |
4 | | // |
5 | | // This file is distributed under the University of Illinois Open Source |
6 | | // License. See LICENSE.TXT for details. |
7 | | // |
8 | | //===----------------------------------------------------------------------===// |
9 | | // |
10 | | // This file describes the target intrinsic instructions to the code generator. |
11 | | // |
12 | | //===----------------------------------------------------------------------===// |
13 | | |
14 | | #ifndef LLVM_TARGET_TARGETINTRINSICINFO_H |
15 | | #define LLVM_TARGET_TARGETINTRINSICINFO_H |
16 | | |
17 | | #include "llvm/ADT/StringRef.h" |
18 | | #include "llvm/Support/Compiler.h" |
19 | | #include <string> |
20 | | |
21 | | namespace llvm { |
22 | | |
23 | | class Function; |
24 | | class Module; |
25 | | class Type; |
26 | | |
27 | | //--------------------------------------------------------------------------- |
28 | | /// |
29 | | /// TargetIntrinsicInfo - Interface to description of machine instruction set |
30 | | /// |
31 | | class TargetIntrinsicInfo { |
32 | | TargetIntrinsicInfo(const TargetIntrinsicInfo &) = delete; |
33 | | void operator=(const TargetIntrinsicInfo &) = delete; |
34 | | public: |
35 | | TargetIntrinsicInfo(); |
36 | | virtual ~TargetIntrinsicInfo(); |
37 | | |
38 | | /// Return the name of a target intrinsic, e.g. "llvm.bfin.ssync". |
39 | | /// The Tys and numTys parameters are for intrinsics with overloaded types |
40 | | /// (e.g., those using iAny or fAny). For a declaration for an overloaded |
41 | | /// intrinsic, Tys should point to an array of numTys pointers to Type, |
42 | | /// and must provide exactly one type for each overloaded type in the |
43 | | /// intrinsic. |
44 | | virtual std::string getName(unsigned IID, Type **Tys = nullptr, |
45 | | unsigned numTys = 0) const = 0; |
46 | | |
47 | | /// Look up target intrinsic by name. Return intrinsic ID or 0 for unknown |
48 | | /// names. |
49 | | virtual unsigned lookupName(const char *Name, unsigned Len) const =0; |
50 | | |
51 | 0 | unsigned lookupName(StringRef Name) const { |
52 | 0 | return lookupName(Name.data(), Name.size()); |
53 | 0 | } |
54 | | |
55 | | /// Return the target intrinsic ID of a function, or 0. |
56 | | virtual unsigned getIntrinsicID(const Function *F) const; |
57 | | |
58 | | /// Returns true if the intrinsic can be overloaded. |
59 | | virtual bool isOverloaded(unsigned IID) const = 0; |
60 | | |
61 | | /// Create or insert an LLVM Function declaration for an intrinsic, |
62 | | /// and return it. The Tys and numTys are for intrinsics with overloaded |
63 | | /// types. See above for more information. |
64 | | virtual Function *getDeclaration(Module *M, unsigned ID, Type **Tys = nullptr, |
65 | | unsigned numTys = 0) const = 0; |
66 | | }; |
67 | | |
68 | | } // End llvm namespace |
69 | | |
70 | | #endif |