40void buildPreGPUCommonPassPipeline(
46 GpuXeVMAttachTargetOptions xevmTargetOptions;
47 xevmTargetOptions.moduleMatcher =
options.xevmModuleMatcher;
48 xevmTargetOptions.triple =
options.zebinTriple;
49 xevmTargetOptions.chip =
options.zebinChip;
50 xevmTargetOptions.optLevel =
options.optLevel;
51 xevmTargetOptions.cmdOptions =
options.cmdOptions;
52 pm.
addPass(createGpuXeVMAttachTarget(xevmTargetOptions));
54 pm.
addPass(createLowerAffinePass());
63 if (
options.xegpuOpLevel ==
"workgroup") {
64 pm.
addNestedPass<gpu::GPUModuleOp>(xegpu::createXeGPUWgToSgDistribute());
66 xegpu::XeGPUPropagateLayoutOptions layoutOptions;
67 layoutOptions.layoutKind =
"inst";
69 xegpu::createXeGPUPropagateLayout(layoutOptions));
70 pm.
addNestedPass<gpu::GPUModuleOp>(xegpu::createXeGPUBlocking());
74 if (
options.xegpuOpLevel ==
"subgroup" ||
75 options.xegpuOpLevel ==
"workgroup") {
76 xegpu::XeGPUPropagateLayoutOptions layoutOptions;
77 layoutOptions.layoutKind =
"lane";
79 xegpu::createXeGPUPropagateLayout(layoutOptions));
80 pm.
addNestedPass<gpu::GPUModuleOp>(xegpu::createXeGPUPeepHoleOptimizer());
82 xegpu::createXeGPUPropagateLayout(layoutOptions));
83 pm.
addNestedPass<gpu::GPUModuleOp>(xegpu::createXeGPUSubgroupDistribute());
88 pm.
addNestedPass<gpu::GPUModuleOp>(xegpu::createXeGPUVectorLinearize());
90 pm.
addNestedPass<gpu::GPUModuleOp>(createConvertMathToXeVM());
91 pm.
addNestedPass<gpu::GPUModuleOp>(createConvertXeGPUToXeVMPass());
93 ConvertGpuOpsToLLVMSPVOpsOptions gpuToLLVMSPVOptions;
94 gpuToLLVMSPVOptions.use64bitIndex =
options.use64bitIndex;
96 createConvertGpuOpsToLLVMSPVOps(gpuToLLVMSPVOptions));
99 pm.
addNestedPass<gpu::GPUModuleOp>(createReconcileUnrealizedCastsPass());
105void buildPostGPUCommonPassPipeline(
108 pm.
addPass(createSCFToControlFlowPass());
109 pm.
addPass(memref::createExpandStridedMetadataPass());
111 GpuToLLVMConversionPassOptions gpuToLLVMOptions;
112 gpuToLLVMOptions.hostBarePtrCallConv =
options.hostBarePtrCallConv;
113 gpuToLLVMOptions.kernelBarePtrCallConv =
options.kernelBarePtrCallConv;
114 pm.
addPass(createGpuToLLVMConversionPass(gpuToLLVMOptions));
116 pm.
addPass(createLowerAffinePass());
117 pm.
addPass(createConvertVectorToLLVMPass());
118 pm.
addPass(createConvertToLLVMPass());
119 pm.
addPass(createReconcileUnrealizedCastsPass());
124 GpuModuleToBinaryPassOptions gpuToModuleBinOptions;
125 gpuToModuleBinOptions.compilationTarget =
options.binaryFormat;
126 gpuToModuleBinOptions.cmdOptions =
options.cmdOptions;
127 pm.
addPass(createGpuModuleToBinaryPass(gpuToModuleBinOptions));
135 buildPreGPUCommonPassPipeline(pm,
options);
138 buildGPUPassPipeline(pm,
options);
141 buildPostGPUCommonPassPipeline(pm,
options);
146 "gpu-lower-to-xevm-pipeline",
147 "The default GPU to XeVM lowering pipeline. It starts by lowering GPU "
149 "specified compilation target (default is fatbin) then lowers the host "
static llvm::ManagedStatic< PassManagerOptions > options
This class represents a pass manager that runs passes on either a specific operation type,...
void addPass(std::unique_ptr< Pass > pass)
Add the given pass to this pass manager.
void addNestedPass(std::unique_ptr< Pass > pass)
Add the given pass to a nested pass manager for the given operation kind OpT.
void registerGPUToXeVMPipeline()
void buildLowerToXeVMPassPipeline(OpPassManager &pm, const GPUToXeVMPipelineOptions &options)
Adds the GPU to XeVM pipeline to the given pass manager.
Include the generated interface declarations.
std::unique_ptr< Pass > createCSEPass()
Creates a pass to perform common sub expression elimination.
std::unique_ptr< Pass > createLoopInvariantCodeMotionPass()
Creates a loop invariant code motion pass that hoists loop invariant instructions out of the loop.
std::unique_ptr< Pass > createCanonicalizerPass()
Creates an instance of the Canonicalizer pass, configured with default settings (which can be overrid...
std::unique_ptr< Pass > createConvertVectorToSCFPass(const VectorTransferToSCFOptions &options=VectorTransferToSCFOptions())
Create a pass to convert a subset of vector ops to SCF.
PassPipelineRegistration provides a global initializer that registers a Pass pipeline builder routine...