Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/Target/AVR/AVRTargetMachine.h
35266 views
1
//===-- AVRTargetMachine.h - Define TargetMachine for AVR -------*- 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 AVR specific subclass of TargetMachine.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_AVR_TARGET_MACHINE_H
14
#define LLVM_AVR_TARGET_MACHINE_H
15
16
#include "llvm/IR/DataLayout.h"
17
#include "llvm/Target/TargetMachine.h"
18
19
#include "AVRFrameLowering.h"
20
#include "AVRISelLowering.h"
21
#include "AVRInstrInfo.h"
22
#include "AVRSelectionDAGInfo.h"
23
#include "AVRSubtarget.h"
24
25
#include <optional>
26
27
namespace llvm {
28
29
/// A generic AVR implementation.
30
class AVRTargetMachine : public LLVMTargetMachine {
31
public:
32
AVRTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
33
StringRef FS, const TargetOptions &Options,
34
std::optional<Reloc::Model> RM,
35
std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,
36
bool JIT);
37
38
const AVRSubtarget *getSubtargetImpl() const;
39
const AVRSubtarget *getSubtargetImpl(const Function &) const override;
40
41
TargetLoweringObjectFile *getObjFileLowering() const override {
42
return this->TLOF.get();
43
}
44
45
TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
46
47
MachineFunctionInfo *
48
createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F,
49
const TargetSubtargetInfo *STI) const override;
50
51
bool isNoopAddrSpaceCast(unsigned SrcAs, unsigned DestAs) const override {
52
// While AVR has different address spaces, they are all represented by
53
// 16-bit pointers that can be freely casted between (of course, a pointer
54
// must be cast back to its original address space to be dereferenceable).
55
// To be safe, also check the pointer size in case we implement __memx
56
// pointers.
57
return getPointerSize(SrcAs) == getPointerSize(DestAs);
58
}
59
60
private:
61
std::unique_ptr<TargetLoweringObjectFile> TLOF;
62
AVRSubtarget SubTarget;
63
};
64
65
} // end namespace llvm
66
67
#endif // LLVM_AVR_TARGET_MACHINE_H
68
69