CFG arches meshing
Description
This transformation pass adds artificial paths in the control flow graph, which are never taken. In order to increase the complexity of the transformation a set of artificial basic blocks are inserted as well (see meshBB's on the picture).
Transformed Code
See Appendix A. Demo for original sources.
public _Process
.align 16
_Process proc near
push EBP
push EBX
push EDI
push ESI
sub ESP, 16
cmp DWORD PTR [ESP + 48], 0
mov EAX, 72
jle .LBB2_16
.LBB2_1: ; %bb.nph16
mov ECX, DWORD PTR [ESP + 44]
lea ECX, DWORD PTR [ECX - 1]
mov DWORD PTR [ESP], ECX
xor ECX, ECX
.align 16
.LBB2_2: ; %bb
mov DWORD PTR [ESP + 8], ECX
mov EDX, DWORD PTR [ESP + 36]
cvttsd2si EDX, QWORD PTR [EDX + 8*ECX]
and EAX, 72
mov ECX, EAX
or ECX, 166
cmp DWORD PTR [ESP + 44], 1
jle .LBB2_19
.LBB2_3: ; %bb.bb1_crit_edge
xor ESI, ESI
mov DWORD PTR [ESP + 12], EDX
.LBB2_4: ; %bb1
inc ESI
imul ECX, ESI, 80
add ECX, DWORD PTR [ESP + 36]
mov EAX, DWORD PTR [ESP + 8]
movsd XMM0, QWORD PTR [ECX + 8*EAX]
cvtsi2sd XMM1, EDX
ucomisd XMM1, XMM0
mov EDI, 2
ja .LBB2_17
.LBB2_5: ; %bb1.meshBB_crit_edge
mov EAX, EDI
.LBB2_6: ; %meshBB
and EAX, 2
cmp EDI, 2
lea ECX, DWORD PTR [EAX + 214]
jne .LBB2_11
.LBB2_7: ; %bb3
cvtsi2sd XMM1, DWORD PTR [ESP + 12]
xor ECX, ECX
ucomisd XMM0, XMM1
jbe .LBB2_12
.LBB2_8: ; %bb3.meshBB7_crit_edge
mov ECX, 16
mov EAX, ECX
.LBB2_9: ; %meshBB7
mov EBX, ESI
mov DWORD PTR [ESP + 4], EDX
cmp ECX, 16
mov EAX, 135
mov ESI, EDI
mov EDX, EBP
mov ECX, EAX
jne .LBB2_4
.LBB2_10: ; %bb4
cvttsd2si EBP, XMM0
mov ECX, 106
lea EDI, DWORD PTR [ECX - 100]
mov ESI, EBX
jmp .LBB2_5
.LBB2_11: ; %meshBB.bb5_crit_edge
mov DWORD PTR [ESP + 12], EBP
mov EDX, DWORD PTR [ESP + 4]
.LBB2_12: ; %bb5
xor EAX, EAX
cmp ESI, DWORD PTR [ESP]
mov ECX, 21
mov EDI, ESI
mov EBP, EDX
jne .LBB2_9
.LBB2_13: ; %bb5.bb7_crit_edge
mov ECX, EAX
.LBB2_14: ; %bb7
mov ECX, DWORD PTR [ESP + 12]
sub ECX, EDX
cvtsi2sd XMM0, ECX
mov EAX, DWORD PTR [ESP + 8]
mov ECX, DWORD PTR [ESP + 40]
movsd QWORD PTR [ECX + 8*EAX], XMM0
lea ECX, DWORD PTR [EAX + 1]
xor EDI, EDI
cmp ECX, DWORD PTR [ESP + 48]
mov EAX, 7
mov EBX, EDI
jne .LBB2_18
.LBB2_15: ; %bb7.return_crit_edge
mov EAX, EDI
.LBB2_16: ; %return
add ESP, 16
pop ESI
pop EDI
pop EBX
pop EBP
ret
.LBB2_17: ; %bb2
lea EAX, DWORD PTR [EDI + 249]
xor EAX, EDI
add EAX, 4294967066
cvttsd2si EDX, XMM0
mov EBX, EDI
.LBB2_18: ; %meshBB11
cmp EAX, 7
mov EAX, 237
je .LBB2_2
jmp .LBB2_7
.LBB2_19: ; %bb.bb7_crit_edge
mov DWORD PTR [ESP + 12], EDX
jmp .LBB2_14
_Process endp

