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