brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.7 KiB · 321d149 Raw
112 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// This file declares the Mips specific subclass of TargetMachine.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H14#define LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H15 16#include "MCTargetDesc/MipsABIInfo.h"17#include "MipsSubtarget.h"18#include "llvm/ADT/StringMap.h"19#include "llvm/ADT/StringRef.h"20#include "llvm/CodeGen/CodeGenTargetMachineImpl.h"21#include "llvm/Support/CodeGen.h"22#include <memory>23#include <optional>24 25namespace llvm {26 27class MipsTargetMachine : public CodeGenTargetMachineImpl {28  bool isLittle;29  std::unique_ptr<TargetLoweringObjectFile> TLOF;30  // Selected ABI31  MipsABIInfo ABI;32  const MipsSubtarget *Subtarget;33  MipsSubtarget DefaultSubtarget;34  MipsSubtarget NoMips16Subtarget;35  MipsSubtarget Mips16Subtarget;36 37  mutable StringMap<std::unique_ptr<MipsSubtarget>> SubtargetMap;38 39public:40  MipsTargetMachine(const Target &T, const Triple &TT, StringRef CPU,41                    StringRef FS, const TargetOptions &Options,42                    std::optional<Reloc::Model> RM,43                    std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,44                    bool JIT, bool isLittle);45  ~MipsTargetMachine() override;46 47  TargetTransformInfo getTargetTransformInfo(const Function &F) const override;48 49  const MipsSubtarget *getSubtargetImpl() const {50    if (Subtarget)51      return Subtarget;52    return &DefaultSubtarget;53  }54 55  const MipsSubtarget *getSubtargetImpl(const Function &F) const override;56 57  /// Reset the subtarget for the Mips target.58  void resetSubtarget(MachineFunction *MF);59 60  // Pass Pipeline Configuration61  TargetPassConfig *createPassConfig(PassManagerBase &PM) override;62 63  TargetLoweringObjectFile *getObjFileLowering() const override {64    return TLOF.get();65  }66 67  MachineFunctionInfo *68  createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F,69                            const TargetSubtargetInfo *STI) const override;70 71  /// Returns true if a cast between SrcAS and DestAS is a noop.72  bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const override {73    // Mips doesn't have any special address spaces so we just reserve74    // the first 256 for software use (e.g. OpenCL) and treat casts75    // between them as noops.76    return SrcAS < 256 && DestAS < 256;77  }78 79  bool isLittleEndian() const { return isLittle; }80  const MipsABIInfo &getABI() const { return ABI; }81};82 83/// Mips32/64 big endian target machine.84///85class MipsebTargetMachine : public MipsTargetMachine {86  virtual void anchor();87 88public:89  MipsebTargetMachine(const Target &T, const Triple &TT, StringRef CPU,90                      StringRef FS, const TargetOptions &Options,91                      std::optional<Reloc::Model> RM,92                      std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,93                      bool JIT);94};95 96/// Mips32/64 little endian target machine.97///98class MipselTargetMachine : public MipsTargetMachine {99  virtual void anchor();100 101public:102  MipselTargetMachine(const Target &T, const Triple &TT, StringRef CPU,103                      StringRef FS, const TargetOptions &Options,104                      std::optional<Reloc::Model> RM,105                      std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,106                      bool JIT);107};108 109} // end namespace llvm110 111#endif // LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H112