Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

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