LLVM 19.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. 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.


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.