121
|
1 //===- MipsTargetMachine.h - Define TargetMachine for Mips ------*- C++ -*-===//
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
2 //
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
3 // The LLVM Compiler Infrastructure
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
4 //
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
5 // This file is distributed under the University of Illinois Open Source
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
6 // License. See LICENSE.TXT for details.
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
7 //
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
8 //===----------------------------------------------------------------------===//
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
9 //
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
10 // This file declares the Mips specific subclass of TargetMachine.
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
11 //
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
12 //===----------------------------------------------------------------------===//
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
13
|
77
|
14 #ifndef LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H
|
|
15 #define LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
16
|
83
|
17 #include "MCTargetDesc/MipsABIInfo.h"
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
18 #include "MipsSubtarget.h"
|
121
|
19 #include "llvm/ADT/Optional.h"
|
|
20 #include "llvm/ADT/StringMap.h"
|
|
21 #include "llvm/ADT/StringRef.h"
|
|
22 #include "llvm/Support/CodeGen.h"
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
23 #include "llvm/Target/TargetMachine.h"
|
121
|
24 #include <memory>
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
25
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
26 namespace llvm {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
27
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
28 class MipsTargetMachine : public LLVMTargetMachine {
|
83
|
29 bool isLittle;
|
|
30 std::unique_ptr<TargetLoweringObjectFile> TLOF;
|
|
31 // Selected ABI
|
|
32 MipsABIInfo ABI;
|
77
|
33 MipsSubtarget *Subtarget;
|
|
34 MipsSubtarget DefaultSubtarget;
|
|
35 MipsSubtarget NoMips16Subtarget;
|
|
36 MipsSubtarget Mips16Subtarget;
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
37
|
83
|
38 mutable StringMap<std::unique_ptr<MipsSubtarget>> SubtargetMap;
|
|
39
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
40 public:
|
95
|
41 MipsTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
|
120
|
42 StringRef FS, const TargetOptions &Options,
|
121
|
43 Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
|
|
44 CodeGenOpt::Level OL, bool JIT, bool isLittle);
|
83
|
45 ~MipsTargetMachine() override;
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
46
|
83
|
47 TargetIRAnalysis getTargetIRAnalysis() override;
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
48
|
95
|
49 const MipsSubtarget *getSubtargetImpl() const {
|
77
|
50 if (Subtarget)
|
|
51 return Subtarget;
|
|
52 return &DefaultSubtarget;
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
53 }
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
54
|
83
|
55 const MipsSubtarget *getSubtargetImpl(const Function &F) const override;
|
|
56
|
77
|
57 /// \brief Reset the subtarget for the Mips target.
|
|
58 void resetSubtarget(MachineFunction *MF);
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
59
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
60 // Pass Pipeline Configuration
|
77
|
61 TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
|
83
|
62
|
|
63 TargetLoweringObjectFile *getObjFileLowering() const override {
|
|
64 return TLOF.get();
|
|
65 }
|
|
66
|
|
67 bool isLittleEndian() const { return isLittle; }
|
|
68 const MipsABIInfo &getABI() const { return ABI; }
|
121
|
69
|
|
70 bool isMachineVerifierClean() const override {
|
|
71 return false;
|
|
72 }
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
73 };
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
74
|
120
|
75 /// Mips32/64 big endian target machine.
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
76 ///
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
77 class MipsebTargetMachine : public MipsTargetMachine {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
78 virtual void anchor();
|
121
|
79
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
80 public:
|
95
|
81 MipsebTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
|
|
82 StringRef FS, const TargetOptions &Options,
|
121
|
83 Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
|
|
84 CodeGenOpt::Level OL, bool JIT);
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
85 };
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
86
|
120
|
87 /// Mips32/64 little endian target machine.
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
88 ///
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
89 class MipselTargetMachine : public MipsTargetMachine {
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
90 virtual void anchor();
|
121
|
91
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
92 public:
|
95
|
93 MipselTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
|
|
94 StringRef FS, const TargetOptions &Options,
|
121
|
95 Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
|
|
96 CodeGenOpt::Level OL, bool JIT);
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
97 };
|
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
98
|
121
|
99 } // end namespace llvm
|
0
Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
parents:
diff
changeset
|
100
|
121
|
101 #endif // LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H
|