LLVM 20.0.0git
Enumerations
llvm::LegalizeActions Namespace Reference

Enumerations

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

Enumeration Type Documentation

◆ LegalizeAction

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 44 of file LegalizerInfo.h.