Path: blob/main/contrib/llvm-project/llvm/lib/Target/Sparc/SparcTargetMachine.h
35266 views
//===-- SparcTargetMachine.h - Define TargetMachine for Sparc ---*- C++ -*-===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//7//8// This file declares the Sparc specific subclass of TargetMachine.9//10//===----------------------------------------------------------------------===//1112#ifndef LLVM_LIB_TARGET_SPARC_SPARCTARGETMACHINE_H13#define LLVM_LIB_TARGET_SPARC_SPARCTARGETMACHINE_H1415#include "SparcInstrInfo.h"16#include "SparcSubtarget.h"17#include "llvm/Target/TargetMachine.h"18#include <optional>1920namespace llvm {2122class SparcTargetMachine : public LLVMTargetMachine {23std::unique_ptr<TargetLoweringObjectFile> TLOF;24bool is64Bit;25mutable StringMap<std::unique_ptr<SparcSubtarget>> SubtargetMap;2627public:28SparcTargetMachine(const Target &T, const Triple &TT, StringRef CPU,29StringRef FS, const TargetOptions &Options,30std::optional<Reloc::Model> RM,31std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,32bool JIT, bool is64bit);33~SparcTargetMachine() override;3435const SparcSubtarget *getSubtargetImpl(const Function &F) const override;3637// Pass Pipeline Configuration38TargetPassConfig *createPassConfig(PassManagerBase &PM) override;39TargetLoweringObjectFile *getObjFileLowering() const override {40return TLOF.get();41}4243MachineFunctionInfo *44createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F,45const TargetSubtargetInfo *STI) const override;46};4748/// Sparc 32-bit target machine49///50class SparcV8TargetMachine : public SparcTargetMachine {51virtual void anchor();5253public:54SparcV8TargetMachine(const Target &T, const Triple &TT, StringRef CPU,55StringRef FS, const TargetOptions &Options,56std::optional<Reloc::Model> RM,57std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,58bool JIT);59};6061/// Sparc 64-bit target machine62///63class SparcV9TargetMachine : public SparcTargetMachine {64virtual void anchor();6566public:67SparcV9TargetMachine(const Target &T, const Triple &TT, StringRef CPU,68StringRef FS, const TargetOptions &Options,69std::optional<Reloc::Model> RM,70std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,71bool JIT);72};7374class SparcelTargetMachine : public SparcTargetMachine {75virtual void anchor();7677public:78SparcelTargetMachine(const Target &T, const Triple &TT, StringRef CPU,79StringRef FS, const TargetOptions &Options,80std::optional<Reloc::Model> RM,81std::optional<CodeModel::Model> CM, CodeGenOptLevel OL,82bool JIT);83};8485} // end namespace llvm8687#endif888990