1 //===- Passes.h - GPU NVVM pipeline entry points --------------------------===// 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 #ifndef MLIR_DIALECT_GPU_PIPELINES_PASSES_H_ 10 #define MLIR_DIALECT_GPU_PIPELINES_PASSES_H_ 11 12 #include "mlir/Pass/PassOptions.h" 13 14 namespace mlir { 15 namespace gpu { 16 17 /// Options for the gpu to nvvm pipeline. 18 struct GPUToNVVMPipelineOptions 19 : public PassPipelineOptions<GPUToNVVMPipelineOptions> { 20 PassOptions::Option<int64_t> indexBitWidth{ 21 *this, "index-bitwidth", 22 llvm::cl::desc("Bitwidth of the index type for the host (warning this " 23 "should be 64 until the GPU layering is fixed)"), 24 llvm::cl::init(64)}; 25 PassOptions::Option<std::string> cubinTriple{ 26 *this, "cubin-triple", 27 llvm::cl::desc("Triple to use to serialize to cubin."), 28 llvm::cl::init("nvptx64-nvidia-cuda")}; 29 PassOptions::Option<std::string> cubinChip{ 30 *this, "cubin-chip", llvm::cl::desc("Chip to use to serialize to cubin."), 31 llvm::cl::init("sm_50")}; 32 PassOptions::Option<std::string> cubinFeatures{ 33 *this, "cubin-features", 34 llvm::cl::desc("Features to use to serialize to cubin."), 35 llvm::cl::init("+ptx60")}; 36 PassOptions::Option<std::string> cubinFormat{ 37 *this, "cubin-format", 38 llvm::cl::desc("Compilation format to use to serialize to cubin."), 39 llvm::cl::init("fatbin")}; 40 PassOptions::Option<int> optLevel{ 41 *this, "opt-level", 42 llvm::cl::desc("Optimization level for NVVM compilation"), 43 llvm::cl::init(2)}; 44 PassOptions::Option<bool> kernelUseBarePtrCallConv{ 45 *this, "kernel-bare-ptr-calling-convention", 46 llvm::cl::desc( 47 "Whether to use the bareptr calling convention on the kernel " 48 "(warning this should be false until the GPU layering is fixed)"), 49 llvm::cl::init(false)}; 50 PassOptions::Option<bool> hostUseBarePtrCallConv{ 51 *this, "host-bare-ptr-calling-convention", 52 llvm::cl::desc( 53 "Whether to use the bareptr calling convention on the host (warning " 54 "this should be false until the GPU layering is fixed)"), 55 llvm::cl::init(false)}; 56 }; 57 58 //===----------------------------------------------------------------------===// 59 // Building and Registering. 60 //===----------------------------------------------------------------------===// 61 62 /// Adds the GPU to NVVM pipeline to the given pass manager. Transforms main 63 /// dialects into NVVM targets. Begins with GPU code regions, then handles host 64 /// code. 65 void buildLowerToNVVMPassPipeline(OpPassManager &pm, 66 const GPUToNVVMPipelineOptions &options); 67 68 /// Register all pipeleines for the `gpu` dialect. 69 void registerGPUToNVVMPipeline(); 70 71 } // namespace gpu 72 } // namespace mlir 73 74 #endif 75