LLVM 24.0.0git
MipsTargetMachine.h
Go to the documentation of this file.
1//===- MipsTargetMachine.h - Define TargetMachine for Mips ------*- 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//
9// This file declares the Mips specific subclass of TargetMachine.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H
14#define LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H
15
17#include "MipsSubtarget.h"
18#include "llvm/ADT/StringMap.h"
19#include "llvm/ADT/StringRef.h"
22#include <memory>
23#include <optional>
24
25namespace llvm {
26
28 const MipsOptions &CLOpts;
29 const MipsMCOptions &MCCLOpts;
30 bool isLittle;
31 bool IsJIT;
32 // Used to initialize module-wide object-file policy.
33 MipsSubtarget DefaultSubtarget;
34 std::unique_ptr<TargetLoweringObjectFile> TLOF;
35
36 mutable StringMap<std::unique_ptr<MipsSubtarget>> SubtargetMap;
37
38public:
39 MipsTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
41 std::optional<Reloc::Model> RM,
42 std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,
43 bool JIT, bool isLittle);
45
47
48 const MipsOptions &getCLOpts() const { return CLOpts; }
49 const MipsMCOptions &getMCCLOpts() const { return MCCLOpts; }
50 const MipsSubtarget *getSubtargetImpl(const Function &F) const override;
51
52 // Pass Pipeline Configuration
54
56 return TLOF.get();
57 }
58
61 const TargetSubtargetInfo *STI) const override;
62
63 /// Returns true if a cast between SrcAS and DestAS is a noop.
64 bool isNoopAddrSpaceCast(const DataLayout &, unsigned SrcAS,
65 unsigned DestAS) const override {
66 // Mips doesn't have any special address spaces so we just reserve
67 // the first 256 for software use (e.g. OpenCL) and treat casts
68 // between them as noops.
69 return SrcAS < 256 && DestAS < 256;
70 }
71
72 bool isLittleEndian() const { return isLittle; }
73 bool isJIT() const { return IsJIT; }
74
76
79 CodeGenFileType FileType,
80 const CGPassBuilderOption &Opt, MCContext &Ctx,
82};
83
84/// Mips32/64 big endian target machine.
85///
87 virtual void anchor();
88
89public:
90 MipsebTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
92 std::optional<Reloc::Model> RM,
93 std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,
94 bool JIT);
95};
96
97/// Mips32/64 little endian target machine.
98///
100 virtual void anchor();
101
102public:
103 MipselTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
105 std::optional<Reloc::Model> RM,
106 std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,
107 bool JIT);
108};
109
110} // end namespace llvm
111
112#endif // LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H
This file defines the StringMap class.
#define F(x, y, z)
Definition MD5.cpp:54
#define T
ModuleAnalysisManager MAM
PassBuilder PB(Mod->getContext(), Machine, PassOpts->PTO, std::nullopt, &PIC)
PassInstrumentationCallbacks PIC
Basic Register Allocator
CodeGenTargetMachineImpl(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, Reloc::Model RM, CodeModel::Model CM, CodeGenOptLevel OL)
A parsed version of the target data layout string in and methods for querying it.
Definition DataLayout.h:64
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
Context object for machine code objects.
Definition MCContext.h:83
void registerPassBuilderCallbacks(PassBuilder &PB) override
Allow the target to modify the pass pipeline.
Error buildCodeGenPipeline(ModulePassManager &MPM, ModuleAnalysisManager &MAM, raw_pwrite_stream &Out, raw_pwrite_stream *DwoOut, CodeGenFileType FileType, const CGPassBuilderOption &Opt, MCContext &Ctx, PassInstrumentationCallbacks *PIC) override
TargetTransformInfo getTargetTransformInfo(const Function &F) const override
Get a TargetTransformInfo implementation for the target.
MachineFunctionInfo * createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F, const TargetSubtargetInfo *STI) const override
Create the target's instance of MachineFunctionInfo.
const MipsMCOptions & getMCCLOpts() const
MipsTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, std::optional< Reloc::Model > RM, std::optional< CodeModel::Model > CM, CodeGenOptLevel OL, bool JIT, bool isLittle)
const MipsOptions & getCLOpts() const
TargetLoweringObjectFile * getObjFileLowering() const override
TargetPassConfig * createPassConfig(PassManagerBase &PM) override
Create a pass configuration object to be used by addPassToEmitX methods for generating a pipeline of ...
~MipsTargetMachine() override
bool isNoopAddrSpaceCast(const DataLayout &, unsigned SrcAS, unsigned DestAS) const override
Returns true if a cast between SrcAS and DestAS is a noop.
const MipsSubtarget * getSubtargetImpl(const Function &F) const override
Virtual method implemented by subclasses that returns a reference to that target's TargetSubtargetInf...
MipsebTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, std::optional< Reloc::Model > RM, std::optional< CodeModel::Model > CM, CodeGenOptLevel OL, bool JIT)
MipselTargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, std::optional< Reloc::Model > RM, std::optional< CodeModel::Model > CM, CodeGenOptLevel OL, bool JIT)
This class provides access to building LLVM's passes.
This class manages callbacks registration, as well as provides a way for PassInstrumentation to pass ...
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition StringMap.h:129
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
std::unique_ptr< const MCSubtargetInfo > STI
TargetOptions Options
Target-Independent Code Generator Pass Configuration Options.
TargetSubtargetInfo - Generic base class for all target subtargets.
This pass provides access to the codegen interfaces that are needed for IR-level transformations.
Target - Wrapper for Target specific information.
Triple - Helper class for working with autoconf configuration names.
Definition Triple.h:48
PassManagerBase - An abstract interface to allow code to add passes to a pass manager without having ...
An abstract base class for streams implementations that also support a pwrite operation.
This is an optimization pass for GlobalISel generic memory operations.
CodeGenFileType
These enums are meant to be passed into addPassesToEmitFile to indicate what type of file to emit,...
Definition CodeGen.h:309
PassManager< Module > ModulePassManager
Convenience typedef for a pass manager over modules.
CodeGenOptLevel
Code generation optimization level.
Definition CodeGen.h:280
BumpPtrAllocatorImpl<> BumpPtrAllocator
The standard BumpPtrAllocator which just uses the default template parameters.
Definition Allocator.h:391
AnalysisManager< Module > ModuleAnalysisManager
Convenience typedef for the Module analysis manager.
Definition MIRParser.h:39
MachineFunctionInfo - This class can be derived from and used by targets to hold private target-speci...