Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  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
  69.