clang  3.8.0
Action.cpp
Go to the documentation of this file.
1 //===--- Action.cpp - Abstract compilation steps --------------------------===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "clang/Driver/Action.h"
11 #include "llvm/ADT/StringSwitch.h"
12 #include "llvm/Support/ErrorHandling.h"
13 #include "llvm/Support/Regex.h"
14 #include <cassert>
15 using namespace clang::driver;
16 using namespace llvm::opt;
17 
19 
21  switch (AC) {
22  case InputClass: return "input";
23  case BindArchClass: return "bind-arch";
24  case CudaDeviceClass: return "cuda-device";
25  case CudaHostClass: return "cuda-host";
26  case PreprocessJobClass: return "preprocessor";
27  case PrecompileJobClass: return "precompiler";
28  case AnalyzeJobClass: return "analyzer";
29  case MigrateJobClass: return "migrator";
30  case CompileJobClass: return "compiler";
31  case BackendJobClass: return "backend";
32  case AssembleJobClass: return "assembler";
33  case LinkJobClass: return "linker";
34  case LipoJobClass: return "lipo";
35  case DsymutilJobClass: return "dsymutil";
36  case VerifyDebugInfoJobClass: return "verify-debug-info";
37  case VerifyPCHJobClass: return "verify-pch";
38  }
39 
40  llvm_unreachable("invalid class");
41 }
42 
43 void InputAction::anchor() {}
44 
45 InputAction::InputAction(const Arg &_Input, types::ID _Type)
46  : Action(InputClass, _Type), Input(_Input) {
47 }
48 
49 void BindArchAction::anchor() {}
50 
52  : Action(BindArchClass, Input), ArchName(_ArchName) {}
53 
54 // Converts CUDA GPU architecture, e.g. "sm_21", to its corresponding virtual
55 // compute arch, e.g. "compute_20". Returns null if the input arch is null or
56 // doesn't match an existing arch.
57 static const char* GpuArchToComputeName(const char *ArchName) {
58  if (!ArchName)
59  return nullptr;
60  return llvm::StringSwitch<const char *>(ArchName)
61  .Cases("sm_20", "sm_21", "compute_20")
62  .Case("sm_30", "compute_30")
63  .Case("sm_32", "compute_32")
64  .Case("sm_35", "compute_35")
65  .Case("sm_37", "compute_37")
66  .Case("sm_50", "compute_50")
67  .Case("sm_52", "compute_52")
68  .Case("sm_53", "compute_53")
69  .Default(nullptr);
70 }
71 
72 void CudaDeviceAction::anchor() {}
73 
75  bool AtTopLevel)
76  : Action(CudaDeviceClass, Input), GpuArchName(ArchName),
77  AtTopLevel(AtTopLevel) {
78  assert(IsValidGpuArchName(GpuArchName));
79 }
80 
82  return GpuArchToComputeName(GpuArchName);
83 }
84 
85 bool CudaDeviceAction::IsValidGpuArchName(llvm::StringRef ArchName) {
86  return GpuArchToComputeName(ArchName.data()) != nullptr;
87 }
88 
89 void CudaHostAction::anchor() {}
90 
92  : Action(CudaHostClass, Input), DeviceActions(DeviceActions) {}
93 
94 void JobAction::anchor() {}
95 
97  : Action(Kind, Input, Type) {}
98 
100  : Action(Kind, Inputs, Type) {
101 }
102 
103 void PreprocessJobAction::anchor() {}
104 
106  : JobAction(PreprocessJobClass, Input, OutputType) {}
107 
108 void PrecompileJobAction::anchor() {}
109 
111  : JobAction(PrecompileJobClass, Input, OutputType) {}
112 
113 void AnalyzeJobAction::anchor() {}
114 
116  : JobAction(AnalyzeJobClass, Input, OutputType) {}
117 
118 void MigrateJobAction::anchor() {}
119 
121  : JobAction(MigrateJobClass, Input, OutputType) {}
122 
123 void CompileJobAction::anchor() {}
124 
126  : JobAction(CompileJobClass, Input, OutputType) {}
127 
128 void BackendJobAction::anchor() {}
129 
131  : JobAction(BackendJobClass, Input, OutputType) {}
132 
133 void AssembleJobAction::anchor() {}
134 
136  : JobAction(AssembleJobClass, Input, OutputType) {}
137 
138 void LinkJobAction::anchor() {}
139 
141  : JobAction(LinkJobClass, Inputs, Type) {
142 }
143 
144 void LipoJobAction::anchor() {}
145 
147  : JobAction(LipoJobClass, Inputs, Type) {
148 }
149 
150 void DsymutilJobAction::anchor() {}
151 
153  : JobAction(DsymutilJobClass, Inputs, Type) {
154 }
155 
156 void VerifyJobAction::anchor() {}
157 
159  types::ID Type)
160  : JobAction(Kind, Input, Type) {
161  assert((Kind == VerifyDebugInfoJobClass || Kind == VerifyPCHJobClass) &&
162  "ActionClass is not a valid VerifyJobAction");
163 }
164 
165 void VerifyDebugInfoJobAction::anchor() {}
166 
168  types::ID Type)
169  : VerifyJobAction(VerifyDebugInfoJobClass, Input, Type) {}
170 
171 void VerifyPCHJobAction::anchor() {}
172 
174  : VerifyJobAction(VerifyPCHJobClass, Input, Type) {}
AssembleJobAction(Action *Input, types::ID OutputType)
Definition: Action.cpp:135
PrecompileJobAction(Action *Input, types::ID OutputType)
Definition: Action.cpp:110
BackendJobAction(Action *Input, types::ID OutputType)
Definition: Action.cpp:130
MigrateJobAction(Action *Input, types::ID OutputType)
Definition: Action.cpp:120
static const char * GpuArchToComputeName(const char *ArchName)
Definition: Action.cpp:57
The base class of the type hierarchy.
Definition: Type.h:1249
LinkJobAction(ActionList &Inputs, types::ID Type)
Definition: Action.cpp:140
InputAction(const llvm::opt::Arg &Input, types::ID Type)
Definition: Action.cpp:45
VerifyJobAction(ActionClass Kind, Action *Input, types::ID Type)
Definition: Action.cpp:158
const char * getComputeArchName() const
Gets the compute_XX that corresponds to getGpuArchName().
Definition: Action.cpp:81
VerifyDebugInfoJobAction(Action *Input, types::ID Type)
Definition: Action.cpp:167
CompileJobAction(Action *Input, types::ID OutputType)
Definition: Action.cpp:125
CudaDeviceAction(Action *Input, const char *ArchName, bool AtTopLevel)
Definition: Action.cpp:74
JobAction(ActionClass Kind, Action *Input, types::ID Type)
Definition: Action.cpp:96
LipoJobAction(ActionList &Inputs, types::ID Type)
Definition: Action.cpp:146
Action - Represent an abstract compilation step to perform.
Definition: Action.h:41
static bool IsValidGpuArchName(llvm::StringRef ArchName)
Definition: Action.cpp:85
DsymutilJobAction(ActionList &Inputs, types::ID Type)
Definition: Action.cpp:152
PreprocessJobAction(Action *Input, types::ID OutputType)
Definition: Action.cpp:105
virtual ~Action()
Definition: Action.cpp:18
VerifyPCHJobAction(Action *Input, types::ID Type)
Definition: Action.cpp:173
CudaHostAction(Action *Input, const ActionList &DeviceActions)
Definition: Action.cpp:91
Kind
AnalyzeJobAction(Action *Input, types::ID OutputType)
Definition: Action.cpp:115
const char * getClassName() const
Definition: Action.h:91
BindArchAction(Action *Input, const char *ArchName)
Definition: Action.cpp:51
const StringRef Input