annotate clang/lib/Driver/Action.cpp @ 176:de4ac79aef9d

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 17:13:11 +0900
parents 1d019706d866
children 2e18cbf3894f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
150
anatofuz
parents:
diff changeset
1 //===- Action.cpp - Abstract compilation steps ----------------------------===//
anatofuz
parents:
diff changeset
2 //
anatofuz
parents:
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
anatofuz
parents:
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
anatofuz
parents:
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
anatofuz
parents:
diff changeset
6 //
anatofuz
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
anatofuz
parents:
diff changeset
8
anatofuz
parents:
diff changeset
9 #include "clang/Driver/Action.h"
anatofuz
parents:
diff changeset
10 #include "llvm/Support/ErrorHandling.h"
anatofuz
parents:
diff changeset
11 #include <cassert>
anatofuz
parents:
diff changeset
12 #include <string>
anatofuz
parents:
diff changeset
13
anatofuz
parents:
diff changeset
14 using namespace clang;
anatofuz
parents:
diff changeset
15 using namespace driver;
anatofuz
parents:
diff changeset
16 using namespace llvm::opt;
anatofuz
parents:
diff changeset
17
anatofuz
parents:
diff changeset
18 Action::~Action() = default;
anatofuz
parents:
diff changeset
19
anatofuz
parents:
diff changeset
20 const char *Action::getClassName(ActionClass AC) {
anatofuz
parents:
diff changeset
21 switch (AC) {
anatofuz
parents:
diff changeset
22 case InputClass: return "input";
anatofuz
parents:
diff changeset
23 case BindArchClass: return "bind-arch";
anatofuz
parents:
diff changeset
24 case OffloadClass:
anatofuz
parents:
diff changeset
25 return "offload";
anatofuz
parents:
diff changeset
26 case PreprocessJobClass: return "preprocessor";
anatofuz
parents:
diff changeset
27 case PrecompileJobClass: return "precompiler";
anatofuz
parents:
diff changeset
28 case HeaderModulePrecompileJobClass: return "header-module-precompiler";
anatofuz
parents:
diff changeset
29 case AnalyzeJobClass: return "analyzer";
anatofuz
parents:
diff changeset
30 case MigrateJobClass: return "migrator";
anatofuz
parents:
diff changeset
31 case CompileJobClass: return "compiler";
anatofuz
parents:
diff changeset
32 case BackendJobClass: return "backend";
anatofuz
parents:
diff changeset
33 case AssembleJobClass: return "assembler";
anatofuz
parents:
diff changeset
34 case IfsMergeJobClass: return "interface-stub-merger";
anatofuz
parents:
diff changeset
35 case LinkJobClass: return "linker";
anatofuz
parents:
diff changeset
36 case LipoJobClass: return "lipo";
anatofuz
parents:
diff changeset
37 case DsymutilJobClass: return "dsymutil";
anatofuz
parents:
diff changeset
38 case VerifyDebugInfoJobClass: return "verify-debug-info";
anatofuz
parents:
diff changeset
39 case VerifyPCHJobClass: return "verify-pch";
anatofuz
parents:
diff changeset
40 case OffloadBundlingJobClass:
anatofuz
parents:
diff changeset
41 return "clang-offload-bundler";
anatofuz
parents:
diff changeset
42 case OffloadUnbundlingJobClass:
anatofuz
parents:
diff changeset
43 return "clang-offload-unbundler";
anatofuz
parents:
diff changeset
44 case OffloadWrapperJobClass:
anatofuz
parents:
diff changeset
45 return "clang-offload-wrapper";
anatofuz
parents:
diff changeset
46 }
anatofuz
parents:
diff changeset
47
anatofuz
parents:
diff changeset
48 llvm_unreachable("invalid class");
anatofuz
parents:
diff changeset
49 }
anatofuz
parents:
diff changeset
50
anatofuz
parents:
diff changeset
51 void Action::propagateDeviceOffloadInfo(OffloadKind OKind, const char *OArch) {
anatofuz
parents:
diff changeset
52 // Offload action set its own kinds on their dependences.
anatofuz
parents:
diff changeset
53 if (Kind == OffloadClass)
anatofuz
parents:
diff changeset
54 return;
anatofuz
parents:
diff changeset
55 // Unbundling actions use the host kinds.
anatofuz
parents:
diff changeset
56 if (Kind == OffloadUnbundlingJobClass)
anatofuz
parents:
diff changeset
57 return;
anatofuz
parents:
diff changeset
58
anatofuz
parents:
diff changeset
59 assert((OffloadingDeviceKind == OKind || OffloadingDeviceKind == OFK_None) &&
anatofuz
parents:
diff changeset
60 "Setting device kind to a different device??");
anatofuz
parents:
diff changeset
61 assert(!ActiveOffloadKindMask && "Setting a device kind in a host action??");
anatofuz
parents:
diff changeset
62 OffloadingDeviceKind = OKind;
anatofuz
parents:
diff changeset
63 OffloadingArch = OArch;
anatofuz
parents:
diff changeset
64
anatofuz
parents:
diff changeset
65 for (auto *A : Inputs)
anatofuz
parents:
diff changeset
66 A->propagateDeviceOffloadInfo(OffloadingDeviceKind, OArch);
anatofuz
parents:
diff changeset
67 }
anatofuz
parents:
diff changeset
68
anatofuz
parents:
diff changeset
69 void Action::propagateHostOffloadInfo(unsigned OKinds, const char *OArch) {
anatofuz
parents:
diff changeset
70 // Offload action set its own kinds on their dependences.
anatofuz
parents:
diff changeset
71 if (Kind == OffloadClass)
anatofuz
parents:
diff changeset
72 return;
anatofuz
parents:
diff changeset
73
anatofuz
parents:
diff changeset
74 assert(OffloadingDeviceKind == OFK_None &&
anatofuz
parents:
diff changeset
75 "Setting a host kind in a device action.");
anatofuz
parents:
diff changeset
76 ActiveOffloadKindMask |= OKinds;
anatofuz
parents:
diff changeset
77 OffloadingArch = OArch;
anatofuz
parents:
diff changeset
78
anatofuz
parents:
diff changeset
79 for (auto *A : Inputs)
anatofuz
parents:
diff changeset
80 A->propagateHostOffloadInfo(ActiveOffloadKindMask, OArch);
anatofuz
parents:
diff changeset
81 }
anatofuz
parents:
diff changeset
82
anatofuz
parents:
diff changeset
83 void Action::propagateOffloadInfo(const Action *A) {
anatofuz
parents:
diff changeset
84 if (unsigned HK = A->getOffloadingHostActiveKinds())
anatofuz
parents:
diff changeset
85 propagateHostOffloadInfo(HK, A->getOffloadingArch());
anatofuz
parents:
diff changeset
86 else
anatofuz
parents:
diff changeset
87 propagateDeviceOffloadInfo(A->getOffloadingDeviceKind(),
anatofuz
parents:
diff changeset
88 A->getOffloadingArch());
anatofuz
parents:
diff changeset
89 }
anatofuz
parents:
diff changeset
90
anatofuz
parents:
diff changeset
91 std::string Action::getOffloadingKindPrefix() const {
anatofuz
parents:
diff changeset
92 switch (OffloadingDeviceKind) {
anatofuz
parents:
diff changeset
93 case OFK_None:
anatofuz
parents:
diff changeset
94 break;
anatofuz
parents:
diff changeset
95 case OFK_Host:
anatofuz
parents:
diff changeset
96 llvm_unreachable("Host kind is not an offloading device kind.");
anatofuz
parents:
diff changeset
97 break;
anatofuz
parents:
diff changeset
98 case OFK_Cuda:
anatofuz
parents:
diff changeset
99 return "device-cuda";
anatofuz
parents:
diff changeset
100 case OFK_OpenMP:
anatofuz
parents:
diff changeset
101 return "device-openmp";
anatofuz
parents:
diff changeset
102 case OFK_HIP:
anatofuz
parents:
diff changeset
103 return "device-hip";
anatofuz
parents:
diff changeset
104
anatofuz
parents:
diff changeset
105 // TODO: Add other programming models here.
anatofuz
parents:
diff changeset
106 }
anatofuz
parents:
diff changeset
107
anatofuz
parents:
diff changeset
108 if (!ActiveOffloadKindMask)
anatofuz
parents:
diff changeset
109 return {};
anatofuz
parents:
diff changeset
110
anatofuz
parents:
diff changeset
111 std::string Res("host");
anatofuz
parents:
diff changeset
112 assert(!((ActiveOffloadKindMask & OFK_Cuda) &&
anatofuz
parents:
diff changeset
113 (ActiveOffloadKindMask & OFK_HIP)) &&
anatofuz
parents:
diff changeset
114 "Cannot offload CUDA and HIP at the same time");
anatofuz
parents:
diff changeset
115 if (ActiveOffloadKindMask & OFK_Cuda)
anatofuz
parents:
diff changeset
116 Res += "-cuda";
anatofuz
parents:
diff changeset
117 if (ActiveOffloadKindMask & OFK_HIP)
anatofuz
parents:
diff changeset
118 Res += "-hip";
anatofuz
parents:
diff changeset
119 if (ActiveOffloadKindMask & OFK_OpenMP)
anatofuz
parents:
diff changeset
120 Res += "-openmp";
anatofuz
parents:
diff changeset
121
anatofuz
parents:
diff changeset
122 // TODO: Add other programming models here.
anatofuz
parents:
diff changeset
123
anatofuz
parents:
diff changeset
124 return Res;
anatofuz
parents:
diff changeset
125 }
anatofuz
parents:
diff changeset
126
anatofuz
parents:
diff changeset
127 /// Return a string that can be used as prefix in order to generate unique files
anatofuz
parents:
diff changeset
128 /// for each offloading kind.
anatofuz
parents:
diff changeset
129 std::string
anatofuz
parents:
diff changeset
130 Action::GetOffloadingFileNamePrefix(OffloadKind Kind,
anatofuz
parents:
diff changeset
131 StringRef NormalizedTriple,
anatofuz
parents:
diff changeset
132 bool CreatePrefixForHost) {
anatofuz
parents:
diff changeset
133 // Don't generate prefix for host actions unless required.
anatofuz
parents:
diff changeset
134 if (!CreatePrefixForHost && (Kind == OFK_None || Kind == OFK_Host))
anatofuz
parents:
diff changeset
135 return {};
anatofuz
parents:
diff changeset
136
anatofuz
parents:
diff changeset
137 std::string Res("-");
anatofuz
parents:
diff changeset
138 Res += GetOffloadKindName(Kind);
anatofuz
parents:
diff changeset
139 Res += "-";
anatofuz
parents:
diff changeset
140 Res += NormalizedTriple;
anatofuz
parents:
diff changeset
141 return Res;
anatofuz
parents:
diff changeset
142 }
anatofuz
parents:
diff changeset
143
anatofuz
parents:
diff changeset
144 /// Return a string with the offload kind name. If that is not defined, we
anatofuz
parents:
diff changeset
145 /// assume 'host'.
anatofuz
parents:
diff changeset
146 StringRef Action::GetOffloadKindName(OffloadKind Kind) {
anatofuz
parents:
diff changeset
147 switch (Kind) {
anatofuz
parents:
diff changeset
148 case OFK_None:
anatofuz
parents:
diff changeset
149 case OFK_Host:
anatofuz
parents:
diff changeset
150 return "host";
anatofuz
parents:
diff changeset
151 case OFK_Cuda:
anatofuz
parents:
diff changeset
152 return "cuda";
anatofuz
parents:
diff changeset
153 case OFK_OpenMP:
anatofuz
parents:
diff changeset
154 return "openmp";
anatofuz
parents:
diff changeset
155 case OFK_HIP:
anatofuz
parents:
diff changeset
156 return "hip";
anatofuz
parents:
diff changeset
157
anatofuz
parents:
diff changeset
158 // TODO: Add other programming models here.
anatofuz
parents:
diff changeset
159 }
anatofuz
parents:
diff changeset
160
anatofuz
parents:
diff changeset
161 llvm_unreachable("invalid offload kind");
anatofuz
parents:
diff changeset
162 }
anatofuz
parents:
diff changeset
163
anatofuz
parents:
diff changeset
164 void InputAction::anchor() {}
anatofuz
parents:
diff changeset
165
anatofuz
parents:
diff changeset
166 InputAction::InputAction(const Arg &_Input, types::ID _Type)
anatofuz
parents:
diff changeset
167 : Action(InputClass, _Type), Input(_Input) {}
anatofuz
parents:
diff changeset
168
anatofuz
parents:
diff changeset
169 void BindArchAction::anchor() {}
anatofuz
parents:
diff changeset
170
anatofuz
parents:
diff changeset
171 BindArchAction::BindArchAction(Action *Input, StringRef ArchName)
anatofuz
parents:
diff changeset
172 : Action(BindArchClass, Input), ArchName(ArchName) {}
anatofuz
parents:
diff changeset
173
anatofuz
parents:
diff changeset
174 void OffloadAction::anchor() {}
anatofuz
parents:
diff changeset
175
anatofuz
parents:
diff changeset
176 OffloadAction::OffloadAction(const HostDependence &HDep)
anatofuz
parents:
diff changeset
177 : Action(OffloadClass, HDep.getAction()), HostTC(HDep.getToolChain()) {
anatofuz
parents:
diff changeset
178 OffloadingArch = HDep.getBoundArch();
anatofuz
parents:
diff changeset
179 ActiveOffloadKindMask = HDep.getOffloadKinds();
anatofuz
parents:
diff changeset
180 HDep.getAction()->propagateHostOffloadInfo(HDep.getOffloadKinds(),
anatofuz
parents:
diff changeset
181 HDep.getBoundArch());
anatofuz
parents:
diff changeset
182 }
anatofuz
parents:
diff changeset
183
anatofuz
parents:
diff changeset
184 OffloadAction::OffloadAction(const DeviceDependences &DDeps, types::ID Ty)
anatofuz
parents:
diff changeset
185 : Action(OffloadClass, DDeps.getActions(), Ty),
anatofuz
parents:
diff changeset
186 DevToolChains(DDeps.getToolChains()) {
anatofuz
parents:
diff changeset
187 auto &OKinds = DDeps.getOffloadKinds();
anatofuz
parents:
diff changeset
188 auto &BArchs = DDeps.getBoundArchs();
anatofuz
parents:
diff changeset
189
anatofuz
parents:
diff changeset
190 // If all inputs agree on the same kind, use it also for this action.
anatofuz
parents:
diff changeset
191 if (llvm::all_of(OKinds, [&](OffloadKind K) { return K == OKinds.front(); }))
anatofuz
parents:
diff changeset
192 OffloadingDeviceKind = OKinds.front();
anatofuz
parents:
diff changeset
193
anatofuz
parents:
diff changeset
194 // If we have a single dependency, inherit the architecture from it.
anatofuz
parents:
diff changeset
195 if (OKinds.size() == 1)
anatofuz
parents:
diff changeset
196 OffloadingArch = BArchs.front();
anatofuz
parents:
diff changeset
197
anatofuz
parents:
diff changeset
198 // Propagate info to the dependencies.
anatofuz
parents:
diff changeset
199 for (unsigned i = 0, e = getInputs().size(); i != e; ++i)
anatofuz
parents:
diff changeset
200 getInputs()[i]->propagateDeviceOffloadInfo(OKinds[i], BArchs[i]);
anatofuz
parents:
diff changeset
201 }
anatofuz
parents:
diff changeset
202
anatofuz
parents:
diff changeset
203 OffloadAction::OffloadAction(const HostDependence &HDep,
anatofuz
parents:
diff changeset
204 const DeviceDependences &DDeps)
anatofuz
parents:
diff changeset
205 : Action(OffloadClass, HDep.getAction()), HostTC(HDep.getToolChain()),
anatofuz
parents:
diff changeset
206 DevToolChains(DDeps.getToolChains()) {
anatofuz
parents:
diff changeset
207 // We use the kinds of the host dependence for this action.
anatofuz
parents:
diff changeset
208 OffloadingArch = HDep.getBoundArch();
anatofuz
parents:
diff changeset
209 ActiveOffloadKindMask = HDep.getOffloadKinds();
anatofuz
parents:
diff changeset
210 HDep.getAction()->propagateHostOffloadInfo(HDep.getOffloadKinds(),
anatofuz
parents:
diff changeset
211 HDep.getBoundArch());
anatofuz
parents:
diff changeset
212
anatofuz
parents:
diff changeset
213 // Add device inputs and propagate info to the device actions. Do work only if
anatofuz
parents:
diff changeset
214 // we have dependencies.
anatofuz
parents:
diff changeset
215 for (unsigned i = 0, e = DDeps.getActions().size(); i != e; ++i)
anatofuz
parents:
diff changeset
216 if (auto *A = DDeps.getActions()[i]) {
anatofuz
parents:
diff changeset
217 getInputs().push_back(A);
anatofuz
parents:
diff changeset
218 A->propagateDeviceOffloadInfo(DDeps.getOffloadKinds()[i],
anatofuz
parents:
diff changeset
219 DDeps.getBoundArchs()[i]);
anatofuz
parents:
diff changeset
220 }
anatofuz
parents:
diff changeset
221 }
anatofuz
parents:
diff changeset
222
anatofuz
parents:
diff changeset
223 void OffloadAction::doOnHostDependence(const OffloadActionWorkTy &Work) const {
anatofuz
parents:
diff changeset
224 if (!HostTC)
anatofuz
parents:
diff changeset
225 return;
anatofuz
parents:
diff changeset
226 assert(!getInputs().empty() && "No dependencies for offload action??");
anatofuz
parents:
diff changeset
227 auto *A = getInputs().front();
anatofuz
parents:
diff changeset
228 Work(A, HostTC, A->getOffloadingArch());
anatofuz
parents:
diff changeset
229 }
anatofuz
parents:
diff changeset
230
anatofuz
parents:
diff changeset
231 void OffloadAction::doOnEachDeviceDependence(
anatofuz
parents:
diff changeset
232 const OffloadActionWorkTy &Work) const {
anatofuz
parents:
diff changeset
233 auto I = getInputs().begin();
anatofuz
parents:
diff changeset
234 auto E = getInputs().end();
anatofuz
parents:
diff changeset
235 if (I == E)
anatofuz
parents:
diff changeset
236 return;
anatofuz
parents:
diff changeset
237
anatofuz
parents:
diff changeset
238 // We expect to have the same number of input dependences and device tool
anatofuz
parents:
diff changeset
239 // chains, except if we also have a host dependence. In that case we have one
anatofuz
parents:
diff changeset
240 // more dependence than we have device tool chains.
anatofuz
parents:
diff changeset
241 assert(getInputs().size() == DevToolChains.size() + (HostTC ? 1 : 0) &&
anatofuz
parents:
diff changeset
242 "Sizes of action dependences and toolchains are not consistent!");
anatofuz
parents:
diff changeset
243
anatofuz
parents:
diff changeset
244 // Skip host action
anatofuz
parents:
diff changeset
245 if (HostTC)
anatofuz
parents:
diff changeset
246 ++I;
anatofuz
parents:
diff changeset
247
anatofuz
parents:
diff changeset
248 auto TI = DevToolChains.begin();
anatofuz
parents:
diff changeset
249 for (; I != E; ++I, ++TI)
anatofuz
parents:
diff changeset
250 Work(*I, *TI, (*I)->getOffloadingArch());
anatofuz
parents:
diff changeset
251 }
anatofuz
parents:
diff changeset
252
anatofuz
parents:
diff changeset
253 void OffloadAction::doOnEachDependence(const OffloadActionWorkTy &Work) const {
anatofuz
parents:
diff changeset
254 doOnHostDependence(Work);
anatofuz
parents:
diff changeset
255 doOnEachDeviceDependence(Work);
anatofuz
parents:
diff changeset
256 }
anatofuz
parents:
diff changeset
257
anatofuz
parents:
diff changeset
258 void OffloadAction::doOnEachDependence(bool IsHostDependence,
anatofuz
parents:
diff changeset
259 const OffloadActionWorkTy &Work) const {
anatofuz
parents:
diff changeset
260 if (IsHostDependence)
anatofuz
parents:
diff changeset
261 doOnHostDependence(Work);
anatofuz
parents:
diff changeset
262 else
anatofuz
parents:
diff changeset
263 doOnEachDeviceDependence(Work);
anatofuz
parents:
diff changeset
264 }
anatofuz
parents:
diff changeset
265
anatofuz
parents:
diff changeset
266 bool OffloadAction::hasHostDependence() const { return HostTC != nullptr; }
anatofuz
parents:
diff changeset
267
anatofuz
parents:
diff changeset
268 Action *OffloadAction::getHostDependence() const {
anatofuz
parents:
diff changeset
269 assert(hasHostDependence() && "Host dependence does not exist!");
anatofuz
parents:
diff changeset
270 assert(!getInputs().empty() && "No dependencies for offload action??");
anatofuz
parents:
diff changeset
271 return HostTC ? getInputs().front() : nullptr;
anatofuz
parents:
diff changeset
272 }
anatofuz
parents:
diff changeset
273
anatofuz
parents:
diff changeset
274 bool OffloadAction::hasSingleDeviceDependence(
anatofuz
parents:
diff changeset
275 bool DoNotConsiderHostActions) const {
anatofuz
parents:
diff changeset
276 if (DoNotConsiderHostActions)
anatofuz
parents:
diff changeset
277 return getInputs().size() == (HostTC ? 2 : 1);
anatofuz
parents:
diff changeset
278 return !HostTC && getInputs().size() == 1;
anatofuz
parents:
diff changeset
279 }
anatofuz
parents:
diff changeset
280
anatofuz
parents:
diff changeset
281 Action *
anatofuz
parents:
diff changeset
282 OffloadAction::getSingleDeviceDependence(bool DoNotConsiderHostActions) const {
anatofuz
parents:
diff changeset
283 assert(hasSingleDeviceDependence(DoNotConsiderHostActions) &&
anatofuz
parents:
diff changeset
284 "Single device dependence does not exist!");
anatofuz
parents:
diff changeset
285 // The previous assert ensures the number of entries in getInputs() is
anatofuz
parents:
diff changeset
286 // consistent with what we are doing here.
anatofuz
parents:
diff changeset
287 return HostTC ? getInputs()[1] : getInputs().front();
anatofuz
parents:
diff changeset
288 }
anatofuz
parents:
diff changeset
289
anatofuz
parents:
diff changeset
290 void OffloadAction::DeviceDependences::add(Action &A, const ToolChain &TC,
anatofuz
parents:
diff changeset
291 const char *BoundArch,
anatofuz
parents:
diff changeset
292 OffloadKind OKind) {
anatofuz
parents:
diff changeset
293 DeviceActions.push_back(&A);
anatofuz
parents:
diff changeset
294 DeviceToolChains.push_back(&TC);
anatofuz
parents:
diff changeset
295 DeviceBoundArchs.push_back(BoundArch);
anatofuz
parents:
diff changeset
296 DeviceOffloadKinds.push_back(OKind);
anatofuz
parents:
diff changeset
297 }
anatofuz
parents:
diff changeset
298
anatofuz
parents:
diff changeset
299 OffloadAction::HostDependence::HostDependence(Action &A, const ToolChain &TC,
anatofuz
parents:
diff changeset
300 const char *BoundArch,
anatofuz
parents:
diff changeset
301 const DeviceDependences &DDeps)
anatofuz
parents:
diff changeset
302 : HostAction(A), HostToolChain(TC), HostBoundArch(BoundArch) {
anatofuz
parents:
diff changeset
303 for (auto K : DDeps.getOffloadKinds())
anatofuz
parents:
diff changeset
304 HostOffloadKinds |= K;
anatofuz
parents:
diff changeset
305 }
anatofuz
parents:
diff changeset
306
anatofuz
parents:
diff changeset
307 void JobAction::anchor() {}
anatofuz
parents:
diff changeset
308
anatofuz
parents:
diff changeset
309 JobAction::JobAction(ActionClass Kind, Action *Input, types::ID Type)
anatofuz
parents:
diff changeset
310 : Action(Kind, Input, Type) {}
anatofuz
parents:
diff changeset
311
anatofuz
parents:
diff changeset
312 JobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type)
anatofuz
parents:
diff changeset
313 : Action(Kind, Inputs, Type) {}
anatofuz
parents:
diff changeset
314
anatofuz
parents:
diff changeset
315 void PreprocessJobAction::anchor() {}
anatofuz
parents:
diff changeset
316
anatofuz
parents:
diff changeset
317 PreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType)
anatofuz
parents:
diff changeset
318 : JobAction(PreprocessJobClass, Input, OutputType) {}
anatofuz
parents:
diff changeset
319
anatofuz
parents:
diff changeset
320 void PrecompileJobAction::anchor() {}
anatofuz
parents:
diff changeset
321
anatofuz
parents:
diff changeset
322 PrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType)
anatofuz
parents:
diff changeset
323 : JobAction(PrecompileJobClass, Input, OutputType) {}
anatofuz
parents:
diff changeset
324
anatofuz
parents:
diff changeset
325 PrecompileJobAction::PrecompileJobAction(ActionClass Kind, Action *Input,
anatofuz
parents:
diff changeset
326 types::ID OutputType)
anatofuz
parents:
diff changeset
327 : JobAction(Kind, Input, OutputType) {
anatofuz
parents:
diff changeset
328 assert(isa<PrecompileJobAction>((Action*)this) && "invalid action kind");
anatofuz
parents:
diff changeset
329 }
anatofuz
parents:
diff changeset
330
anatofuz
parents:
diff changeset
331 void HeaderModulePrecompileJobAction::anchor() {}
anatofuz
parents:
diff changeset
332
anatofuz
parents:
diff changeset
333 HeaderModulePrecompileJobAction::HeaderModulePrecompileJobAction(
anatofuz
parents:
diff changeset
334 Action *Input, types::ID OutputType, const char *ModuleName)
anatofuz
parents:
diff changeset
335 : PrecompileJobAction(HeaderModulePrecompileJobClass, Input, OutputType),
anatofuz
parents:
diff changeset
336 ModuleName(ModuleName) {}
anatofuz
parents:
diff changeset
337
anatofuz
parents:
diff changeset
338 void AnalyzeJobAction::anchor() {}
anatofuz
parents:
diff changeset
339
anatofuz
parents:
diff changeset
340 AnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType)
anatofuz
parents:
diff changeset
341 : JobAction(AnalyzeJobClass, Input, OutputType) {}
anatofuz
parents:
diff changeset
342
anatofuz
parents:
diff changeset
343 void MigrateJobAction::anchor() {}
anatofuz
parents:
diff changeset
344
anatofuz
parents:
diff changeset
345 MigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType)
anatofuz
parents:
diff changeset
346 : JobAction(MigrateJobClass, Input, OutputType) {}
anatofuz
parents:
diff changeset
347
anatofuz
parents:
diff changeset
348 void CompileJobAction::anchor() {}
anatofuz
parents:
diff changeset
349
anatofuz
parents:
diff changeset
350 CompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)
anatofuz
parents:
diff changeset
351 : JobAction(CompileJobClass, Input, OutputType) {}
anatofuz
parents:
diff changeset
352
anatofuz
parents:
diff changeset
353 void BackendJobAction::anchor() {}
anatofuz
parents:
diff changeset
354
anatofuz
parents:
diff changeset
355 BackendJobAction::BackendJobAction(Action *Input, types::ID OutputType)
anatofuz
parents:
diff changeset
356 : JobAction(BackendJobClass, Input, OutputType) {}
anatofuz
parents:
diff changeset
357
anatofuz
parents:
diff changeset
358 void AssembleJobAction::anchor() {}
anatofuz
parents:
diff changeset
359
anatofuz
parents:
diff changeset
360 AssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
anatofuz
parents:
diff changeset
361 : JobAction(AssembleJobClass, Input, OutputType) {}
anatofuz
parents:
diff changeset
362
anatofuz
parents:
diff changeset
363 void IfsMergeJobAction::anchor() {}
anatofuz
parents:
diff changeset
364
anatofuz
parents:
diff changeset
365 IfsMergeJobAction::IfsMergeJobAction(ActionList &Inputs, types::ID Type)
anatofuz
parents:
diff changeset
366 : JobAction(IfsMergeJobClass, Inputs, Type) {}
anatofuz
parents:
diff changeset
367
anatofuz
parents:
diff changeset
368 void LinkJobAction::anchor() {}
anatofuz
parents:
diff changeset
369
anatofuz
parents:
diff changeset
370 LinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
anatofuz
parents:
diff changeset
371 : JobAction(LinkJobClass, Inputs, Type) {}
anatofuz
parents:
diff changeset
372
anatofuz
parents:
diff changeset
373 void LipoJobAction::anchor() {}
anatofuz
parents:
diff changeset
374
anatofuz
parents:
diff changeset
375 LipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
anatofuz
parents:
diff changeset
376 : JobAction(LipoJobClass, Inputs, Type) {}
anatofuz
parents:
diff changeset
377
anatofuz
parents:
diff changeset
378 void DsymutilJobAction::anchor() {}
anatofuz
parents:
diff changeset
379
anatofuz
parents:
diff changeset
380 DsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
anatofuz
parents:
diff changeset
381 : JobAction(DsymutilJobClass, Inputs, Type) {}
anatofuz
parents:
diff changeset
382
anatofuz
parents:
diff changeset
383 void VerifyJobAction::anchor() {}
anatofuz
parents:
diff changeset
384
anatofuz
parents:
diff changeset
385 VerifyJobAction::VerifyJobAction(ActionClass Kind, Action *Input,
anatofuz
parents:
diff changeset
386 types::ID Type)
anatofuz
parents:
diff changeset
387 : JobAction(Kind, Input, Type) {
anatofuz
parents:
diff changeset
388 assert((Kind == VerifyDebugInfoJobClass || Kind == VerifyPCHJobClass) &&
anatofuz
parents:
diff changeset
389 "ActionClass is not a valid VerifyJobAction");
anatofuz
parents:
diff changeset
390 }
anatofuz
parents:
diff changeset
391
anatofuz
parents:
diff changeset
392 void VerifyDebugInfoJobAction::anchor() {}
anatofuz
parents:
diff changeset
393
anatofuz
parents:
diff changeset
394 VerifyDebugInfoJobAction::VerifyDebugInfoJobAction(Action *Input,
anatofuz
parents:
diff changeset
395 types::ID Type)
anatofuz
parents:
diff changeset
396 : VerifyJobAction(VerifyDebugInfoJobClass, Input, Type) {}
anatofuz
parents:
diff changeset
397
anatofuz
parents:
diff changeset
398 void VerifyPCHJobAction::anchor() {}
anatofuz
parents:
diff changeset
399
anatofuz
parents:
diff changeset
400 VerifyPCHJobAction::VerifyPCHJobAction(Action *Input, types::ID Type)
anatofuz
parents:
diff changeset
401 : VerifyJobAction(VerifyPCHJobClass, Input, Type) {}
anatofuz
parents:
diff changeset
402
anatofuz
parents:
diff changeset
403 void OffloadBundlingJobAction::anchor() {}
anatofuz
parents:
diff changeset
404
anatofuz
parents:
diff changeset
405 OffloadBundlingJobAction::OffloadBundlingJobAction(ActionList &Inputs)
anatofuz
parents:
diff changeset
406 : JobAction(OffloadBundlingJobClass, Inputs, Inputs.back()->getType()) {}
anatofuz
parents:
diff changeset
407
anatofuz
parents:
diff changeset
408 void OffloadUnbundlingJobAction::anchor() {}
anatofuz
parents:
diff changeset
409
anatofuz
parents:
diff changeset
410 OffloadUnbundlingJobAction::OffloadUnbundlingJobAction(Action *Input)
anatofuz
parents:
diff changeset
411 : JobAction(OffloadUnbundlingJobClass, Input, Input->getType()) {}
anatofuz
parents:
diff changeset
412
anatofuz
parents:
diff changeset
413 void OffloadWrapperJobAction::anchor() {}
anatofuz
parents:
diff changeset
414
anatofuz
parents:
diff changeset
415 OffloadWrapperJobAction::OffloadWrapperJobAction(ActionList &Inputs,
anatofuz
parents:
diff changeset
416 types::ID Type)
anatofuz
parents:
diff changeset
417 : JobAction(OffloadWrapperJobClass, Inputs, Type) {}