LLVM  8.0.1
AArch64TargetMachine.h
Go to the documentation of this file.
1 //==-- AArch64TargetMachine.h - Define TargetMachine for AArch64 -*- C++ -*-==//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file declares the AArch64 specific subclass of TargetMachine.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_LIB_TARGET_AARCH64_AARCH64TARGETMACHINE_H
15 #define LLVM_LIB_TARGET_AARCH64_AARCH64TARGETMACHINE_H
16 
17 #include "AArch64InstrInfo.h"
18 #include "AArch64Subtarget.h"
19 #include "llvm/IR/DataLayout.h"
21 
22 namespace llvm {
23 
24 class AArch64RegisterBankInfo;
25 
27 protected:
28  std::unique_ptr<TargetLoweringObjectFile> TLOF;
30 
31 public:
32  AArch64TargetMachine(const Target &T, const Triple &TT, StringRef CPU,
33  StringRef FS, const TargetOptions &Options,
35  CodeGenOpt::Level OL, bool JIT, bool IsLittleEndian);
36 
37  ~AArch64TargetMachine() override;
38  const AArch64Subtarget *getSubtargetImpl(const Function &F) const override;
39  // DO NOT IMPLEMENT: There is no such thing as a valid default subtarget,
40  // subtargets are per-function entities based on the target-specific
41  // attributes of each function.
42  const AArch64Subtarget *getSubtargetImpl() const = delete;
43 
44  // Pass Pipeline Configuration
46 
48 
50  return TLOF.get();
51  }
52 
53 private:
54  bool isLittle;
55 };
56 
57 // AArch64 little endian target machine.
58 //
60  virtual void anchor();
61 public:
62  AArch64leTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
63  StringRef FS, const TargetOptions &Options,
66  bool JIT);
67 };
68 
69 // AArch64 big endian target machine.
70 //
72  virtual void anchor();
73 public:
74  AArch64beTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
75  StringRef FS, const TargetOptions &Options,
78  bool JIT);
79 };
80 
81 } // end namespace llvm
82 
83 #endif
This class represents lattice values for constants.
Definition: AllocatorList.h:24
std::unique_ptr< TargetLoweringObjectFile > TLOF
F(f)
TargetLoweringObjectFile * getObjFileLowering() const override
Target-Independent Code Generator Pass Configuration Options.
TargetPassConfig * createPassConfig(PassManagerBase &PM) override
Create a pass configuration object to be used by addPassToEmitX methods for generating a pipeline of ...
AArch64TargetMachine(const Target &T, const Triple &TT, StringRef CPU, StringRef FS, const TargetOptions &Options, Optional< Reloc::Model > RM, Optional< CodeModel::Model > CM, CodeGenOpt::Level OL, bool JIT, bool IsLittleEndian)
Create an AArch64 architecture model.
const AArch64Subtarget * getSubtargetImpl() const =delete
This class describes a target machine that is implemented with the LLVM target-independent code gener...
Triple - Helper class for working with autoconf configuration names.
Definition: Triple.h:44
This pass provides access to the codegen interfaces that are needed for IR-level transformations.
PassManagerBase - An abstract interface to allow code to add passes to a pass manager without having ...
StringMap - This is an unconventional map that is specialized for handling keys that are "strings"...
Definition: StringMap.h:220
Target - Wrapper for Target specific information.
StringMap< std::unique_ptr< AArch64Subtarget > > SubtargetMap
TargetOptions Options
Definition: TargetMachine.h:97
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:49
TargetTransformInfo getTargetTransformInfo(const Function &F) override
Get a TargetTransformInfo implementation for the target.