1*7a6dacacSDimitry Andric //===-- X86CodeGenPassBuilder.cpp ---------------------------------*- C++ -*-=// 2*7a6dacacSDimitry Andric // 3*7a6dacacSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*7a6dacacSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*7a6dacacSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*7a6dacacSDimitry Andric // 7*7a6dacacSDimitry Andric //===----------------------------------------------------------------------===// 8*7a6dacacSDimitry Andric /// \file 9*7a6dacacSDimitry Andric /// This file contains X86 CodeGen pipeline builder. 10*7a6dacacSDimitry Andric /// TODO: Port CodeGen passes to new pass manager. 11*7a6dacacSDimitry Andric //===----------------------------------------------------------------------===// 12*7a6dacacSDimitry Andric 13*7a6dacacSDimitry Andric #include "X86TargetMachine.h" 14*7a6dacacSDimitry Andric 15*7a6dacacSDimitry Andric #include "llvm/CodeGen/CodeGenPassBuilder.h" 16*7a6dacacSDimitry Andric #include "llvm/MC/MCStreamer.h" 17*7a6dacacSDimitry Andric 18*7a6dacacSDimitry Andric using namespace llvm; 19*7a6dacacSDimitry Andric 20*7a6dacacSDimitry Andric namespace { 21*7a6dacacSDimitry Andric 22*7a6dacacSDimitry Andric class X86CodeGenPassBuilder : public CodeGenPassBuilder<X86CodeGenPassBuilder> { 23*7a6dacacSDimitry Andric public: 24*7a6dacacSDimitry Andric explicit X86CodeGenPassBuilder(LLVMTargetMachine &TM, 25*7a6dacacSDimitry Andric CGPassBuilderOption Opts, 26*7a6dacacSDimitry Andric PassInstrumentationCallbacks *PIC) 27*7a6dacacSDimitry Andric : CodeGenPassBuilder(TM, Opts, PIC) {} 28*7a6dacacSDimitry Andric void addPreISel(AddIRPass &addPass) const; 29*7a6dacacSDimitry Andric void addAsmPrinter(AddMachinePass &, CreateMCStreamer) const; 30*7a6dacacSDimitry Andric Error addInstSelector(AddMachinePass &) const; 31*7a6dacacSDimitry Andric }; 32*7a6dacacSDimitry Andric 33*7a6dacacSDimitry Andric void X86CodeGenPassBuilder::addPreISel(AddIRPass &addPass) const { 34*7a6dacacSDimitry Andric // TODO: Add passes pre instruction selection. 35*7a6dacacSDimitry Andric } 36*7a6dacacSDimitry Andric 37*7a6dacacSDimitry Andric void X86CodeGenPassBuilder::addAsmPrinter(AddMachinePass &addPass, 38*7a6dacacSDimitry Andric CreateMCStreamer) const { 39*7a6dacacSDimitry Andric // TODO: Add AsmPrinter. 40*7a6dacacSDimitry Andric } 41*7a6dacacSDimitry Andric 42*7a6dacacSDimitry Andric Error X86CodeGenPassBuilder::addInstSelector(AddMachinePass &) const { 43*7a6dacacSDimitry Andric // TODO: Add instruction selector. 44*7a6dacacSDimitry Andric return Error::success(); 45*7a6dacacSDimitry Andric } 46*7a6dacacSDimitry Andric 47*7a6dacacSDimitry Andric } // namespace 48*7a6dacacSDimitry Andric 49*7a6dacacSDimitry Andric Error X86TargetMachine::buildCodeGenPipeline( 50*7a6dacacSDimitry Andric ModulePassManager &MPM, MachineFunctionPassManager &MFPM, 51*7a6dacacSDimitry Andric MachineFunctionAnalysisManager &, raw_pwrite_stream &Out, 52*7a6dacacSDimitry Andric raw_pwrite_stream *DwoOut, CodeGenFileType FileType, 53*7a6dacacSDimitry Andric CGPassBuilderOption Opt, PassInstrumentationCallbacks *PIC) { 54*7a6dacacSDimitry Andric auto CGPB = X86CodeGenPassBuilder(*this, Opt, PIC); 55*7a6dacacSDimitry Andric return CGPB.buildPipeline(MPM, MFPM, Out, DwoOut, FileType); 56*7a6dacacSDimitry Andric } 57