This solution is more intuitive than the current solution that only tests Vert x Edge intersections.
For greater control of the merged vertices, the weld_vert bmesh operator has been replaced and is no longer used by the function.
For organization, the BM_vert_weld_linked_wire_edges_into_linked_faces function was exposed in the header although not used by another file.
A new function for bmesh_core has also been created.: BM_vert_splice_collapse.
To profile the time, tests were done on a 2x subdivided Suzanne and a dense high poly object.
The most unfavorable time was to split all Suzanne edges by other diagonal-directed edges:
t1: AutoMerge Whithout Split;
t2: AutoMerge + Split;
fac: t1 / t2;
Here are the results:
|Split all edges:||t1||t2||fac|
|Extrude loose verts and split all suzanne edges diagonally:||0.028074||1.265841||0.022178|
|Split all suzanne edges:||0.015947||0.034728||0.459193|
|Move out suzanne verts:||0.015186||0.012769||1.189227|
|Merge single suzanne vert:||0.014985||0.012887||1.162742|
|Split single suzanne edge:||0.015110||0.012810||1.179504|
|Duplicate and move away verts of high poly mesh:||0.237419||0.230089||1.031855|