LLVM 19.0.0git
llvm::LegacyLegalizeActions Namespace Reference


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

Enumeration Type Documentation

◆ LegacyLegalizeAction


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.

Definition at line 28 of file LegacyLegalizerInfo.h.