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