brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.1 KiB · cb02b44 Raw
91 lines · c
1//===-- PPCTargetMachine.h - Define TargetMachine for PowerPC ---*- 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 PowerPC specific subclass of TargetMachine.10//11//===----------------------------------------------------------------------===//12 13#ifndef LLVM_LIB_TARGET_POWERPC_PPCTARGETMACHINE_H14#define LLVM_LIB_TARGET_POWERPC_PPCTARGETMACHINE_H15 16#include "PPCInstrInfo.h"17#include "PPCSubtarget.h"18#include "llvm/CodeGen/CodeGenTargetMachineImpl.h"19#include "llvm/IR/DataLayout.h"20#include <optional>21 22namespace llvm {23 24/// Common code between 32-bit and 64-bit PowerPC targets.25///26class PPCTargetMachine final : public CodeGenTargetMachineImpl {27public:28  enum PPCABI { PPC_ABI_UNKNOWN, PPC_ABI_ELFv1, PPC_ABI_ELFv2 };29  enum Endian { NOT_DETECTED, LITTLE, BIG };30 31private:32  std::unique_ptr<TargetLoweringObjectFile> TLOF;33  PPCABI TargetABI;34  Endian Endianness = Endian::NOT_DETECTED;35  mutable bool HasGlibcHWCAPAccess = false;36 37  mutable StringMap<std::unique_ptr<PPCSubtarget>> SubtargetMap;38 39public:40  PPCTargetMachine(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);45 46  ~PPCTargetMachine() override;47 48  const PPCSubtarget *getSubtargetImpl(const Function &F) const override;49  // DO NOT IMPLEMENT: There is no such thing as a valid default subtarget,50  // subtargets are per-function entities based on the target-specific51  // attributes of each function.52  const PPCSubtarget *getSubtargetImpl() const = delete;53 54  // Pass Pipeline Configuration55  TargetPassConfig *createPassConfig(PassManagerBase &PM) override;56 57  TargetTransformInfo getTargetTransformInfo(const Function &F) const override;58 59  TargetLoweringObjectFile *getObjFileLowering() const override {60    return TLOF.get();61  }62 63  MachineFunctionInfo *64  createMachineFunctionInfo(BumpPtrAllocator &Allocator, const Function &F,65                            const TargetSubtargetInfo *STI) const override;66  ScheduleDAGInstrs *67  createMachineScheduler(MachineSchedContext *C) const override;68  ScheduleDAGInstrs *69  createPostMachineScheduler(MachineSchedContext *C) const override;70 71  bool isELFv2ABI() const { return TargetABI == PPC_ABI_ELFv2; }72  bool hasGlibcHWCAPAccess() const { return HasGlibcHWCAPAccess; }73  void setGlibcHWCAPAccess(bool Val = true) const { HasGlibcHWCAPAccess = Val; }74  bool isPPC64() const {75    const Triple &TT = getTargetTriple();76    return (TT.getArch() == Triple::ppc64 || TT.getArch() == Triple::ppc64le);77  };78 79  bool isNoopAddrSpaceCast(unsigned SrcAS, unsigned DestAS) const override {80    // Addrspacecasts are always noops.81    return true;82  }83 84  bool isLittleEndian() const;85 86  int unqualifiedInlineAsmVariant() const override { return 1; }87};88} // end namespace llvm89 90#endif91