clang 20.0.0git
Action.h
Go to the documentation of this file.
1//===- Action.h - Abstract compilation steps --------------------*- 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_DRIVER_ACTION_H
10#define LLVM_CLANG_DRIVER_ACTION_H
11
12#include "clang/Basic/LLVM.h"
13#include "clang/Driver/Types.h"
14#include "clang/Driver/Util.h"
15#include "llvm/ADT/ArrayRef.h"
16#include "llvm/ADT/STLExtras.h"
17#include "llvm/ADT/SmallVector.h"
18#include "llvm/ADT/StringRef.h"
19#include "llvm/ADT/iterator_range.h"
20#include <string>
21
22namespace llvm {
23namespace opt {
24
25class Arg;
26
27} // namespace opt
28} // namespace llvm
29
30namespace clang {
31namespace driver {
32
33class ToolChain;
34
35/// Action - Represent an abstract compilation step to perform.
36///
37/// An action represents an edge in the compilation graph; typically
38/// it is a job to transform an input using some tool.
39///
40/// The current driver is hard wired to expect actions which produce a
41/// single primary output, at least in terms of controlling the
42/// compilation. Actions can produce auxiliary files, but can only
43/// produce a single output to feed into subsequent actions.
44///
45/// Actions are usually owned by a Compilation, which creates new
46/// actions via MakeAction().
47class Action {
48public:
49 using size_type = ActionList::size_type;
50 using input_iterator = ActionList::iterator;
51 using input_const_iterator = ActionList::const_iterator;
52 using input_range = llvm::iterator_range<input_iterator>;
53 using input_const_range = llvm::iterator_range<input_const_iterator>;
54
79
82 };
83
84 // The offloading kind determines if this action is binded to a particular
85 // programming model. Each entry reserves one bit. We also have a special kind
86 // to designate the host offloading tool chain.
88 OFK_None = 0x00,
89
90 // The host offloading tool chain.
91 OFK_Host = 0x01,
92
93 // The device offloading tool chains - one bit for each programming model.
94 OFK_Cuda = 0x02,
95 OFK_OpenMP = 0x04,
96 OFK_HIP = 0x08,
97 OFK_SYCL = 0x10,
98 };
99
100 static const char *getClassName(ActionClass AC);
101
102private:
103 ActionClass Kind;
104
105 /// The output type of this action.
107
108 ActionList Inputs;
109
110 /// Flag that is set to true if this action can be collapsed with others
111 /// actions that depend on it. This is true by default and set to false when
112 /// the action is used by two different tool chains, which is enabled by the
113 /// offloading support implementation.
114 bool CanBeCollapsedWithNextDependentAction = true;
115
116protected:
117 ///
118 /// Offload information.
119 ///
120
121 /// The host offloading kind - a combination of kinds encoded in a mask.
122 /// Multiple programming models may be supported simultaneously by the same
123 /// host.
125
126 /// Offloading kind of the device.
128
129 /// The Offloading architecture associated with this action.
130 const char *OffloadingArch = nullptr;
131
132 /// The Offloading toolchain associated with this device action.
134
137 : Action(Kind, ActionList({Input}), Type) {}
139 : Action(Kind, ActionList({Input}), Input->getType()) {}
141 : Kind(Kind), Type(Type), Inputs(Inputs) {}
142
143public:
144 virtual ~Action();
145
146 const char *getClassName() const { return Action::getClassName(getKind()); }
147
148 ActionClass getKind() const { return Kind; }
149 types::ID getType() const { return Type; }
150
151 ActionList &getInputs() { return Inputs; }
152 const ActionList &getInputs() const { return Inputs; }
153
154 size_type size() const { return Inputs.size(); }
155
156 input_iterator input_begin() { return Inputs.begin(); }
157 input_iterator input_end() { return Inputs.end(); }
159 input_const_iterator input_begin() const { return Inputs.begin(); }
160 input_const_iterator input_end() const { return Inputs.end(); }
163 }
164
165 /// Mark this action as not legal to collapse.
167 CanBeCollapsedWithNextDependentAction = false;
168 }
169
170 /// Return true if this function can be collapsed with others.
172 return CanBeCollapsedWithNextDependentAction;
173 }
174
175 /// Return a string containing the offload kind of the action.
176 std::string getOffloadingKindPrefix() const;
177
178 /// Return a string that can be used as prefix in order to generate unique
179 /// files for each offloading kind. By default, no prefix is used for
180 /// non-device kinds, except if \a CreatePrefixForHost is set.
181 static std::string
183 StringRef NormalizedTriple,
184 bool CreatePrefixForHost = false);
185
186 /// Return a string containing a offload kind name.
187 static StringRef GetOffloadKindName(OffloadKind Kind);
188
189 /// Set the device offload info of this action and propagate it to its
190 /// dependences.
191 void propagateDeviceOffloadInfo(OffloadKind OKind, const char *OArch,
192 const ToolChain *OToolChain);
193
194 /// Append the host offload info of this action and propagate it to its
195 /// dependences.
196 void propagateHostOffloadInfo(unsigned OKinds, const char *OArch);
197
198 void setHostOffloadInfo(unsigned OKinds, const char *OArch) {
199 ActiveOffloadKindMask |= OKinds;
200 OffloadingArch = OArch;
201 }
202
203 /// Set the offload info of this action to be the same as the provided action,
204 /// and propagate it to its dependences.
205 void propagateOffloadInfo(const Action *A);
206
209 }
210
212 const char *getOffloadingArch() const { return OffloadingArch; }
214 return OffloadingToolChain;
215 }
216
217 /// Check if this action have any offload kinds. Note that host offload kinds
218 /// are only set if the action is a dependence to a host offload action.
219 bool isHostOffloading(unsigned int OKind) const {
220 return ActiveOffloadKindMask & OKind;
221 }
222 bool isDeviceOffloading(OffloadKind OKind) const {
223 return OffloadingDeviceKind == OKind;
224 }
225 bool isOffloading(OffloadKind OKind) const {
226 return isHostOffloading(OKind) || isDeviceOffloading(OKind);
227 }
228};
229
230class InputAction : public Action {
231 const llvm::opt::Arg &Input;
232 std::string Id;
233 virtual void anchor();
234
235public:
236 InputAction(const llvm::opt::Arg &Input, types::ID Type,
237 StringRef Id = StringRef());
238
239 const llvm::opt::Arg &getInputArg() const { return Input; }
240
241 void setId(StringRef _Id) { Id = _Id.str(); }
242 StringRef getId() const { return Id; }
243
244 static bool classof(const Action *A) {
245 return A->getKind() == InputClass;
246 }
247};
248
249class BindArchAction : public Action {
250 virtual void anchor();
251
252 /// The architecture to bind, or 0 if the default architecture
253 /// should be bound.
254 StringRef ArchName;
255
256public:
257 BindArchAction(Action *Input, StringRef ArchName);
258
259 StringRef getArchName() const { return ArchName; }
260
261 static bool classof(const Action *A) {
262 return A->getKind() == BindArchClass;
263 }
264};
265
266/// An offload action combines host or/and device actions according to the
267/// programming model implementation needs and propagates the offloading kind to
268/// its dependences.
269class OffloadAction final : public Action {
270 virtual void anchor();
271
272public:
273 /// Type used to communicate device actions. It associates bound architecture,
274 /// toolchain, and offload kind to each action.
275 class DeviceDependences final {
276 public:
280
281 private:
282 // Lists that keep the information for each dependency. All the lists are
283 // meant to be updated in sync. We are adopting separate lists instead of a
284 // list of structs, because that simplifies forwarding the actions list to
285 // initialize the inputs of the base Action class.
286
287 /// The dependence actions.
288 ActionList DeviceActions;
289
290 /// The offloading toolchains that should be used with the action.
291 ToolChainList DeviceToolChains;
292
293 /// The architectures that should be used with this action.
294 BoundArchList DeviceBoundArchs;
295
296 /// The offload kind of each dependence.
297 OffloadKindList DeviceOffloadKinds;
298
299 public:
300 /// Add an action along with the associated toolchain, bound arch, and
301 /// offload kind.
302 void add(Action &A, const ToolChain &TC, const char *BoundArch,
303 OffloadKind OKind);
304
305 /// Add an action along with the associated toolchain, bound arch, and
306 /// offload kinds.
307 void add(Action &A, const ToolChain &TC, const char *BoundArch,
308 unsigned OffloadKindMask);
309
310 /// Get each of the individual arrays.
311 const ActionList &getActions() const { return DeviceActions; }
312 const ToolChainList &getToolChains() const { return DeviceToolChains; }
313 const BoundArchList &getBoundArchs() const { return DeviceBoundArchs; }
315 return DeviceOffloadKinds;
316 }
317 };
318
319 /// Type used to communicate host actions. It associates bound architecture,
320 /// toolchain, and offload kinds to the host action.
321 class HostDependence final {
322 /// The dependence action.
323 Action &HostAction;
324
325 /// The offloading toolchain that should be used with the action.
326 const ToolChain &HostToolChain;
327
328 /// The architectures that should be used with this action.
329 const char *HostBoundArch = nullptr;
330
331 /// The offload kind of each dependence.
332 unsigned HostOffloadKinds = 0u;
333
334 public:
335 HostDependence(Action &A, const ToolChain &TC, const char *BoundArch,
336 const unsigned OffloadKinds)
337 : HostAction(A), HostToolChain(TC), HostBoundArch(BoundArch),
338 HostOffloadKinds(OffloadKinds) {}
339
340 /// Constructor version that obtains the offload kinds from the device
341 /// dependencies.
342 HostDependence(Action &A, const ToolChain &TC, const char *BoundArch,
343 const DeviceDependences &DDeps);
344 Action *getAction() const { return &HostAction; }
345 const ToolChain *getToolChain() const { return &HostToolChain; }
346 const char *getBoundArch() const { return HostBoundArch; }
347 unsigned getOffloadKinds() const { return HostOffloadKinds; }
348 };
349
351 llvm::function_ref<void(Action *, const ToolChain *, const char *)>;
352
353private:
354 /// The host offloading toolchain that should be used with the action.
355 const ToolChain *HostTC = nullptr;
356
357 /// The tool chains associated with the list of actions.
359
360public:
361 OffloadAction(const HostDependence &HDep);
362 OffloadAction(const DeviceDependences &DDeps, types::ID Ty);
363 OffloadAction(const HostDependence &HDep, const DeviceDependences &DDeps);
364
365 /// Execute the work specified in \a Work on the host dependence.
366 void doOnHostDependence(const OffloadActionWorkTy &Work) const;
367
368 /// Execute the work specified in \a Work on each device dependence.
369 void doOnEachDeviceDependence(const OffloadActionWorkTy &Work) const;
370
371 /// Execute the work specified in \a Work on each dependence.
372 void doOnEachDependence(const OffloadActionWorkTy &Work) const;
373
374 /// Execute the work specified in \a Work on each host or device dependence if
375 /// \a IsHostDependenceto is true or false, respectively.
376 void doOnEachDependence(bool IsHostDependence,
377 const OffloadActionWorkTy &Work) const;
378
379 /// Return true if the action has a host dependence.
380 bool hasHostDependence() const;
381
382 /// Return the host dependence of this action. This function is only expected
383 /// to be called if the host dependence exists.
384 Action *getHostDependence() const;
385
386 /// Return true if the action has a single device dependence. If \a
387 /// DoNotConsiderHostActions is set, ignore the host dependence, if any, while
388 /// accounting for the number of dependences.
389 bool hasSingleDeviceDependence(bool DoNotConsiderHostActions = false) const;
390
391 /// Return the single device dependence of this action. This function is only
392 /// expected to be called if a single device dependence exists. If \a
393 /// DoNotConsiderHostActions is set, a host dependence is allowed.
394 Action *
395 getSingleDeviceDependence(bool DoNotConsiderHostActions = false) const;
396
397 static bool classof(const Action *A) { return A->getKind() == OffloadClass; }
398};
399
400class JobAction : public Action {
401 virtual void anchor();
402
403protected:
405 JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type);
406
407public:
408 static bool classof(const Action *A) {
409 return (A->getKind() >= JobClassFirst &&
410 A->getKind() <= JobClassLast);
411 }
412};
413
415 void anchor() override;
416
417public:
418 PreprocessJobAction(Action *Input, types::ID OutputType);
419
420 static bool classof(const Action *A) {
421 return A->getKind() == PreprocessJobClass;
422 }
423};
424
426 void anchor() override;
427
428protected:
429 PrecompileJobAction(ActionClass Kind, Action *Input, types::ID OutputType);
430
431public:
432 PrecompileJobAction(Action *Input, types::ID OutputType);
433
434 static bool classof(const Action *A) {
435 return A->getKind() == PrecompileJobClass;
436 }
437};
438
440 void anchor() override;
441
442public:
443 ExtractAPIJobAction(Action *Input, types::ID OutputType);
444
445 static bool classof(const Action *A) {
446 return A->getKind() == ExtractAPIJobClass;
447 }
448
449 void addHeaderInput(Action *Input) { getInputs().push_back(Input); }
450};
451
453 void anchor() override;
454
455public:
456 AnalyzeJobAction(Action *Input, types::ID OutputType);
457
458 static bool classof(const Action *A) {
459 return A->getKind() == AnalyzeJobClass;
460 }
461};
462
464 void anchor() override;
465
466public:
467 MigrateJobAction(Action *Input, types::ID OutputType);
468
469 static bool classof(const Action *A) {
470 return A->getKind() == MigrateJobClass;
471 }
472};
473
475 void anchor() override;
476
477public:
478 CompileJobAction(Action *Input, types::ID OutputType);
479
480 static bool classof(const Action *A) {
481 return A->getKind() == CompileJobClass;
482 }
483};
484
486 void anchor() override;
487
488public:
489 BackendJobAction(Action *Input, types::ID OutputType);
490
491 static bool classof(const Action *A) {
492 return A->getKind() == BackendJobClass;
493 }
494};
495
497 void anchor() override;
498
499public:
500 AssembleJobAction(Action *Input, types::ID OutputType);
501
502 static bool classof(const Action *A) {
503 return A->getKind() == AssembleJobClass;
504 }
505};
506
508 void anchor() override;
509
510public:
512
513 static bool classof(const Action *A) {
514 return A->getKind() == IfsMergeJobClass;
515 }
516};
517
518class LinkJobAction : public JobAction {
519 void anchor() override;
520
521public:
523
524 static bool classof(const Action *A) {
525 return A->getKind() == LinkJobClass;
526 }
527};
528
529class LipoJobAction : public JobAction {
530 void anchor() override;
531
532public:
534
535 static bool classof(const Action *A) {
536 return A->getKind() == LipoJobClass;
537 }
538};
539
541 void anchor() override;
542
543public:
545
546 static bool classof(const Action *A) {
547 return A->getKind() == DsymutilJobClass;
548 }
549};
550
552 void anchor() override;
553
554public:
556
557 static bool classof(const Action *A) {
558 return A->getKind() == VerifyDebugInfoJobClass ||
560 }
561};
562
564 void anchor() override;
565
566public:
568
569 static bool classof(const Action *A) {
570 return A->getKind() == VerifyDebugInfoJobClass;
571 }
572};
573
575 void anchor() override;
576
577public:
579
580 static bool classof(const Action *A) {
581 return A->getKind() == VerifyPCHJobClass;
582 }
583};
584
586 void anchor() override;
587
588public:
589 // Offloading bundling doesn't change the type of output.
591
592 static bool classof(const Action *A) {
593 return A->getKind() == OffloadBundlingJobClass;
594 }
595};
596
598 void anchor() override;
599
600public:
601 /// Type that provides information about the actions that depend on this
602 /// unbundling action.
603 struct DependentActionInfo final {
604 /// The tool chain of the dependent action.
606
607 /// The bound architecture of the dependent action.
609
610 /// The offload kind of the dependent action.
612
614 StringRef DependentBoundArch,
619 };
620
621private:
622 /// Container that keeps information about each dependence of this unbundling
623 /// action.
624 SmallVector<DependentActionInfo, 6> DependentActionInfoArray;
625
626public:
627 // Offloading unbundling doesn't change the type of output.
629
630 /// Register information about a dependent action.
631 void registerDependentActionInfo(const ToolChain *TC, StringRef BoundArch,
632 OffloadKind Kind) {
633 DependentActionInfoArray.push_back({TC, BoundArch, Kind});
634 }
635
636 /// Return the information about all depending actions.
638 return DependentActionInfoArray;
639 }
640
641 static bool classof(const Action *A) {
642 return A->getKind() == OffloadUnbundlingJobClass;
643 }
644};
645
647 void anchor() override;
648
649public:
651
652 static bool classof(const Action *A) {
653 return A->getKind() == OffloadPackagerJobClass;
654 }
655};
656
658 void anchor() override;
659
660public:
662
663 static bool classof(const Action *A) {
664 return A->getKind() == LinkerWrapperJobClass;
665 }
666};
667
669 void anchor() override;
670
671public:
673
674 static bool classof(const Action *A) {
675 return A->getKind() == StaticLibJobClass;
676 }
677};
678
680 void anchor() override;
681
682public:
684
685 static bool classof(const Action *A) {
686 return A->getKind() == BinaryAnalyzeJobClass;
687 }
688};
689
690} // namespace driver
691} // namespace clang
692
693#endif // LLVM_CLANG_DRIVER_ACTION_H
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
uint32_t Id
Definition: SemaARM.cpp:1134
The base class of the type hierarchy.
Definition: Type.h:1828
Action - Represent an abstract compilation step to perform.
Definition: Action.h:47
void setHostOffloadInfo(unsigned OKinds, const char *OArch)
Definition: Action.h:198
input_const_iterator input_begin() const
Definition: Action.h:159
OffloadKind OffloadingDeviceKind
Offloading kind of the device.
Definition: Action.h:127
Action(ActionClass Kind, types::ID Type)
Definition: Action.h:135
const char * getOffloadingArch() const
Definition: Action.h:212
size_type size() const
Definition: Action.h:154
bool isCollapsingWithNextDependentActionLegal() const
Return true if this function can be collapsed with others.
Definition: Action.h:171
types::ID getType() const
Definition: Action.h:149
void setCannotBeCollapsedWithNextDependentAction()
Mark this action as not legal to collapse.
Definition: Action.h:166
std::string getOffloadingKindPrefix() const
Return a string containing the offload kind of the action.
Definition: Action.cpp:101
ActionList::size_type size_type
Definition: Action.h:49
void propagateDeviceOffloadInfo(OffloadKind OKind, const char *OArch, const ToolChain *OToolChain)
Set the device offload info of this action and propagate it to its dependences.
Definition: Action.cpp:58
const ToolChain * getOffloadingToolChain() const
Definition: Action.h:213
input_iterator input_end()
Definition: Action.h:157
const ToolChain * OffloadingToolChain
The Offloading toolchain associated with this device action.
Definition: Action.h:133
Action(ActionClass Kind, Action *Input, types::ID Type)
Definition: Action.h:136
static std::string GetOffloadingFileNamePrefix(OffloadKind Kind, StringRef NormalizedTriple, bool CreatePrefixForHost=false)
Return a string that can be used as prefix in order to generate unique files for each offloading kind...
Definition: Action.cpp:144
Action(ActionClass Kind, Action *Input)
Definition: Action.h:138
void propagateOffloadInfo(const Action *A)
Set the offload info of this action to be the same as the provided action, and propagate it to its de...
Definition: Action.cpp:92
const ActionList & getInputs() const
Definition: Action.h:152
ActionClass getKind() const
Definition: Action.h:148
ActionList::iterator input_iterator
Definition: Action.h:50
static StringRef GetOffloadKindName(OffloadKind Kind)
Return a string containing a offload kind name.
Definition: Action.cpp:160
input_const_range inputs() const
Definition: Action.h:161
const char * getClassName() const
Definition: Action.h:146
OffloadKind getOffloadingDeviceKind() const
Definition: Action.h:211
input_const_iterator input_end() const
Definition: Action.h:160
input_iterator input_begin()
Definition: Action.h:156
void propagateHostOffloadInfo(unsigned OKinds, const char *OArch)
Append the host offload info of this action and propagate it to its dependences.
Definition: Action.cpp:78
unsigned ActiveOffloadKindMask
Offload information.
Definition: Action.h:124
input_range inputs()
Definition: Action.h:158
Action(ActionClass Kind, const ActionList &Inputs, types::ID Type)
Definition: Action.h:140
bool isHostOffloading(unsigned int OKind) const
Check if this action have any offload kinds.
Definition: Action.h:219
bool isDeviceOffloading(OffloadKind OKind) const
Definition: Action.h:222
ActionList::const_iterator input_const_iterator
Definition: Action.h:51
const char * OffloadingArch
The Offloading architecture associated with this action.
Definition: Action.h:130
ActionList & getInputs()
Definition: Action.h:151
llvm::iterator_range< input_iterator > input_range
Definition: Action.h:52
llvm::iterator_range< input_const_iterator > input_const_range
Definition: Action.h:53
unsigned getOffloadingHostActiveKinds() const
Definition: Action.h:207
bool isOffloading(OffloadKind OKind) const
Definition: Action.h:225
static bool classof(const Action *A)
Definition: Action.h:458
static bool classof(const Action *A)
Definition: Action.h:502
static bool classof(const Action *A)
Definition: Action.h:491
static bool classof(const Action *A)
Definition: Action.h:685
static bool classof(const Action *A)
Definition: Action.h:261
StringRef getArchName() const
Definition: Action.h:259
static bool classof(const Action *A)
Definition: Action.h:480
static bool classof(const Action *A)
Definition: Action.h:546
static bool classof(const Action *A)
Definition: Action.h:445
void addHeaderInput(Action *Input)
Definition: Action.h:449
static bool classof(const Action *A)
Definition: Action.h:513
void setId(StringRef _Id)
Definition: Action.h:241
const llvm::opt::Arg & getInputArg() const
Definition: Action.h:239
static bool classof(const Action *A)
Definition: Action.h:244
StringRef getId() const
Definition: Action.h:242
static bool classof(const Action *A)
Definition: Action.h:408
static bool classof(const Action *A)
Definition: Action.h:524
static bool classof(const Action *A)
Definition: Action.h:663
static bool classof(const Action *A)
Definition: Action.h:535
static bool classof(const Action *A)
Definition: Action.h:469
Type used to communicate device actions.
Definition: Action.h:275
void add(Action &A, const ToolChain &TC, const char *BoundArch, OffloadKind OKind)
Add an action along with the associated toolchain, bound arch, and offload kind.
Definition: Action.cpp:312
const BoundArchList & getBoundArchs() const
Definition: Action.h:313
const OffloadKindList & getOffloadKinds() const
Definition: Action.h:314
const ActionList & getActions() const
Get each of the individual arrays.
Definition: Action.h:311
const ToolChainList & getToolChains() const
Definition: Action.h:312
Type used to communicate host actions.
Definition: Action.h:321
HostDependence(Action &A, const ToolChain &TC, const char *BoundArch, const unsigned OffloadKinds)
Definition: Action.h:335
const ToolChain * getToolChain() const
Definition: Action.h:345
An offload action combines host or/and device actions according to the programming model implementati...
Definition: Action.h:269
void doOnEachDependence(const OffloadActionWorkTy &Work) const
Execute the work specified in Work on each dependence.
Definition: Action.cpp:275
Action * getSingleDeviceDependence(bool DoNotConsiderHostActions=false) const
Return the single device dependence of this action.
Definition: Action.cpp:304
bool hasSingleDeviceDependence(bool DoNotConsiderHostActions=false) const
Return true if the action has a single device dependence.
Definition: Action.cpp:296
Action * getHostDependence() const
Return the host dependence of this action.
Definition: Action.cpp:290
llvm::function_ref< void(Action *, const ToolChain *, const char *)> OffloadActionWorkTy
Definition: Action.h:351
void doOnEachDeviceDependence(const OffloadActionWorkTy &Work) const
Execute the work specified in Work on each device dependence.
Definition: Action.cpp:253
bool hasHostDependence() const
Return true if the action has a host dependence.
Definition: Action.cpp:288
static bool classof(const Action *A)
Definition: Action.h:397
void doOnHostDependence(const OffloadActionWorkTy &Work) const
Execute the work specified in Work on the host dependence.
Definition: Action.cpp:245
static bool classof(const Action *A)
Definition: Action.h:592
static bool classof(const Action *A)
Definition: Action.h:652
static bool classof(const Action *A)
Definition: Action.h:641
void registerDependentActionInfo(const ToolChain *TC, StringRef BoundArch, OffloadKind Kind)
Register information about a dependent action.
Definition: Action.h:631
ArrayRef< DependentActionInfo > getDependentActionsInfo() const
Return the information about all depending actions.
Definition: Action.h:637
static bool classof(const Action *A)
Definition: Action.h:434
static bool classof(const Action *A)
Definition: Action.h:420
static bool classof(const Action *A)
Definition: Action.h:674
ToolChain - Access to tools for a single platform.
Definition: ToolChain.h:92
static bool classof(const Action *A)
Definition: Action.h:569
static bool classof(const Action *A)
Definition: Action.h:557
static bool classof(const Action *A)
Definition: Action.h:580
The JSON file list parser is used to communicate input to InstallAPI.
Diagnostic wrappers for TextAPI types for error reporting.
Definition: Dominators.h:30
Type that provides information about the actions that depend on this unbundling action.
Definition: Action.h:603
const OffloadKind DependentOffloadKind
The offload kind of the dependent action.
Definition: Action.h:611
DependentActionInfo(const ToolChain *DependentToolChain, StringRef DependentBoundArch, const OffloadKind DependentOffloadKind)
Definition: Action.h:613
StringRef DependentBoundArch
The bound architecture of the dependent action.
Definition: Action.h:608
const ToolChain * DependentToolChain
The tool chain of the dependent action.
Definition: Action.h:605