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
20using namespace llvm;
21
22namespace {
23
24class X86CodeGenPassBuilder
25 : public CodeGenPassBuilder<X86CodeGenPassBuilder, X86TargetMachine> {
26public:
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
36void X86CodeGenPassBuilder::addPreISel(AddIRPass &addPass) const {
37 // TODO: Add passes pre instruction selection.
38}
39
40void X86CodeGenPassBuilder::addAsmPrinter(AddMachinePass &addPass,
41 CreateMCStreamer) const {
42 // TODO: Add AsmPrinter.
43}
44
45Error 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
53void X86TargetMachine::registerPassBuilderCallbacks(PassBuilder &PB) {
54#define GET_PASS_REGISTRY "X86PassRegistry.def"
55#include "llvm/Passes/TargetPassRegistry.inc"
56}
57
58Error 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