AscVF passes

-ascvf-eliminate-common-mask

Eliminates duplicate mask operations within VFGroupOp

Removes redundant UpdateMaskOp and CreateMaskOp operations inside VFGroupOp regions by replacing uses of duplicate masks with the first occurrence and deleting the duplicates.

-ascvf-eliminate-data-transfer

Eliminates redundant load/store operations in VFGroupOp

Performs three optimizations: eliminates loads after stores by replacing the loaded value with the stored value, removes stores that are immediately overwritten, and merges repeated loads from the same memory location.

-ascvf-find-vf-group

Finds and groups L2 operations into VFGroupOp for vector fusion

Identifies groups of fusible L2 operations (binary, unary, reduce, duplicate) that share the same calCount and element type, and wraps them into VFGroupOp operations for subsequent vector fusion optimization.

-ascvf-fuse-vf-for

Fuses consecutive VFForOp loops within VecScopeOp

Merges adjacent VFForOp loops into a single loop by copying operations from subsequent loops into the first loop, reducing loop overhead.

-ascvf-insert-local-mem-bar

Inserts local memory barriers between consecutive VFForOp loops

Inserts LocalMemBarOp operations between consecutive VFForOp loops within VFGroupOp to synchronize vector store and vector load operations, ensuring proper memory ordering for vector fusion execution.

-ascvf-lower-to-micro

Lowers L2 operations to micro-level operations with loops

Converts L2 operations (binary, unary, reduce, duplicate) into micro-level operations by wrapping them in VecScopeOp, creating VFForOp loops, allocating register tensors, and inserting load/store micro operations.

-ascvf-materialize-load-store

Materializes abstract load/store micro ops into data copy operations

Converts LoadMicroOp and StoreMicroOp operations into concrete data copy operations with physical addresses, creating LocalTensorGetPhyAddrV2Op and DataCopyLoadOp/DataCopyStoreOp operations.

-ascvf-reorder-ops-in-vec-scope

Hoists and reorders operations within VecScopeOp blocks

Reorders operations inside VecScopeOp blocks by moving constants, register tensors, variables, mask operations, and duplicate operations to the beginning in a specific order for better code generation.