llir-opt  0.0.1
Low-Level Post-Link Optimiser for OCaml and C
x86emitter.h
1 // This file if part of the llir-opt project.
2 // Licensing information can be found in the LICENSE file.
3 // (C) 2018 Nandor Licker. All rights reserved.
4 
5 #pragma once
6 
7 #include <llvm/Support/CodeGen.h>
8 #include <llvm/CodeGen/GlobalISel/CallLowering.h>
9 #include <llvm/CodeGen/GlobalISel/InstructionSelect.h>
10 #include <llvm/CodeGen/GlobalISel/RegisterBankInfo.h>
11 #include <llvm/CodeGen/GlobalISel/LegalizerInfo.h>
12 
13 #include "core/target/x86.h"
14 #include "emitter/emitter.h"
15 
16 class Func;
17 
18 
19 
23 class X86Emitter : public Emitter {
24 public:
26  X86Emitter(
27  const std::string &path,
28  llvm::raw_fd_ostream &os,
29  X86Target &target
30  );
32  ~X86Emitter() override;
33 
34 protected:
36  llvm::LLVMTargetMachine &GetTargetMachine() override
37  {
38  return x86target_.GetTargetMachine();
39  }
40 
43  const Prog &prog,
44  llvm::CodeGenOpt::Level opt
45  ) override;
48  llvm::MCContext &mcCtx,
49  llvm::MCStreamer &mcStreamer,
50  const llvm::TargetLoweringObjectFile &objInfo,
51  ISel &isel
52  ) override;
54  llvm::ModulePass *CreateRuntimePass(
55  const Prog &prog,
56  llvm::MCContext &mcCtx,
57  llvm::MCStreamer &mcStreamer,
58  const llvm::TargetLoweringObjectFile &objInfo
59  ) override;
60 
61 private:
63  X86Target &x86target_;
65  llvm::TargetLibraryInfoImpl TLII_;
67  llvm::TargetLibraryInfo LibInfo_;
68 };
Func
Definition: func.h:30
X86Emitter
Definition: x86emitter.h:23
AnnotPrinter
Definition: annot_printer.h:47
ISel
Definition: isel.h:26
X86Emitter::GetTargetMachine
llvm::LLVMTargetMachine & GetTargetMachine() override
Returns the generic target machine.
Definition: x86emitter.h:36
X86Target
Definition: x86.h:20
X86Target::GetTargetMachine
llvm::X86TargetMachine & GetTargetMachine()
Returns the generic target machine.
Definition: x86.h:36
Emitter
Definition: emitter.h:25
X86Emitter::CreateRuntimePass
llvm::ModulePass * CreateRuntimePass(const Prog &prog, llvm::MCContext &mcCtx, llvm::MCStreamer &mcStreamer, const llvm::TargetLoweringObjectFile &objInfo) override
Creates the runtime generation pass.
Definition: x86emitter.cpp:74
X86Emitter::~X86Emitter
~X86Emitter() override
Destroys the x86 emitter.
Definition: x86emitter.cpp:39
Prog
Definition: prog.h:33
X86Emitter::CreateISelPass
ISel * CreateISelPass(const Prog &prog, llvm::CodeGenOpt::Level opt) override
Creates the LLIR-to-SelectionDAG pass.
Definition: x86emitter.cpp:44
X86Emitter::CreateAnnotPass
AnnotPrinter * CreateAnnotPass(llvm::MCContext &mcCtx, llvm::MCStreamer &mcStreamer, const llvm::TargetLoweringObjectFile &objInfo, ISel &isel) override
Creates the annotation generation pass.
Definition: x86emitter.cpp:57
X86Emitter::X86Emitter
X86Emitter(const std::string &path, llvm::raw_fd_ostream &os, X86Target &target)
Creates an x86 emitter.
Definition: x86emitter.cpp:27