xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/X86/X86CodeGenPassBuilder.cpp (revision 7a6dacaca14b62ca4b74406814becb87a3fefac0)
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