LLVM  14.0.0git
llvm::LegalizeActions Namespace Reference


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

Enumeration Type Documentation

◆ LegalizeAction


The operation is expected to be selectable directly by the target, and no transformation is necessary.


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.


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).


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.


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.


Perform the operation on a different, but equivalently sized type.


The operation itself must be expressed in terms of simpler actions on this target.

E.g. a SREM replaced by an SDIV and subtraction.


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.


The target wants to do something special with this combination of operand and type.

A callback will be issued when it is needed.


This operation is completely unsupported on the target.

A programming error has occurred.


Sentinel value for when no action was found in the specified table.


Fall back onto the old rules.

TODO: Remove this once we've migrated

Definition at line 44 of file LegalizerInfo.h.