#include <flang/Optimizer/CodeGen/Target.h>
|
| enum class | IntegerExtension { None
, Zero
, Sign
} |
|
|
| Attributes (unsigned short alignment=0, bool byval=false, bool sret=false, bool append=false, IntegerExtension intExt=IntegerExtension::None, bool indirect=false) |
|
unsigned | getAlignment () const |
|
bool | hasAlignment () const |
|
bool | isByVal () const |
|
bool | isSRet () const |
| bool | isIndirect () const |
|
bool | isAppend () const |
|
bool | isZeroExt () const |
|
bool | isSignExt () const |
|
llvm::StringRef | getIntExtensionAttrName () const |
Extra information about how to marshal an argument or return value that modifies a signature per a particular ABI's calling convention. Note: llvm::Attribute is not used directly, because its use depends on an LLVMContext.
◆ isIndirect()
| bool fir::details::Attributes::isIndirect |
( |
| ) |
const |
|
inline |
The argument is passed indirectly: the caller materializes a copy of the aggregate and passes the address of that copy, which the ABI assigns to a register like any other pointer. Like byval this requires the caller to make a copy, but the pointer itself is the argument, so no llvm.byval attribute is attached and the target does not lower it as a by-value aggregate. Some ABIs (e.g. AAPCS64) require this form for aggregates that are too large to be passed in registers.
The documentation for this class was generated from the following files:
- include/flang/Optimizer/CodeGen/Target.h
- lib/Optimizer/CodeGen/Target.cpp