// File: /workspace/github_cpp_makefile_star2_O3/fjamour[P]icentral/src/graph_t.cc
// Function: graph_t::insert_edge_update_bc_experimental(unsigned int, unsigned int, bcc_stat_t&, int, int)
void graph_t::insert_edge_update_bc_experimental(node_id_t src,
                          node_id_t dst,
                          bcc_stat_t& bcc_stat,
                          int max_iter_d1,
                          int max_iter_d2)
{
    /*
     * 1. edge must be in the graph so that bcc extraction works properly
     * 2. the subgraph in the bcc must not have the edge (done inside bcc_delta_t::compute_bc)
     */
    timer tm;//
    
    insert_edge(src, dst);    
    bcc_delta_t bcc;
    tm.start();//
    find_edge_bcc(bcc, src, dst);
    tm.stop();//
    bcc_stat.bcc_num_nodes = bcc.bcc_subgraph.nodes_map.size();
    bcc_stat.bcc_num_edges = bcc.bcc_subgraph.edge_set.size();
    bcc_stat.bcc_find_time = tm.interval();//
    tm.start();
    if(max_iter_d1 != -1 || max_iter_d2 != -1)
        bcc.compute_bc_maxiter_exp(bc_map, src, dst, bcc_stat, max_iter_d1, max_iter_d2);
    else
        bcc.compute_bc_exp(bc_map, src, dst, bcc_stat, max_iter_d1, max_iter_d2);
    tm.stop();//
    bcc_stat.bc_update_time = tm.interval();//
    
    bcc.bcc_subgraph.remove_edge(src, dst);
    bcc.bcc_subgraph.find_pruning_counts_exp(src, 
                        dst, bcc_stat.tot_d0_iter, 
                        bcc_stat.tot_d1_iter, 
                        bcc_stat.tot_d2_iter);
    bcc.bcc_subgraph.insert_edge(src, dst);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x518, %rsp            # imm = 0x518
movl %r9d, %r15d
movl %r8d, 0x24(%rsp)
movq %rcx, %r14
movl %edx, %ebx
movl %esi, %ebp
movq %rdi, %r12
callq 0x1dc86
leaq 0x1e(%rsp), %rax
movq %rax, 0x8(%rsp)
leaq 0x21(%rsp), %rax
movq %rax, (%rsp)
leaq 0x48(%rsp), %rdi
leaq 0x20(%rsp), %rdx
leaq 0x23(%rsp), %rcx
leaq 0x22(%rsp), %r8
leaq 0x1f(%rsp), %r9
movl $0xa, %esi
callq 0x6748
leaq 0x78(%rsp), %rdi
callq 0x152ae
leaq 0x320(%rsp), %rdi
callq 0x6192
leaq 0x28(%rsp), %rdi
xorl %esi, %esi
callq 0x2360
leaq 0x48(%rsp), %rsi
movq %r12, %rdi
movl %ebp, %edx
movl %ebx, %ecx
callq 0xeca6
leaq 0x38(%rsp), %r13
movq %r13, %rdi
xorl %esi, %esi
callq 0x2360
movl 0x90(%rsp), %eax
movl %eax, (%r14)
movl 0xd0(%rsp), %eax
movl %eax, 0x4(%r14)
cvtsi2sdq -0x10(%r13), %xmm0
cvtsi2sdq -0x8(%r13), %xmm1
movsd 0x11856(%rip), %xmm3    # 0x301a0
divsd %xmm3, %xmm1
addsd %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtsi2sdq (%r13), %xmm0
cvtsi2sdq 0x8(%r13), %xmm2
divsd %xmm3, %xmm2
addsd %xmm0, %xmm2
subsd %xmm1, %xmm2
movsd %xmm2, 0x38(%r14)
leaq 0x28(%rsp), %rdi
xorl %esi, %esi
callq 0x2360
movl %r15d, %eax
movl 0x24(%rsp), %r9d
andl %r9d, %eax
addq $0xd8, %r12
cmpl $-0x1, %eax
je 0x1e9b5
movl %r15d, (%rsp)
leaq 0x48(%rsp), %rdi
movq %r12, %rsi
movl %ebp, %edx
movl %ebx, %ecx
movq %r14, %r8
callq 0xfb68
leaq 0x78(%rsp), %r15
jmp 0x1e9db
movl $0xffffffff, (%rsp)     # imm = 0xFFFFFFFF
leaq 0x48(%rsp), %rdi
movq %r12, %rsi
movl %ebp, %edx
movl %ebx, %ecx
movq %r14, %r8
movl $0xffffffff, %r9d       # imm = 0xFFFFFFFF
callq 0xf7be
leaq 0x78(%rsp), %r15
movq %r13, %rdi
xorl %esi, %esi
callq 0x2360
xorps %xmm0, %xmm0
cvtsi2sdq 0x28(%rsp), %xmm0
xorps %xmm1, %xmm1
cvtsi2sdq 0x30(%rsp), %xmm1
movsd 0x1179f(%rip), %xmm3    # 0x301a0
divsd %xmm3, %xmm1
addsd %xmm0, %xmm1
xorps %xmm0, %xmm0
cvtsi2sdq 0x38(%rsp), %xmm0
xorps %xmm2, %xmm2
cvtsi2sdq 0x40(%rsp), %xmm2
divsd %xmm3, %xmm2
addsd %xmm0, %xmm2
subsd %xmm1, %xmm2
movsd %xmm2, 0x40(%r14)
movq %r15, %rdi
movl %ebp, %esi
movl %ebx, %edx
callq 0x1c416
leaq 0x50(%r14), %rcx
leaq 0x54(%r14), %r8
addq $0x58, %r14
movq %r15, %rdi
movl %ebp, %esi
movl %ebx, %edx
movq %r14, %r9
callq 0x1cf7e
movq %r15, %rdi
movl %ebp, %esi
movl %ebx, %edx
callq 0x1c320
leaq 0x320(%rsp), %rdi
callq 0x63d2
movq %r15, %rdi
callq 0x15650
leaq 0x48(%rsp), %rdi
callq 0x6858
addq $0x518, %rsp            # imm = 0x518
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
movq %rax, %rbx
leaq 0x78(%rsp), %rdi
callq 0x15650
jmp 0x1eaa5
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x6858
jmp 0x1eabe
movq %rax, %rbx
leaq 0x48(%rsp), %rdi
callq 0x1f7ac
movq %rbx, %rdi
callq 0x23b0