Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/lib/Target/Mips/MipsTargetMachine.h
Line
Count
Source (jump to first uncovered line)
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-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file declares the Mips specific subclass of TargetMachine.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#ifndef LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H
14
#define LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H
15
16
#include "MCTargetDesc/MipsABIInfo.h"
17
#include "MipsSubtarget.h"
18
#include "llvm/ADT/Optional.h"
19
#include "llvm/ADT/StringMap.h"
20
#include "llvm/ADT/StringRef.h"
21
#include "llvm/Support/CodeGen.h"
22
#include "llvm/Target/TargetMachine.h"
23
#include <memory>
24
25
namespace llvm {
26
27
class MipsTargetMachine : public LLVMTargetMachine {
28
  bool isLittle;
29
  std::unique_ptr<TargetLoweringObjectFile> TLOF;
30
  // Selected ABI
31
  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
39
public:
40
  MipsTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
41
                    StringRef FS, const TargetOptions &Options,
42
                    Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
43
                    CodeGenOpt::Level OL, bool JIT, bool isLittle);
44
  ~MipsTargetMachine() override;
45
46
  TargetTransformInfo getTargetTransformInfo(const Function &F) override;
47
48
15.5k
  const MipsSubtarget *getSubtargetImpl() const {
49
15.5k
    if (Subtarget)
50
15.5k
      return Subtarget;
51
0
    return &DefaultSubtarget;
52
0
  }
53
54
  const MipsSubtarget *getSubtargetImpl(const Function &F) const override;
55
56
  /// Reset the subtarget for the Mips target.
57
  void resetSubtarget(MachineFunction *MF);
58
59
  // Pass Pipeline Configuration
60
  TargetPassConfig *createPassConfig(PassManagerBase &PM) override;
61
62
98.1k
  TargetLoweringObjectFile *getObjFileLowering() const override {
63
98.1k
    return TLOF.get();
64
98.1k
  }
65
66
2.07k
  bool isLittleEndian() const { return isLittle; }
67
688k
  const MipsABIInfo &getABI() const { return ABI; }
68
};
69
70
/// Mips32/64 big endian target machine.
71
///
72
class MipsebTargetMachine : public MipsTargetMachine {
73
  virtual void anchor();
74
75
public:
76
  MipsebTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
77
                      StringRef FS, const TargetOptions &Options,
78
                      Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
79
                      CodeGenOpt::Level OL, bool JIT);
80
};
81
82
/// Mips32/64 little endian target machine.
83
///
84
class MipselTargetMachine : public MipsTargetMachine {
85
  virtual void anchor();
86
87
public:
88
  MipselTargetMachine(const Target &T, const Triple &TT, StringRef CPU,
89
                      StringRef FS, const TargetOptions &Options,
90
                      Optional<Reloc::Model> RM, Optional<CodeModel::Model> CM,
91
                      CodeGenOpt::Level OL, bool JIT);
92
};
93
94
} // end namespace llvm
95
96
#endif // LLVM_LIB_TARGET_MIPS_MIPSTARGETMACHINE_H