NVPTX.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. //===-- NVPTX.h - Top-level interface for NVPTX representation --*- 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 contains the entry points for global functions defined in
  10. // the LLVM NVPTX back-end.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. #ifndef LLVM_LIB_TARGET_NVPTX_NVPTX_H
  14. #define LLVM_LIB_TARGET_NVPTX_NVPTX_H
  15. #include "llvm/IR/PassManager.h"
  16. #include "llvm/Pass.h"
  17. #include "llvm/Support/CodeGen.h"
  18. namespace llvm {
  19. class FunctionPass;
  20. class MachineFunctionPass;
  21. class NVPTXTargetMachine;
  22. class PassRegistry;
  23. namespace NVPTXCC {
  24. enum CondCodes {
  25. EQ,
  26. NE,
  27. LT,
  28. LE,
  29. GT,
  30. GE
  31. };
  32. }
  33. FunctionPass *createNVPTXISelDag(NVPTXTargetMachine &TM,
  34. llvm::CodeGenOpt::Level OptLevel);
  35. ModulePass *createNVPTXAssignValidGlobalNamesPass();
  36. ModulePass *createGenericToNVVMPass();
  37. FunctionPass *createNVVMIntrRangePass(unsigned int SmVersion);
  38. FunctionPass *createNVVMReflectPass(unsigned int SmVersion);
  39. MachineFunctionPass *createNVPTXPrologEpilogPass();
  40. MachineFunctionPass *createNVPTXReplaceImageHandlesPass();
  41. FunctionPass *createNVPTXImageOptimizerPass();
  42. FunctionPass *createNVPTXLowerArgsPass(const NVPTXTargetMachine *TM);
  43. FunctionPass *createNVPTXLowerAllocaPass();
  44. MachineFunctionPass *createNVPTXPeephole();
  45. MachineFunctionPass *createNVPTXProxyRegErasurePass();
  46. struct NVVMIntrRangePass : PassInfoMixin<NVVMIntrRangePass> {
  47. NVVMIntrRangePass();
  48. NVVMIntrRangePass(unsigned SmVersion) : SmVersion(SmVersion) {}
  49. PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
  50. private:
  51. unsigned SmVersion;
  52. };
  53. struct NVVMReflectPass : PassInfoMixin<NVVMReflectPass> {
  54. NVVMReflectPass();
  55. NVVMReflectPass(unsigned SmVersion) : SmVersion(SmVersion) {}
  56. PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
  57. private:
  58. unsigned SmVersion;
  59. };
  60. namespace NVPTX {
  61. enum DrvInterface {
  62. NVCL,
  63. CUDA
  64. };
  65. // A field inside TSFlags needs a shift and a mask. The usage is
  66. // always as follows :
  67. // ((TSFlags & fieldMask) >> fieldShift)
  68. // The enum keeps the mask, the shift, and all valid values of the
  69. // field in one place.
  70. enum VecInstType {
  71. VecInstTypeShift = 0,
  72. VecInstTypeMask = 0xF,
  73. VecNOP = 0,
  74. VecLoad = 1,
  75. VecStore = 2,
  76. VecBuild = 3,
  77. VecShuffle = 4,
  78. VecExtract = 5,
  79. VecInsert = 6,
  80. VecDest = 7,
  81. VecOther = 15
  82. };
  83. enum SimpleMove {
  84. SimpleMoveMask = 0x10,
  85. SimpleMoveShift = 4
  86. };
  87. enum LoadStore {
  88. isLoadMask = 0x20,
  89. isLoadShift = 5,
  90. isStoreMask = 0x40,
  91. isStoreShift = 6
  92. };
  93. namespace PTXLdStInstCode {
  94. enum AddressSpace {
  95. GENERIC = 0,
  96. GLOBAL = 1,
  97. CONSTANT = 2,
  98. SHARED = 3,
  99. PARAM = 4,
  100. LOCAL = 5
  101. };
  102. enum FromType {
  103. Unsigned = 0,
  104. Signed,
  105. Float,
  106. Untyped
  107. };
  108. enum VecType {
  109. Scalar = 1,
  110. V2 = 2,
  111. V4 = 4
  112. };
  113. }
  114. /// PTXCvtMode - Conversion code enumeration
  115. namespace PTXCvtMode {
  116. enum CvtMode {
  117. NONE = 0,
  118. RNI,
  119. RZI,
  120. RMI,
  121. RPI,
  122. RN,
  123. RZ,
  124. RM,
  125. RP,
  126. RNA,
  127. BASE_MASK = 0x0F,
  128. FTZ_FLAG = 0x10,
  129. SAT_FLAG = 0x20,
  130. RELU_FLAG = 0x40
  131. };
  132. }
  133. /// PTXCmpMode - Comparison mode enumeration
  134. namespace PTXCmpMode {
  135. enum CmpMode {
  136. EQ = 0,
  137. NE,
  138. LT,
  139. LE,
  140. GT,
  141. GE,
  142. LO,
  143. LS,
  144. HI,
  145. HS,
  146. EQU,
  147. NEU,
  148. LTU,
  149. LEU,
  150. GTU,
  151. GEU,
  152. NUM,
  153. // NAN is a MACRO
  154. NotANumber,
  155. BASE_MASK = 0xFF,
  156. FTZ_FLAG = 0x100
  157. };
  158. }
  159. }
  160. void initializeNVPTXDAGToDAGISelPass(PassRegistry &);
  161. } // namespace llvm
  162. // Defines symbolic names for NVPTX registers. This defines a mapping from
  163. // register name to register number.
  164. #define GET_REGINFO_ENUM
  165. #include "NVPTXGenRegisterInfo.inc"
  166. // Defines symbolic names for the NVPTX instructions.
  167. #define GET_INSTRINFO_ENUM
  168. #define GET_INSTRINFO_MC_HELPER_DECLS
  169. #include "NVPTXGenInstrInfo.inc"
  170. #endif