LLVM: llvm::LegalizeActions Namespace Reference (original) (raw)

Enumerations
enum LegalizeAction : std::uint8_t { Legal, NarrowScalar, WidenScalar, FewerElements, MoreElements, Bitcast, Lower, Libcall, Custom, Unsupported, NotFound, UseLegacyRules }

LegalizeAction

enum llvm::LegalizeActions::LegalizeAction : std::uint8_t

Enumerator
Legal The operation is expected to be selectable directly by the target, and no transformation is necessary.
NarrowScalar The operation should be synthesized from multiple instructions acting on a narrower scalar base-type. For example a 64-bit add might be implemented in terms of 32-bit add-with-carry.
WidenScalar The operation should be implemented in terms of a wider scalar base-type. For example a <2 x s8> add could be implemented as a <2 x s32> add (ignoring the high bits).
FewerElements The (vector) operation should be implemented by splitting it into sub-vectors where the operation is legal. For example a <8 x s64> add might be implemented as 4 separate <2 x s64> adds. There can be a leftover if there are not enough elements for last sub-vector e.g. <7 x s64> add will be implemented as 3 separate <2 x s64> adds and one s64 add. Leftover types can be avoided by doing MoreElements first.
MoreElements The (vector) operation should be implemented by widening the input vector and ignoring the lanes added by doing so. For example <2 x i8> is rarely legal, but you might perform an <8 x i8> and then only look at the first two results.
Bitcast Perform the operation on a different, but equivalently sized type.
Lower The operation itself must be expressed in terms of simpler actions on this target. E.g. a SREM replaced by an SDIV and subtraction.
Libcall The operation should be implemented as a call to some kind of runtime support library. For example this usually happens on machines that don't support floating-point operations natively.
Custom The target wants to do something special with this combination of operand and type. A callback will be issued when it is needed.
Unsupported This operation is completely unsupported on the target. A programming error has occurred.
NotFound Sentinel value for when no action was found in the specified table.
UseLegacyRules Fall back onto the old rules. TODO: Remove this once we've migrated

Definition at line 45 of file LegalizerInfo.h.