xref: /llvm-project/llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp (revision 5cd0ba30f53d11835dbfd05ad4071d397387fb04)
17e50f006Spaperchalice //===-- X86CodeGenPassBuilder.cpp ---------------------------------*- C++ -*-=//
27e50f006Spaperchalice //
37e50f006Spaperchalice // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
47e50f006Spaperchalice // See https://llvm.org/LICENSE.txt for license information.
57e50f006Spaperchalice // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
67e50f006Spaperchalice //
77e50f006Spaperchalice //===----------------------------------------------------------------------===//
87e50f006Spaperchalice /// \file
97e50f006Spaperchalice /// This file contains X86 CodeGen pipeline builder.
107e50f006Spaperchalice /// TODO: Port CodeGen passes to new pass manager.
117e50f006Spaperchalice //===----------------------------------------------------------------------===//
127e50f006Spaperchalice 
137652a594Spaperchalice #include "X86ISelDAGToDAG.h"
147e50f006Spaperchalice #include "X86TargetMachine.h"
157e50f006Spaperchalice 
167e50f006Spaperchalice #include "llvm/MC/MCStreamer.h"
1772512433Spaperchalice #include "llvm/Passes/CodeGenPassBuilder.h"
187652a594Spaperchalice #include "llvm/Passes/PassBuilder.h"
197e50f006Spaperchalice 
207e50f006Spaperchalice using namespace llvm;
217e50f006Spaperchalice 
227e50f006Spaperchalice namespace {
237e50f006Spaperchalice 
24dd4b40ffSpaperchalice class X86CodeGenPassBuilder
25dd4b40ffSpaperchalice     : public CodeGenPassBuilder<X86CodeGenPassBuilder, X86TargetMachine> {
267e50f006Spaperchalice public:
X86CodeGenPassBuilder(X86TargetMachine & TM,const CGPassBuilderOption & Opts,PassInstrumentationCallbacks * PIC)27dd4b40ffSpaperchalice   explicit X86CodeGenPassBuilder(X86TargetMachine &TM,
28ed1aabefSmahesh-attarde                                  const CGPassBuilderOption &Opts,
297e50f006Spaperchalice                                  PassInstrumentationCallbacks *PIC)
307e50f006Spaperchalice       : CodeGenPassBuilder(TM, Opts, PIC) {}
317e50f006Spaperchalice   void addPreISel(AddIRPass &addPass) const;
327e50f006Spaperchalice   void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const;
337e50f006Spaperchalice   Error addInstSelector(AddMachinePass &) const;
347e50f006Spaperchalice };
357e50f006Spaperchalice 
addPreISel(AddIRPass & addPass) const367e50f006Spaperchalice void X86CodeGenPassBuilder::addPreISel(AddIRPass &addPass) const {
377e50f006Spaperchalice   // TODO: Add passes pre instruction selection.
387e50f006Spaperchalice }
397e50f006Spaperchalice 
addAsmPrinter(AddMachinePass & addPass,CreateMCStreamer) const407e50f006Spaperchalice void X86CodeGenPassBuilder::addAsmPrinter(AddMachinePass &addPass,
417e50f006Spaperchalice                                           CreateMCStreamer) const {
427e50f006Spaperchalice   // TODO: Add AsmPrinter.
437e50f006Spaperchalice }
447e50f006Spaperchalice 
addInstSelector(AddMachinePass & addPass) const457652a594Spaperchalice Error X86CodeGenPassBuilder::addInstSelector(AddMachinePass &addPass) const {
467652a594Spaperchalice   // TODO: Add instruction selector related passes.
477652a594Spaperchalice   addPass(X86ISelDAGToDAGPass(TM));
487e50f006Spaperchalice   return Error::success();
497e50f006Spaperchalice }
507e50f006Spaperchalice 
517e50f006Spaperchalice } // namespace
527e50f006Spaperchalice 
registerPassBuilderCallbacks(PassBuilder & PB)53*5cd0ba30SNikita Popov void X86TargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
547652a594Spaperchalice #define GET_PASS_REGISTRY "X86PassRegistry.def"
557652a594Spaperchalice #include "llvm/Passes/TargetPassRegistry.inc"
567652a594Spaperchalice }
577652a594Spaperchalice 
buildCodeGenPipeline(ModulePassManager & MPM,raw_pwrite_stream & Out,raw_pwrite_stream * DwoOut,CodeGenFileType FileType,const CGPassBuilderOption & Opt,PassInstrumentationCallbacks * PIC)587e50f006Spaperchalice Error X86TargetMachine::buildCodeGenPipeline(
5991e9e317SArthur Eubanks     ModulePassManager &MPM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut,
609e004054Smahesh-attarde     CodeGenFileType FileType, const CGPassBuilderOption &Opt,
6191e9e317SArthur Eubanks     PassInstrumentationCallbacks *PIC) {
627e50f006Spaperchalice   auto CGPB = X86CodeGenPassBuilder(*this, Opt, PIC);
6391e9e317SArthur Eubanks   return CGPB.buildPipeline(MPM, Out, DwoOut, FileType);
647e50f006Spaperchalice }
65