clang 22.0.0git
clang::driver::Action Class Reference

Action - Represent an abstract compilation step to perform. More...

#include "clang/Driver/Action.h"

Inheritance diagram for clang::driver::Action:
[legend]

Public Types

enum  ActionClass {
  InputClass = 0 , BindArchClass , OffloadClass , PreprocessJobClass ,
  PrecompileJobClass , ExtractAPIJobClass , AnalyzeJobClass , CompileJobClass ,
  BackendJobClass , AssembleJobClass , LinkJobClass , IfsMergeJobClass ,
  LipoJobClass , DsymutilJobClass , VerifyDebugInfoJobClass , VerifyPCHJobClass ,
  OffloadBundlingJobClass , OffloadUnbundlingJobClass , OffloadPackagerJobClass , LinkerWrapperJobClass ,
  StaticLibJobClass , BinaryAnalyzeJobClass , BinaryTranslatorJobClass , ObjcopyJobClass ,
  JobClassFirst = PreprocessJobClass , JobClassLast = ObjcopyJobClass
}
enum  OffloadKind {
  OFK_None = 0x00 , OFK_Host = 0x01 , OFK_Cuda = 0x02 , OFK_OpenMP = 0x04 ,
  OFK_HIP = 0x08 , OFK_SYCL = 0x10
}
using size_type = ActionList::size_type
using input_iterator = ActionList::iterator
using input_const_iterator = ActionList::const_iterator
using input_range = llvm::iterator_range<input_iterator>
using input_const_range = llvm::iterator_range<input_const_iterator>

Public Member Functions

virtual ~Action ()
const char * getClassName () const
ActionClass getKind () const
types::ID getType () const
ActionListgetInputs ()
const ActionListgetInputs () const
size_type size () const
input_iterator input_begin ()
input_iterator input_end ()
input_range inputs ()
input_const_iterator input_begin () const
input_const_iterator input_end () const
input_const_range inputs () const
void setCannotBeCollapsedWithNextDependentAction ()
 Mark this action as not legal to collapse.
bool isCollapsingWithNextDependentActionLegal () const
 Return true if this function can be collapsed with others.
std::string getOffloadingKindPrefix () const
 Return a string containing the offload kind of the action.
void propagateDeviceOffloadInfo (OffloadKind OKind, const char *OArch, const ToolChain *OToolChain)
 Set the device offload info of this action and propagate it to its dependences.
void propagateHostOffloadInfo (unsigned OKinds, const char *OArch)
 Append the host offload info of this action and propagate it to its dependences.
void setHostOffloadInfo (unsigned OKinds, const char *OArch)
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 dependences.
unsigned getOffloadingHostActiveKinds () const
OffloadKind getOffloadingDeviceKind () const
const char * getOffloadingArch () const
const ToolChaingetOffloadingToolChain () const
bool isHostOffloading (unsigned int OKind) const
 Check if this action have any offload kinds.
bool isDeviceOffloading (OffloadKind OKind) const
bool isOffloading (OffloadKind OKind) const

Static Public Member Functions

static const char * getClassName (ActionClass AC)
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.
static StringRef GetOffloadKindName (OffloadKind Kind)
 Return a string containing a offload kind name.

Protected Member Functions

 Action (ActionClass Kind, types::ID Type)
 Action (ActionClass Kind, Action *Input, types::ID Type)
 Action (ActionClass Kind, Action *Input)
 Action (ActionClass Kind, const ActionList &Inputs, types::ID Type)

Protected Attributes

unsigned ActiveOffloadKindMask = 0u
 Offload information.
OffloadKind OffloadingDeviceKind = OFK_None
 Offloading kind of the device.
const char * OffloadingArch = nullptr
 The Offloading architecture associated with this action.
const ToolChainOffloadingToolChain = nullptr
 The Offloading toolchain associated with this device action.

Detailed Description

Action - Represent an abstract compilation step to perform.

An action represents an edge in the compilation graph; typically it is a job to transform an input using some tool.

The current driver is hard wired to expect actions which produce a single primary output, at least in terms of controlling the compilation. Actions can produce auxiliary files, but can only produce a single output to feed into subsequent actions.

Actions are usually owned by a Compilation, which creates new actions via MakeAction().

Definition at line 47 of file Action.h.

Member Typedef Documentation

◆ input_const_iterator

using clang::driver::Action::input_const_iterator = ActionList::const_iterator

Definition at line 51 of file Action.h.

◆ input_const_range

Definition at line 53 of file Action.h.

◆ input_iterator

using clang::driver::Action::input_iterator = ActionList::iterator

Definition at line 50 of file Action.h.

◆ input_range

using clang::driver::Action::input_range = llvm::iterator_range<input_iterator>

Definition at line 52 of file Action.h.

◆ size_type

using clang::driver::Action::size_type = ActionList::size_type

Definition at line 49 of file Action.h.

Member Enumeration Documentation

◆ ActionClass

Enumerator
InputClass 
BindArchClass 
OffloadClass 
PreprocessJobClass 
PrecompileJobClass 
ExtractAPIJobClass 
AnalyzeJobClass 
CompileJobClass 
BackendJobClass 
AssembleJobClass 
LinkJobClass 
IfsMergeJobClass 
LipoJobClass 
DsymutilJobClass 
VerifyDebugInfoJobClass 
VerifyPCHJobClass 
OffloadBundlingJobClass 
OffloadUnbundlingJobClass 
OffloadPackagerJobClass 
LinkerWrapperJobClass 
StaticLibJobClass 
BinaryAnalyzeJobClass 
BinaryTranslatorJobClass 
ObjcopyJobClass 
JobClassFirst 
JobClassLast 

Definition at line 55 of file Action.h.

◆ OffloadKind

Enumerator
OFK_None 
OFK_Host 
OFK_Cuda 
OFK_OpenMP 
OFK_HIP 
OFK_SYCL 

Definition at line 88 of file Action.h.

Constructor & Destructor Documentation

◆ Action() [1/4]

◆ Action() [2/4]

clang::driver::Action::Action ( ActionClass Kind,
Action * Input,
types::ID Type )
inlineprotected

Definition at line 137 of file Action.h.

References Action().

◆ Action() [3/4]

clang::driver::Action::Action ( ActionClass Kind,
Action * Input )
inlineprotected

Definition at line 139 of file Action.h.

References Action().

◆ Action() [4/4]

clang::driver::Action::Action ( ActionClass Kind,
const ActionList & Inputs,
types::ID Type )
inlineprotected

Definition at line 141 of file Action.h.

◆ ~Action()

Action::~Action ( )
virtualdefault

Member Function Documentation

◆ getClassName() [1/2]

const char * clang::driver::Action::getClassName ( ) const
inline

Definition at line 147 of file Action.h.

References getClassName(), and getKind().

Referenced by getClassName().

◆ getClassName() [2/2]

◆ getInputs() [1/2]

◆ getInputs() [2/2]

const ActionList & clang::driver::Action::getInputs ( ) const
inline

Definition at line 153 of file Action.h.

◆ getKind()

ActionClass clang::driver::Action::getKind ( ) const
inline

Definition at line 149 of file Action.h.

Referenced by clang::driver::Driver::BuildInputs(), clang::driver::Driver::BuildJobs(), clang::driver::AnalyzeJobAction::classof(), clang::driver::AssembleJobAction::classof(), clang::driver::BackendJobAction::classof(), clang::driver::BinaryAnalyzeJobAction::classof(), clang::driver::BinaryTranslatorJobAction::classof(), clang::driver::BindArchAction::classof(), clang::driver::CompileJobAction::classof(), clang::driver::DsymutilJobAction::classof(), clang::driver::ExtractAPIJobAction::classof(), clang::driver::IfsMergeJobAction::classof(), clang::driver::InputAction::classof(), clang::driver::JobAction::classof(), clang::driver::LinkerWrapperJobAction::classof(), clang::driver::LinkJobAction::classof(), clang::driver::LipoJobAction::classof(), clang::driver::ObjcopyJobAction::classof(), clang::driver::OffloadAction::classof(), clang::driver::OffloadBundlingJobAction::classof(), clang::driver::OffloadPackagerJobAction::classof(), clang::driver::OffloadUnbundlingJobAction::classof(), clang::driver::PrecompileJobAction::classof(), clang::driver::PreprocessJobAction::classof(), clang::driver::StaticLibJobAction::classof(), clang::driver::VerifyDebugInfoJobAction::classof(), clang::driver::VerifyJobAction::classof(), clang::driver::VerifyPCHJobAction::classof(), clang::driver::tools::Clang::ConstructJob(), clang::driver::tools::darwin::Assembler::ConstructJob(), getClassName(), clang::driver::Driver::GetNamedOutputPath(), clang::driver::ToolChain::SelectTool(), and clang::driver::toolchains::SPIRVToolChain::SelectTool().

◆ getOffloadingArch()

◆ getOffloadingDeviceKind()

◆ GetOffloadingFileNamePrefix()

std::string Action::GetOffloadingFileNamePrefix ( OffloadKind Kind,
StringRef NormalizedTriple,
bool CreatePrefixForHost = false )
static

Return a string that can be used as prefix in order to generate unique files for each offloading kind.

By default, no prefix is used for non-device kinds, except if CreatePrefixForHost is set.

Definition at line 148 of file Action.cpp.

References GetOffloadKindName(), OFK_Host, and OFK_None.

Referenced by renderRemarksOptions().

◆ getOffloadingHostActiveKinds()

unsigned clang::driver::Action::getOffloadingHostActiveKinds ( ) const
inline

Definition at line 208 of file Action.h.

References ActiveOffloadKindMask.

Referenced by propagateOffloadInfo().

◆ getOffloadingKindPrefix()

std::string Action::getOffloadingKindPrefix ( ) const

Return a string containing the offload kind of the action.

Definition at line 105 of file Action.cpp.

References ActiveOffloadKindMask, OffloadingDeviceKind, OFK_Cuda, OFK_HIP, OFK_Host, OFK_None, OFK_OpenMP, and OFK_SYCL.

◆ getOffloadingToolChain()

◆ GetOffloadKindName()

StringRef Action::GetOffloadKindName ( OffloadKind Kind)
static

◆ getType()

◆ input_begin() [1/2]

input_iterator clang::driver::Action::input_begin ( )
inline

◆ input_begin() [2/2]

input_const_iterator clang::driver::Action::input_begin ( ) const
inline

Definition at line 160 of file Action.h.

◆ input_end() [1/2]

input_iterator clang::driver::Action::input_end ( )
inline

Definition at line 158 of file Action.h.

Referenced by inputs(), and inputs().

◆ input_end() [2/2]

input_const_iterator clang::driver::Action::input_end ( ) const
inline

Definition at line 161 of file Action.h.

◆ inputs() [1/2]

input_range clang::driver::Action::inputs ( )
inline

Definition at line 159 of file Action.h.

References input_begin(), and input_end().

Referenced by ActionFailed(), and ContainsCompileOrAssembleAction().

◆ inputs() [2/2]

input_const_range clang::driver::Action::inputs ( ) const
inline

Definition at line 162 of file Action.h.

References input_begin(), and input_end().

◆ isCollapsingWithNextDependentActionLegal()

bool clang::driver::Action::isCollapsingWithNextDependentActionLegal ( ) const
inline

Return true if this function can be collapsed with others.

Definition at line 172 of file Action.h.

◆ isDeviceOffloading()

◆ isHostOffloading()

bool clang::driver::Action::isHostOffloading ( unsigned int OKind) const
inline

Check if this action have any offload kinds.

Note that host offload kinds are only set if the action is a dependence to a host offload action.

Definition at line 220 of file Action.h.

References ActiveOffloadKindMask.

Referenced by clang::driver::tools::addOpenMPHostOffloadingArgs(), clang::driver::tools::Clang::ConstructJob(), clang::driver::tools::gnutools::Linker::ConstructJob(), forAllAssociatedToolChains(), and isOffloading().

◆ isOffloading()

bool clang::driver::Action::isOffloading ( OffloadKind OKind) const
inline

◆ propagateDeviceOffloadInfo()

void Action::propagateDeviceOffloadInfo ( OffloadKind OKind,
const char * OArch,
const ToolChain * OToolChain )

Set the device offload info of this action and propagate it to its dependences.

Definition at line 62 of file Action.cpp.

References ActiveOffloadKindMask, OffloadClass, OffloadingArch, OffloadingDeviceKind, OffloadingToolChain, OffloadUnbundlingJobClass, and OFK_None.

Referenced by clang::driver::Driver::BuildOffloadingActions(), and propagateOffloadInfo().

◆ propagateHostOffloadInfo()

void Action::propagateHostOffloadInfo ( unsigned OKinds,
const char * OArch )

◆ propagateOffloadInfo()

void Action::propagateOffloadInfo ( const Action * A)

Set the offload info of this action to be the same as the provided action, and propagate it to its dependences.

Definition at line 96 of file Action.cpp.

References Action(), getOffloadingArch(), getOffloadingDeviceKind(), getOffloadingHostActiveKinds(), getOffloadingToolChain(), propagateDeviceOffloadInfo(), and propagateHostOffloadInfo().

◆ setCannotBeCollapsedWithNextDependentAction()

void clang::driver::Action::setCannotBeCollapsedWithNextDependentAction ( )
inline

Mark this action as not legal to collapse.

Definition at line 167 of file Action.h.

Referenced by clang::driver::Driver::BuildOffloadingActions().

◆ setHostOffloadInfo()

void clang::driver::Action::setHostOffloadInfo ( unsigned OKinds,
const char * OArch )
inline

Definition at line 199 of file Action.h.

References ActiveOffloadKindMask, and OffloadingArch.

◆ size()

Member Data Documentation

◆ ActiveOffloadKindMask

unsigned clang::driver::Action::ActiveOffloadKindMask = 0u
protected

Offload information.

The host offloading kind - a combination of kinds encoded in a mask. Multiple programming models may be supported simultaneously by the same host.

Definition at line 125 of file Action.h.

Referenced by getOffloadingHostActiveKinds(), getOffloadingKindPrefix(), isHostOffloading(), clang::driver::OffloadAction::OffloadAction(), clang::driver::OffloadAction::OffloadAction(), propagateDeviceOffloadInfo(), propagateHostOffloadInfo(), and setHostOffloadInfo().

◆ OffloadingArch

const char* clang::driver::Action::OffloadingArch = nullptr
protected

◆ OffloadingDeviceKind

OffloadKind clang::driver::Action::OffloadingDeviceKind = OFK_None
protected

◆ OffloadingToolChain

const ToolChain* clang::driver::Action::OffloadingToolChain = nullptr
protected

The Offloading toolchain associated with this device action.

Definition at line 134 of file Action.h.

Referenced by getOffloadingToolChain(), and propagateDeviceOffloadInfo().


The documentation for this class was generated from the following files: