brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 9452b3d Raw
70 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// This file declares the AVR specific subclass of TargetMachine.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_AVR_TARGET_MACHINE_H14#define LLVM_AVR_TARGET_MACHINE_H15 16#include "llvm/CodeGen/CodeGenTargetMachineImpl.h"17#include "llvm/IR/DataLayout.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 27namespace llvm {28 29/// A generic AVR implementation.30class AVRTargetMachine : public CodeGenTargetMachineImpl {31public: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  TargetTransformInfo getTargetTransformInfo(const Function &F) const override;52 53  bool isNoopAddrSpaceCast(unsigned SrcAs, unsigned DestAs) const override {54    // While AVR has different address spaces, they are all represented by55    // 16-bit pointers that can be freely casted between (of course, a pointer56    // must be cast back to its original address space to be dereferenceable).57    // To be safe, also check the pointer size in case we implement __memx58    // pointers.59    return getPointerSize(SrcAs) == getPointerSize(DestAs);60  }61 62private:63  std::unique_ptr<TargetLoweringObjectFile> TLOF;64  AVRSubtarget SubTarget;65};66 67} // end namespace llvm68 69#endif // LLVM_AVR_TARGET_MACHINE_H70