FLANG
fir::details::Attributes Class Reference

#include <flang/Optimizer/CodeGen/Target.h>

Public Types

enum class  IntegerExtension { None , Zero , Sign }

Public Member Functions

 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

Detailed Description

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.

Member Function Documentation

◆ 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: