Drive the analysis of interleaved memory accesses in the loop.

Synopsis

Declared in <llvm/Analysis/VectorUtils.h>

class InterleavedAccessInfo;

Description

Use this class to analyze interleaved accesses only when we can vectorize a loop. Otherwise it's meaningless to do analysis as the vectorization on interleaved accesses is unsafe.

The analysis collects interleave groups and records the relationships between the member and the group in a map.

Member Functions

Name

Description

InterleavedAccessInfo [constructor]

~InterleavedAccessInfo [destructor]

Destructor

analyzeInterleaving

Analyze the interleaved accesses and collect them in interleave groups. Substitute symbolic strides using Strides. Consider also predicated loads/stores in the analysis if EnableMaskedInterleavedGroup is true.

getInterleaveGroup

Get the interleave group that Instr belongs to.

getInterleaveGroups

hasGroups

Returns true if we have any interleave groups.

invalidateGroups

Invalidate groups, e.g., in case all blocks in loop will be predicated contrary to original assumption. Although we currently prevent group formation for predicated accesses, we may be able to relax this limitation in the future once we handle more complicated blocks. Returns true if any groups were invalidated.

invalidateGroupsRequiringScalarEpilogue

Invalidate groups that require a scalar epilogue (due to gaps). This can happen when optimizing for size forbids a scalar epilogue, and the gap cannot be filtered by masking the load/store.

isInterleaved

Check if Instr belongs to any interleave group.

requiresScalarEpilogue

Returns true if an interleaved group that may access memory out‐of‐bounds requires a scalar epilogue iteration for correctness.

Created with MrDocs