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