Coverage Report

Created: 2019-07-24 05:18

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/clang/lib/Driver/ToolChains/Hexagon.h
Line
Count
Source (jump to first uncovered line)
1
//===--- Hexagon.h - Hexagon ToolChain Implementations ----------*- 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
#ifndef LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HEXAGON_H
10
#define LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HEXAGON_H
11
12
#include "Linux.h"
13
#include "clang/Driver/Tool.h"
14
#include "clang/Driver/ToolChain.h"
15
16
namespace clang {
17
namespace driver {
18
namespace tools {
19
namespace hexagon {
20
// For Hexagon, we do not need to instantiate tools for PreProcess, PreCompile
21
// and Compile.
22
// We simply use "clang -cc1" for those actions.
23
class LLVM_LIBRARY_VISIBILITY Assembler : public GnuTool {
24
public:
25
  Assembler(const ToolChain &TC)
26
5
      : GnuTool("hexagon::Assembler", "hexagon-as", TC) {}
27
28
5
  bool hasIntegratedCPP() const override { return false; }
29
30
  void RenderExtraToolArgs(const JobAction &JA,
31
                           llvm::opt::ArgStringList &CmdArgs) const;
32
  void ConstructJob(Compilation &C, const JobAction &JA,
33
                    const InputInfo &Output, const InputInfoList &Inputs,
34
                    const llvm::opt::ArgList &TCArgs,
35
                    const char *LinkingOutput) const override;
36
};
37
38
class LLVM_LIBRARY_VISIBILITY Linker : public GnuTool {
39
public:
40
54
  Linker(const ToolChain &TC) : GnuTool("hexagon::Linker", "hexagon-ld", TC) {}
41
42
54
  bool hasIntegratedCPP() const override { return false; }
43
0
  bool isLinkJob() const override { return true; }
44
45
  virtual void RenderExtraToolArgs(const JobAction &JA,
46
                                   llvm::opt::ArgStringList &CmdArgs) const;
47
  void ConstructJob(Compilation &C, const JobAction &JA,
48
                    const InputInfo &Output, const InputInfoList &Inputs,
49
                    const llvm::opt::ArgList &TCArgs,
50
                    const char *LinkingOutput) const override;
51
};
52
53
void getHexagonTargetFeatures(const Driver &D, const llvm::opt::ArgList &Args,
54
                              std::vector<StringRef> &Features);
55
56
} // end namespace hexagon.
57
} // end namespace tools
58
59
namespace toolchains {
60
61
class LLVM_LIBRARY_VISIBILITY HexagonToolChain : public Linux {
62
protected:
63
  GCCVersion GCCLibAndIncVersion;
64
  Tool *buildAssembler() const override;
65
  Tool *buildLinker() const override;
66
67
  unsigned getOptimizationLevel(const llvm::opt::ArgList &DriverArgs) const;
68
69
public:
70
  HexagonToolChain(const Driver &D, const llvm::Triple &Triple,
71
                   const llvm::opt::ArgList &Args);
72
  ~HexagonToolChain() override;
73
74
  void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
75
                             llvm::opt::ArgStringList &CC1Args,
76
                             Action::OffloadKind DeviceOffloadKind) const override;
77
  void
78
  AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
79
                            llvm::opt::ArgStringList &CC1Args) const override;
80
  void addLibStdCxxIncludePaths(
81
      const llvm::opt::ArgList &DriverArgs,
82
      llvm::opt::ArgStringList &CC1Args) const override;
83
84
54
  const char *getDefaultLinker() const override { return "hexagon-link"; }
85
86
  CXXStdlibType GetCXXStdlibType(const llvm::opt::ArgList &Args) const override;
87
88
0
  StringRef GetGCCLibAndIncVersion() const { return GCCLibAndIncVersion.Text; }
89
530
  bool IsIntegratedAssemblerDefault() const override {
90
530
    return true;
91
530
  }
92
93
  std::string getHexagonTargetDir(
94
      const std::string &InstalledDir,
95
      const SmallVectorImpl<std::string> &PrefixDirs) const;
96
  void getHexagonLibraryPaths(const llvm::opt::ArgList &Args,
97
      ToolChain::path_list &LibPaths) const;
98
99
  static bool isAutoHVXEnabled(const llvm::opt::ArgList &Args);
100
  static const StringRef GetDefaultCPU();
101
  static const StringRef GetTargetCPUVersion(const llvm::opt::ArgList &Args);
102
103
  static Optional<unsigned> getSmallDataThreshold(
104
      const llvm::opt::ArgList &Args);
105
};
106
107
} // end namespace toolchains
108
} // end namespace driver
109
} // end namespace clang
110
111
#endif // LLVM_CLANG_LIB_DRIVER_TOOLCHAINS_HEXAGON_H