Style of tail folding used by the loop vectorizer.

Synopsis

Declared in <llvm/Analysis/TargetTransformInfo.h>

enum class TailFoldingStyle : int;

Members

Name

Description

None

Don't use tail folding

Data

Use predicate only to mask operations on data in the loop. When the VL is not known to be a power‐of‐2, this method requires a runtime overflow check for the i + VL in the loop because it compares the scalar induction variable against the tripcount rounded up by VL which may overflow. When the VL is a power‐of‐2, both the increment and uprounded tripcount will overflow to 0, which does not require a runtime check since the loop is exited when the loop induction variable equals the uprounded trip‐count, which are both 0.

DataWithoutLaneMask

Same as Data, but avoids using the get.active.lane.mask intrinsic to calculate the mask and instead implements this with a splat/stepvector/cmp. FIXME: Can this kind be removed now that SelectionDAGBuilder expands the active.lane.mask intrinsic when it is not natively supported?

DataAndControlFlow

Use predicate to control both data and control flow. This method always requires a runtime overflow check for the i + VL increment inside the loop, because it uses the result direclty in the active.lane.mask to calculate the mask for the next iteration. If the increment overflows, the mask is no longer correct.

DataWithEVL

Use predicated EVL instructions for tail‐folding. Indicates that VP intrinsics should be used.

Created with MrDocs