|
MLIR 24.0.0git
|
Describes how a single argument or return value is passed after ABI lowering. More...
#include "mlir/ABI/ABIRewriteContext.h"
Public Member Functions | |
| bool | isPassThrough () const |
| Whether the value is passed as-is, so a rewriter can leave it alone. | |
| bool | operator== (const ArgClassification &other) const |
| Whether two classifications describe the same wire format. | |
Static Public Member Functions | |
| static ArgClassification | getDirect (Type coerced=nullptr) |
| static ArgClassification | getIgnore () |
| static ArgClassification | getIndirect (llvm::Align align, bool byVal=true) |
| static ArgClassification | getExtend (Type coerced, bool signExt) |
Public Attributes | |
| ArgKind | kind = ArgKind::Direct |
| Type | coercedType = nullptr |
| The ABI-coerced type, if different from the original. | |
| llvm::Align | indirectAlign = llvm::Align(1) |
| For Indirect: alignment of the pointed-to object. | |
| bool | signExtend = false |
| For Extend: whether to sign-extend (true) or zero-extend (false). | |
| bool | canFlatten = true |
| For Direct: whether a struct coercion can be flattened into individual register-width arguments. | |
| bool | byVal = false |
| For Indirect: whether the callee gets ownership (byval). | |
Describes how a single argument or return value is passed after ABI lowering.
Definition at line 58 of file ABIRewriteContext.h.
|
inlinestatic |
Definition at line 93 of file ABIRewriteContext.h.
References coercedType, mlir::abi::Direct, and kind.
|
inlinestatic |
Definition at line 114 of file ABIRewriteContext.h.
References coercedType, mlir::abi::Extend, kind, and signExtend.
|
inlinestatic |
Definition at line 100 of file ABIRewriteContext.h.
References mlir::abi::Ignore, and kind.
|
inlinestatic |
Definition at line 106 of file ABIRewriteContext.h.
References byVal, mlir::abi::Indirect, indirectAlign, and kind.
|
inline |
Whether the value is passed as-is, so a rewriter can leave it alone.
Only an uncoerced Direct qualifies. Extend counts as needing a rewrite even though it only adds an attribute, because the attribute changes observable behavior.
Definition at line 82 of file ABIRewriteContext.h.
References coercedType, mlir::abi::Direct, and kind.
Referenced by mlir::abi::FunctionClassification::needsRewrite().
|
inline |
Whether two classifications describe the same wire format.
Every field participates, so a field added above must be added here as well.
Definition at line 86 of file ABIRewriteContext.h.
References byVal, canFlatten, coercedType, indirectAlign, kind, and signExtend.
For Indirect: whether the callee gets ownership (byval).
Definition at line 76 of file ABIRewriteContext.h.
Referenced by getIndirect(), and operator==().
For Direct: whether a struct coercion can be flattened into individual register-width arguments.
Definition at line 73 of file ABIRewriteContext.h.
Referenced by operator==().
The ABI-coerced type, if different from the original.
Null means use the original type.
Definition at line 63 of file ABIRewriteContext.h.
Referenced by getDirect(), getExtend(), isPassThrough(), and operator==().
| llvm::Align mlir::abi::ArgClassification::indirectAlign = llvm::Align(1) |
For Indirect: alignment of the pointed-to object.
Definition at line 66 of file ABIRewriteContext.h.
Referenced by getIndirect(), and operator==().
| ArgKind mlir::abi::ArgClassification::kind = ArgKind::Direct |
Definition at line 59 of file ABIRewriteContext.h.
Referenced by getDirect(), getExtend(), getIgnore(), getIndirect(), isPassThrough(), and operator==().
For Extend: whether to sign-extend (true) or zero-extend (false).
Definition at line 69 of file ABIRewriteContext.h.
Referenced by getExtend(), and operator==().