original_code:
int umfpack_di_get_symbolic
(
    int *p_n_row,
    int *p_n_col,
    int *p_n1,
    int *p_nz,
    int *p_nfr,
    int *p_nchains,
    int P [ ],
    int Q [ ],
    int Front_npivcol [ ],
    int Front_parent [ ],
    int Front_1strow [ ],
    int Front_leftmostdesc [ ],
    int Chain_start [ ],
    int Chain_maxrows [ ],
    int Chain_maxcols [ ],
    void *SymbolicHandle
)
{
    SymbolicType *Symbolic ;
    int k, n_row, n_col, n1, nfr, nchains, *p ;
    Symbolic = (SymbolicType *) SymbolicHandle ;
    if (!umfdi_valid_symbolic (Symbolic))
    {
 return ((-4)) ;
    }
    n_row = Symbolic->n_row ;
    n_col = Symbolic->n_col ;
    n1 = Symbolic->n1 ;
    nfr = Symbolic->nfr ;
    nchains = Symbolic->nchains ;
    if (p_n_row)
    {
 *p_n_row = n_row ;
    }
    if (p_n_col)
    {
 *p_n_col = n_col ;
    }
    if (p_n1)
    {
 *p_n1 = n1 ;
    }
    if (p_nz)
    {
 *p_nz = Symbolic->nz ;
    }
    if (p_nfr)
    {
 *p_nfr = nfr ;
    }
    if (p_nchains)
    {
 *p_nchains = nchains ;
    }
    if (P != (int *) ((void *)0))
    {
 int *Rperm_init, *Diagonal_map ;
 Rperm_init = Symbolic->Rperm_init ;
 Diagonal_map = Symbolic->Diagonal_map ;
 if (Diagonal_map != (int *) ((void *)0))
 {
     ;
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [Diagonal_map [k]] ;
     }
 }
 else
 {
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [k] ;
     }
 }
    }
    if (Q != (int *) ((void *)0))
    {
 p = Symbolic->Cperm_init ;
 for (k = 0 ; k < n_col ; k++)
 {
     Q [k] = p [k] ;
 }
    }
    if (Front_npivcol != (int *) ((void *)0))
    {
 p = Symbolic->Front_npivcol ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_npivcol [k] = p [k] ;
 }
    }
    if (Front_parent != (int *) ((void *)0))
    {
 p = Symbolic->Front_parent ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_parent [k] = p [k] ;
 }
    }
    if (Front_1strow != (int *) ((void *)0))
    {
 p = Symbolic->Front_1strow ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_1strow [k] = p [k] ;
 }
    }
    if (Front_leftmostdesc != (int *) ((void *)0))
    {
 p = Symbolic->Front_leftmostdesc ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_leftmostdesc [k] = p [k] ;
 }
    }
    if (Chain_start != (int *) ((void *)0))
    {
 p = Symbolic->Chain_start ;
 for (k = 0 ; k <= nchains ; k++)
 {
     Chain_start [k] = p [k] ;
 }
    }
    if (Chain_maxrows != (int *) ((void *)0))
    {
 p = Symbolic->Chain_maxrows ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxrows [k] = p [k] ;
 }
 Chain_maxrows [nchains] = 0 ;
    }
    if (Chain_maxcols != (int *) ((void *)0))
    {
 p = Symbolic->Chain_maxcols ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxcols [k] = p [k] ;
 }
 Chain_maxcols [nchains] = 0 ;
    }
    return ((0)) ;
}

canonical_original_code:
int umfpack_di_get_symbolic(int *p_n_row, int *p_n_col, int *p_n1, int *p_nz, int *p_nfr, int *p_nchains, int P[], int Q[], int Front_npivcol[], int Front_parent[], int Front_1strow[], int Front_leftmostdesc[], int Chain_start[], int Chain_maxrows[], int Chain_maxcols[], void *SymbolicHandle)
{
    struct SymbolicType *Symbolic;
    int k; int n_row; int n_col; int n1; int nfr; int nchains; int *p;
    Symbolic = (struct SymbolicType *) SymbolicHandle ;
    if (!umfdi_valid_symbolic (Symbolic))
    {
 return ((-4)) ;
    }
    n_row = Symbolic->n_row ;
    n_col = Symbolic->n_col ;
    n1 = Symbolic->n1 ;
    nfr = Symbolic->nfr ;
    nchains = Symbolic->nchains ;
    if (p_n_row)
    {
 *p_n_row = n_row ;
    }
    if (p_n_col)
    {
 *p_n_col = n_col ;
    }
    if (p_n1)
    {
 *p_n1 = n1 ;
    }
    if (p_nz)
    {
 *p_nz = Symbolic->nz ;
    }
    if (p_nfr)
    {
 *p_nfr = nfr ;
    }
    if (p_nchains)
    {
 *p_nchains = nchains ;
    }
    if (P != (int *) ((void *)0))
    {
 int *Rperm_init; int *Diagonal_map;
 Rperm_init = Symbolic->Rperm_init ;
 Diagonal_map = Symbolic->Diagonal_map ;
 if (Diagonal_map != (int *) ((void *)0))
 {
     ;
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [Diagonal_map [k]] ;
     }
 }
 else
 {
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [k] ;
     }
 }
    }
    if (Q != (int *) ((void *)0))
    {
 p = Symbolic->Cperm_init ;
 for (k = 0 ; k < n_col ; k++)
 {
     Q [k] = p [k] ;
 }
    }
    if (Front_npivcol != (int *) ((void *)0))
    {
 p = Symbolic->Front_npivcol ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_npivcol [k] = p [k] ;
 }
    }
    if (Front_parent != (int *) ((void *)0))
    {
 p = Symbolic->Front_parent ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_parent [k] = p [k] ;
 }
    }
    if (Front_1strow != (int *) ((void *)0))
    {
 p = Symbolic->Front_1strow ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_1strow [k] = p [k] ;
 }
    }
    if (Front_leftmostdesc != (int *) ((void *)0))
    {
 p = Symbolic->Front_leftmostdesc ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_leftmostdesc [k] = p [k] ;
 }
    }
    if (Chain_start != (int *) ((void *)0))
    {
 p = Symbolic->Chain_start ;
 for (k = 0 ; k <= nchains ; k++)
 {
     Chain_start [k] = p [k] ;
 }
    }
    if (Chain_maxrows != (int *) ((void *)0))
    {
 p = Symbolic->Chain_maxrows ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxrows [k] = p [k] ;
 }
 Chain_maxrows [nchains] = 0 ;
    }
    if (Chain_maxcols != (int *) ((void *)0))
    {
 p = Symbolic->Chain_maxcols ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxcols [k] = p [k] ;
 }
 Chain_maxcols [nchains] = 0 ;
    }
    return ((0)) ;
}

variable_types:
P
int []

variable_types:
Q
int []

variable_types:
SymbolicHandle
void *

variable_types: struct SymbolicType { double num_mem_usage_est; int valid; } *

variable_types: k int

variable_types: nfr int

variable_types: nchains int

variable_types:
p
int *


original_code:
int
umfpack_zi_solve
(
    int sys,
    const int Ap [ ],
    const int Ai [ ],
    const double Ax [ ],
    const double Az [ ],
    double Xx [ ],
    double Xz [ ],
    const double Bx [ ],
    const double Bz [ ],
    void *NumericHandle,
    const double Control [20],
    double User_Info [90]
)
{
    double Info2 [90], stats [2] ;
    double *Info ;
    NumericType *Numeric ;
    int n, i, irstep, status ;
    int *Pattern, wsize ;
    double *W ;
    umfpack_tic (stats) ;
    irstep = ((Control != (double *) ((void *)0)) ? (((Control [7]) != (Control [7])) ? 2 : Control [7]) : 2) ;
    if (User_Info != (double *) ((void *)0))
    {
 Info = User_Info ;
 for (i = 80 ; i <= 85 ; i++)
 {
     Info [i] = (-1) ;
 }
    }
    else
    {
 Info = Info2 ;
 for (i = 0 ; i < 90 ; i++)
 {
     Info [i] = (-1) ;
 }
    }
    Info [0] = (0) ;
    Info [84] = 0 ;
    Numeric = (NumericType *) NumericHandle ;
    if (!umfzi_valid_numeric (Numeric))
    {
 Info [0] = (-3) ;
 return ((-3)) ;
    }
    Info [1] = Numeric->n_row ;
    Info [16] = Numeric->n_col ;
    if (Numeric->n_row != Numeric->n_col)
    {
 Info [0] = (-13) ;
 return ((-13)) ;
    }
    n = Numeric->n_row ;
    if (Numeric->nnzpiv < n
 || ((Numeric->rcond) == 0.) || ((Numeric->rcond) != (Numeric->rcond)))
    {
 irstep = 0 ;
    }
    if (!Xx || !Bx)
    {
 Info [0] = (-5) ;
 return ((-5)) ;
    }
    if (sys >= (3))
    {
 irstep = 0 ;
    }
    if (irstep > 0)
    {
 wsize = 10*n ;
    }
    else
    {
 wsize = 4*n ;
    }
    Pattern = (int *) umf_i_malloc (n, sizeof (int)) ;
    W = (double *) umf_i_malloc (wsize, sizeof (double)) ;
    if (!W || !Pattern)
    {
 ;
 Info [0] = (-1) ;
 (void) umf_i_free ((void *) W) ;
 (void) umf_i_free ((void *) Pattern) ;
 return ((-1)) ;
    }
    status = umfzi_solve (sys, Ap, Ai, Ax, Xx, Bx,
 Az, Xz, Bz,
 Numeric, irstep, Info, Pattern, W) ;
    (void) umf_i_free ((void *) W) ;
    (void) umf_i_free ((void *) Pattern) ;
    ;
    Info [0] = status ;
    if (status >= 0)
    {
 umfpack_toc (stats) ;
 Info [86] = stats [0] ;
 Info [85] = stats [1] ;
    }
    return (status) ;
}

canonical_original_code:
int umfpack_zi_solve(int sys, int Ap[], int Ai[], double Ax[], double Az[], double Xx[], double Xz[], double Bx[], double Bz[], void *NumericHandle, double Control[20], double User_Info[90])
{
    double Info2[90]; double stats[2];
    double *Info;
    struct NumericType *Numeric;
    int n; int i; int irstep; int status;
    int *Pattern; int wsize;
    double *W;
    umfpack_tic (stats) ;
    irstep = ((Control != (double *) ((void *)0)) ? (((Control [7]) != (Control [7])) ? 2 : Control [7]) : 2) ;
    if (User_Info != (double *) ((void *)0))
    {
 Info = User_Info ;
 for (i = 80 ; i <= 85 ; i++)
 {
     Info [i] = (-1) ;
 }
    }
    else
    {
 Info = Info2 ;
 for (i = 0 ; i < 90 ; i++)
 {
     Info [i] = (-1) ;
 }
    }
    Info [0] = (0) ;
    Info [84] = 0 ;
    Numeric = (struct NumericType *) NumericHandle ;
    if (!umfzi_valid_numeric (Numeric))
    {
 Info [0] = (-3) ;
 return ((-3)) ;
    }
    Info [1] = Numeric->n_row ;
    Info [16] = Numeric->n_col ;
    if (Numeric->n_row != Numeric->n_col)
    {
 Info [0] = (-13) ;
 return ((-13)) ;
    }
    n = Numeric->n_row ;
    if (Numeric->nnzpiv < n
 || ((Numeric->rcond) == 0.) || ((Numeric->rcond) != (Numeric->rcond)))
    {
 irstep = 0 ;
    }
    if (!Xx || !Bx)
    {
 Info [0] = (-5) ;
 return ((-5)) ;
    }
    if (sys >= (3))
    {
 irstep = 0 ;
    }
    if (irstep > 0)
    {
 wsize = 10*n ;
    }
    else
    {
 wsize = 4*n ;
    }
    Pattern = (int *) umf_i_malloc (n, sizeof (int)) ;
    W = (double *) umf_i_malloc (wsize, sizeof (double)) ;
    if (!W || !Pattern)
    {
 ;
 Info [0] = (-1) ;
 (void) umf_i_free ((void *) W) ;
 (void) umf_i_free ((void *) Pattern) ;
 return ((-1)) ;
    }
    status = umfzi_solve (sys, Ap, Ai, Ax, Xx, Bx,
 Az, Xz, Bz,
 Numeric, irstep, Info, Pattern, W) ;
    (void) umf_i_free ((void *) W) ;
    (void) umf_i_free ((void *) Pattern) ;
    ;
    Info [0] = status ;
    if (status >= 0)
    {
 umfpack_toc (stats) ;
 Info [86] = stats [0] ;
 Info [85] = stats [1] ;
    }
    return (status) ;
}

variable_types: sys int

variable_types:
Ap
int []

variable_types:
Ai
int []

variable_types:
Ax
double []

variable_types:
Az
double []

variable_types:
Xx
double []

variable_types:
Xz
double []

variable_types:
Bx
double []

variable_types:
Bz
double []

variable_types:
NumericHandle
void *

variable_types:
Control
double [20]

variable_types:
stats
double [2]

variable_types:
Info
double *

variable_types: struct NumericType { double flops; int scale; int valid; union Unit_union { struct { int size; } header; double xxxxxx; } *Memory; int ihead; int *Rperm; int ulen; struct DoubleComplex { double component[2]; } *D; int do_recip; double *Rs; int n_row; int tail_usage; int maxnrows; } *

variable_types: n int

variable_types: i int

variable_types: irstep int

variable_types: status int

variable_types:
Pattern
int *

variable_types: wsize int

variable_types:
W
double *

return_type: int

user_defined_types: struct NumericType { double flops; int scale; int valid; union Unit_union *Memory; int ihead; int *Rperm; int ulen; struct DoubleComplex *D; int do_recip; double *Rs; int n_row; int tail_usage; int maxnrows; }


decompiled_code:
__int64 __fastcall umfpack_zl_report_triplet(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int64 a6, double a7, double a8, double a9, double a10, __int64 a11, double *a12)
{
__int64 (*v12)(const char *, ...); // r9
bool v13; // r13
__int64 v14; // r14
__int64 v15; // r12
__int64 v16; // rbx
__int64 v17; // r13
__int64 v18; // rbp
double v19; // xmm0_8
double v20; // xmm1_8
unsigned __int64 v26; // [rsp+38h] [rbp-40h]

if ( !a12 )
return 0LL;
v26 = (unsigned int)(int)*a12;
if ( v26 <= 2 )
return 0LL;
v12 = amd_printf;
v13 = a5 == 0 || a4 == 0;
if ( amd_printf )
{
amd_printf("triplet-form matrix, n_row = %ld, n_col = %ld nz = %ld. ", a1, a2, a3);
if ( !v13 )
{
v12 = amd_printf;
if ( a1 > 0 && a2 > 0 )
{
if ( a3 >= 0 )
goto LABEL_8;
if ( amd_printf )
{
amd_printf("ERROR: nz is < 0\n\n");
return -8LL;
}
return -8LL;
}
if ( amd_printf )
{
amd_printf("ERROR: n_row or n_col is <= 0\n\n");
return -6LL;
}
return -6LL;
}
if ( amd_printf )
amd_printf("ERROR: indices not present\n\n");
return -5LL;
}
if ( v13 )
return -5LL;
if ( a2 > 0 && a1 > 0 )
{
if ( a3 >= 0 )
{
LABEL_8:
if ( v26 == 3 )
{
if ( !a3 )
{
LABEL_36:
if ( v12 )
v12("OK\n\n");
return 0LL;
}
}
else if ( v12 )
{
v12("\n");
v12 = amd_printf;
if ( !a3 )
goto LABEL_34;
}
else if ( !a3 )
{
return 0LL;
}
v14 = v26;
v15 = 1LL;
while ( 2 )
{
v16 = v15 - 1;
v17 = *(_QWORD *)(a4 + 8 * v15 - 8);
v18 = *(_QWORD *)(a5 + 8 * v15 - 8);
if ( v14 == 3 )
goto LABEL_26;
if ( v12 )
{
v12(" %ld : %ld %ld ", v15 - 1, *(_QWORD *)(a4 + 8 * v15 - 8), *(_QWORD *)(a5 + 8 * v15 - 8));
v12 = amd_printf;
}
if ( !a6 )
{
LABEL_24:
v12 = amd_printf;
if ( amd_printf )
{
amd_printf("\n");
v12 = amd_printf;
}
while ( 1 )
{
LABEL_26:
if ( v17 < 0 || v17 >= a1 || v18 < 0 || v18 >= a2 )
{
if ( v12 )
v12("ERROR: invalid triplet\n\n");
return -8LL;
}
if ( v14 != 4 || v16 != 9 )
break;
if ( a3 <= 10 )
goto LABEL_33;
if ( v12 )
{
v12(" ...\n");
v12 = amd_printf;
}
v16 = v15;
v14 = 3LL;
++v15;
v17 = *(_QWORD *)(a4 + 8 * v15 - 8);
v18 = *(_QWORD *)(a5 + 8 * v15 - 8);
}
if ( a3 > v15 )
{
++v15;
continue;
}
LABEL_33:
if ( v26 == 3 )
goto LABEL_36;
LABEL_34:
if ( v12 )
{
v12(" triplet-form matrix ");
v12 = amd_printf;
goto LABEL_36;
}
return 0LL;
}
break;
}
if ( a11 )
{
v19 = *(double *)(a6 + 8 * v15 - 8);
v20 = *(double *)(a11 + 8 * v15 - 8);
}
else
{
v19 = *(double *)(a6 + 16 * v15 - 16);
v20 = *(double *)(a6 + 16 * v15 - 8);
}
if ( v19 == 0.0 )
{
if ( !v12 )
goto LABEL_26;
v12(" (0");
v12 = amd_printf;
if ( v20 >= 0.0 )
{
LABEL_21:
if ( v20 == 0.0 )
{
if ( !v12 )
goto LABEL_26;
v12(" + 0i)", v19, v20, 0.0, a10, 0.0, 0.0);
}
else
{
if ( !v12 )
goto LABEL_26;
v12(" + %gi)", v20);
}
goto LABEL_24;
}
}
else
{
if ( !v12 )
goto LABEL_26;
v12(" (%g");
v12 = amd_printf;
if ( v20 >= 0.0 )
goto LABEL_21;
}
if ( !v12 )
goto LABEL_26;
v12(" - %gi)", COERCE_DOUBLE(*(_QWORD *)&v20 ^ LC9));
goto LABEL_24;
}
return -8LL;
}
return -6LL;
}

canonical_decompiled_code:
__int64 __fastcall func0(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int64 a6, double a7, double a8, double a9, double a10, __int64 a11, double *a12)
{
__int64 (*v12)(const char *, ...); // r9
bool v13; // r13
__int64 v14; // r14
__int64 v15; // r12
__int64 v16; // rbx
__int64 v17; // r13
__int64 v18; // rbp
double v19; // xmm0_8
double v20; // xmm1_8
unsigned __int64 v26; // [rsp+38h] [rbp-40h]

if ( !a12 )
return 0LL;
v26 = (unsigned int)(int)*a12;
if ( v26 <= 2 )
return 0LL;
v12 = amd_printf;
v13 = a5 == 0 || a4 == 0;
if ( amd_printf )
{
amd_printf("triplet-form matrix, n_row = %ld, n_col = %ld nz = %ld. ", a1, a2, a3);
if ( !v13 )
{
v12 = amd_printf;
if ( a1 > 0 && a2 > 0 )
{
if ( a3 >= 0 )
goto LABEL_8;
if ( amd_printf )
{
amd_printf("ERROR: nz is < 0\n\n");
return -8LL;
}
return -8LL;
}
if ( amd_printf )
{
amd_printf("ERROR: n_row or n_col is <= 0\n\n");
return -6LL;
}
return -6LL;
}
if ( amd_printf )
amd_printf("ERROR: indices not present\n\n");
return -5LL;
}
if ( v13 )
return -5LL;
if ( a2 > 0 && a1 > 0 )
{
if ( a3 >= 0 )
{
LABEL_8:
if ( v26 == 3 )
{
if ( !a3 )
{
LABEL_36:
if ( v12 )
v12("OK\n\n");
return 0LL;
}
}
else if ( v12 )
{
v12("\n");
v12 = amd_printf;
if ( !a3 )
goto LABEL_34;
}
else if ( !a3 )
{
return 0LL;
}
v14 = v26;
v15 = 1LL;
while ( 2 )
{
v16 = v15 - 1;
v17 = *(_QWORD *)(a4 + 8 * v15 - 8);
v18 = *(_QWORD *)(a5 + 8 * v15 - 8);
if ( v14 == 3 )
goto LABEL_26;
if ( v12 )
{
v12(" %ld : %ld %ld ", v15 - 1, *(_QWORD *)(a4 + 8 * v15 - 8), *(_QWORD *)(a5 + 8 * v15 - 8));
v12 = amd_printf;
}
if ( !a6 )
{
LABEL_24:
v12 = amd_printf;
if ( amd_printf )
{
amd_printf("\n");
v12 = amd_printf;
}
while ( 1 )
{
LABEL_26:
if ( v17 < 0 || v17 >= a1 || v18 < 0 || v18 >= a2 )
{
if ( v12 )
v12("ERROR: invalid triplet\n\n");
return -8LL;
}
if ( v14 != 4 || v16 != 9 )
break;
if ( a3 <= 10 )
goto LABEL_33;
if ( v12 )
{
v12(" ...\n");
v12 = amd_printf;
}
v16 = v15;
v14 = 3LL;
++v15;
v17 = *(_QWORD *)(a4 + 8 * v15 - 8);
v18 = *(_QWORD *)(a5 + 8 * v15 - 8);
}
if ( a3 > v15 )
{
++v15;
continue;
}
LABEL_33:
if ( v26 == 3 )
goto LABEL_36;
LABEL_34:
if ( v12 )
{
v12(" triplet-form matrix ");
v12 = amd_printf;
goto LABEL_36;
}
return 0LL;
}
break;
}
if ( a11 )
{
v19 = *(double *)(a6 + 8 * v15 - 8);
v20 = *(double *)(a11 + 8 * v15 - 8);
}
else
{
v19 = *(double *)(a6 + 16 * v15 - 16);
v20 = *(double *)(a6 + 16 * v15 - 8);
}
if ( v19 == 0.0 )
{
if ( !v12 )
goto LABEL_26;
v12(" (0");
v12 = amd_printf;
if ( v20 >= 0.0 )
{
LABEL_21:
if ( v20 == 0.0 )
{
if ( !v12 )
goto LABEL_26;
v12(" + 0i)", v19, v20, 0.0, a10, 0.0, 0.0);
}
else
{
if ( !v12 )
goto LABEL_26;
v12(" + %gi)", v20);
}
goto LABEL_24;
}
}
else
{
if ( !v12 )
goto LABEL_26;
v12(" (%g");
v12 = amd_printf;
if ( v20 >= 0.0 )
goto LABEL_21;
}
if ( !v12 )
goto LABEL_26;
v12(" - %gi)", COERCE_DOUBLE(*(_QWORD *)&v20 ^ LC9));
goto LABEL_24;
}
return -8LL;
}
return -6LL;
}

original_code:
long umfpack_zl_report_triplet
(
    long n_row,
    long n_col,
    long nz,
    const long Ti [ ],
    const long Tj [ ],
    const double Tx [ ],
    const double Tz [ ],
    const double Control [20]
)
{
    DoubleComplex t ;
    long prl, prl1, k, i, j, do_values ;
    long split = ((Tz) != (double *) ((void *)0)) ;
    prl = ((Control != (double *) ((void *)0)) ? (((Control [0]) != (Control [0])) ? 1 : Control [0]) : 1) ;
    if (prl <= 2)
    {
 return ((0)) ;
    }
    { if (amd_printf != ((void *)0)) (void) amd_printf ("triplet-form matrix, n_row = ""%" "ld"", n_col = ""%" "ld"" nz = ""%" "ld"". ", n_row, n_col, nz) ; } ;
    if (!Ti || !Tj)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: indices not present\n\n") ; } ;
 return ((-5)) ;
    }
    if (n_row <= 0 || n_col <= 0)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: n_row or n_col is <= 0\n\n") ; } ;
 return ((-6)) ;
    }
    if (nz < 0)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: nz is < 0\n\n") ; } ;
 return ((-8)) ;
    }
    { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("\n") ; } ; } } ;
    do_values = Tx != (double *) ((void *)0) ;
    prl1 = prl ;
    for (k = 0 ; k < nz ; k++)
    {
 i = Ti [k] ;
 j = Tj [k] ;
 { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("    ""%" "ld"" : ""%" "ld"" ""%" "ld"" ", (k), (i), (j)) ; } ; } } ;
 if (do_values && prl >= 4)
 {
     { if (split) { (t).component [0] = (Tx)[k] ; (t).component [1] = (Tz)[k] ; } else { (t) = ((DoubleComplex *)(Tx))[k] ; } } ;
     { if ((((t).component [0]) != 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" (%g", (t).component [0]) ; } ; } else { { if (amd_printf != ((void *)0)) (void) amd_printf (" (0") ; } ; } if ((((t).component [1]) < 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" - %gi)", -(t).component [1]) ; } ; } else if ((((t).component [1]) == 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" + 0i)") ; } ; } else { { if (amd_printf != ((void *)0)) (void) amd_printf (" + %gi)", (t).component [1]) ; } ; } } ;
 }
 { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("\n") ; } ; } } ;
 if (i < 0 || i >= n_row || j < 0 || j >= n_col)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: invalid triplet\n\n") ; } ;
     return ((-8)) ;
 }
 if (prl == 4 && k == 9 && nz > 10)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("    ...\n") ; } ;
     prl-- ;
 }
    }
    prl = prl1 ;
    { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("    triplet-form matrix ") ; } ; } } ;
    { if (amd_printf != ((void *)0)) (void) amd_printf ("OK\n\n") ; } ;
    return ((0)) ;
}

canonical_original_code:
long umfpack_zl_report_triplet(long n_row, long n_col, long nz, long Ti[], long Tj[], double Tx[], double Tz[], double Control[20])
{
    struct DoubleComplex t;
    long prl; long prl1; long k; long i; long j; long do_values;
    long split = ((Tz) != (double *) ((void *)0));
    prl = ((Control != (double *) ((void *)0)) ? (((Control [0]) != (Control [0])) ? 1 : Control [0]) : 1) ;
    if (prl <= 2)
    {
 return ((0)) ;
    }
    { if (amd_printf != ((void *)0)) (void) amd_printf ("triplet-form matrix, n_row = ""%" "ld"", n_col = ""%" "ld"" nz = ""%" "ld"". ", n_row, n_col, nz) ; } ;
    if (!Ti || !Tj)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: indices not present\n\n") ; } ;
 return ((-5)) ;
    }
    if (n_row <= 0 || n_col <= 0)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: n_row or n_col is <= 0\n\n") ; } ;
 return ((-6)) ;
    }
    if (nz < 0)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: nz is < 0\n\n") ; } ;
 return ((-8)) ;
    }
    { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("\n") ; } ; } } ;
    do_values = Tx != (double *) ((void *)0) ;
    prl1 = prl ;
    for (k = 0 ; k < nz ; k++)
    {
 i = Ti [k] ;
 j = Tj [k] ;
 { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("    ""%" "ld"" : ""%" "ld"" ""%" "ld"" ", (k), (i), (j)) ; } ; } } ;
 if (do_values && prl >= 4)
 {
     { if (split) { (t).component [0] = (Tx)[k] ; (t).component [1] = (Tz)[k] ; } else { (t) = ((struct DoubleComplex *)(Tx))[k] ; } } ;
     { if ((((t).component [0]) != 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" (%g", (t).component [0]) ; } ; } else { { if (amd_printf != ((void *)0)) (void) amd_printf (" (0") ; } ; } if ((((t).component [1]) < 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" - %gi)", -(t).component [1]) ; } ; } else if ((((t).component [1]) == 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" + 0i)") ; } ; } else { { if (amd_printf != ((void *)0)) (void) amd_printf (" + %gi)", (t).component [1]) ; } ; } } ;
 }
 { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("\n") ; } ; } } ;
 if (i < 0 || i >= n_row || j < 0 || j >= n_col)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: invalid triplet\n\n") ; } ;
     return ((-8)) ;
 }
 if (prl == 4 && k == 9 && nz > 10)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("    ...\n") ; } ;
     prl-- ;
 }
    }
    prl = prl1 ;
    { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("    triplet-form matrix ") ; } ; } } ;
    { if (amd_printf != ((void *)0)) (void) amd_printf ("OK\n\n") ; } ;
    return ((0)) ;
}

variable_types: nz long

variable_types:
Ti
long []

variable_types:
Tj
long []

variable_types:
Tx
double []

variable_types:
Tz
double []

variable_types: struct DoubleComplex { double component[2]; }

variable_types: prl long

variable_types: k long

variable_types: i long

variable_types: j long

variable_types: split long

return_type: long


decompiled_code:
__int64 __fastcall umf_l_malloc(signed __int64 a1, unsigned __int64 a2)
{
__int64 result; // rax

if ( a1 <= 0 )
a1 = 1LL;
if ( 0x7FFFFFFFFFFFFFFFLL / a2 < a1 )
result = 0LL;
else
result = amd_malloc(a2 * a1);
return result;
}

canonical_decompiled_code:
__int64 __fastcall func0(signed __int64 a1, unsigned __int64 a2)
{
__int64 result; // rax

if ( a1 <= 0 )
a1 = 1LL;
if ( 0x7FFFFFFFFFFFFFFFLL / a2 < a1 )
result = 0LL;
else
result = amd_malloc(a2 * a1);
return result;
}

original_code:
void *umf_l_malloc
(
    long n_objects,
    size_t size_of_object
)
{
    size_t size ;
    void *p ;
    ;
    n_objects = (((1) > (n_objects)) ? (1) : (n_objects)) ;
    size = (size_t) n_objects ;
    ;
    if (size > 0x7fffffffffffffffL / size_of_object)
    {
 return ((void *) ((void *)0)) ;
    }
    size *= size_of_object ;
    p = amd_malloc (size) ;
    ;
    return (p) ;
}

canonical_original_code:
void *umf_l_malloc(long n_objects, unsigned long size_of_object)
{
    unsigned long size;
    void *p;
    ;
    n_objects = (((1) > (n_objects)) ? (1) : (n_objects)) ;
    size = (unsigned long) n_objects ;
    ;
    if (size > 0x7fffffffffffffffL / size_of_object)
    {
 return ((void *) ((void *)0)) ;
    }
    size *= size_of_object ;
    p = amd_malloc (size) ;
    ;
    return (p) ;
}

variable_types:
size
unsigned long

variable_types:
p
void *

return_type: void *


original_code:
long umfpack_dl_get_symbolic
(
    long *p_n_row,
    long *p_n_col,
    long *p_n1,
    long *p_nz,
    long *p_nfr,
    long *p_nchains,
    long P [ ],
    long Q [ ],
    long Front_npivcol [ ],
    long Front_parent [ ],
    long Front_1strow [ ],
    long Front_leftmostdesc [ ],
    long Chain_start [ ],
    long Chain_maxrows [ ],
    long Chain_maxcols [ ],
    void *SymbolicHandle
)
{
    SymbolicType *Symbolic ;
    long k, n_row, n_col, n1, nfr, nchains, *p ;
    Symbolic = (SymbolicType *) SymbolicHandle ;
    if (!umfdl_valid_symbolic (Symbolic))
    {
 return ((-4)) ;
    }
    n_row = Symbolic->n_row ;
    n_col = Symbolic->n_col ;
    n1 = Symbolic->n1 ;
    nfr = Symbolic->nfr ;
    nchains = Symbolic->nchains ;
    if (p_n_row)
    {
 *p_n_row = n_row ;
    }
    if (p_n_col)
    {
 *p_n_col = n_col ;
    }
    if (p_n1)
    {
 *p_n1 = n1 ;
    }
    if (p_nz)
    {
 *p_nz = Symbolic->nz ;
    }
    if (p_nfr)
    {
 *p_nfr = nfr ;
    }
    if (p_nchains)
    {
 *p_nchains = nchains ;
    }
    if (P != (long *) ((void *)0))
    {
 long *Rperm_init, *Diagonal_map ;
 Rperm_init = Symbolic->Rperm_init ;
 Diagonal_map = Symbolic->Diagonal_map ;
 if (Diagonal_map != (long *) ((void *)0))
 {
     ;
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [Diagonal_map [k]] ;
     }
 }
 else
 {
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [k] ;
     }
 }
    }
    if (Q != (long *) ((void *)0))
    {
 p = Symbolic->Cperm_init ;
 for (k = 0 ; k < n_col ; k++)
 {
     Q [k] = p [k] ;
 }
    }
    if (Front_npivcol != (long *) ((void *)0))
    {
 p = Symbolic->Front_npivcol ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_npivcol [k] = p [k] ;
 }
    }
    if (Front_parent != (long *) ((void *)0))
    {
 p = Symbolic->Front_parent ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_parent [k] = p [k] ;
 }
    }
    if (Front_1strow != (long *) ((void *)0))
    {
 p = Symbolic->Front_1strow ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_1strow [k] = p [k] ;
 }
    }
    if (Front_leftmostdesc != (long *) ((void *)0))
    {
 p = Symbolic->Front_leftmostdesc ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_leftmostdesc [k] = p [k] ;
 }
    }
    if (Chain_start != (long *) ((void *)0))
    {
 p = Symbolic->Chain_start ;
 for (k = 0 ; k <= nchains ; k++)
 {
     Chain_start [k] = p [k] ;
 }
    }
    if (Chain_maxrows != (long *) ((void *)0))
    {
 p = Symbolic->Chain_maxrows ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxrows [k] = p [k] ;
 }
 Chain_maxrows [nchains] = 0 ;
    }
    if (Chain_maxcols != (long *) ((void *)0))
    {
 p = Symbolic->Chain_maxcols ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxcols [k] = p [k] ;
 }
 Chain_maxcols [nchains] = 0 ;
    }
    return ((0)) ;
}

canonical_original_code:
long umfpack_dl_get_symbolic(long *p_n_row, long *p_n_col, long *p_n1, long *p_nz, long *p_nfr, long *p_nchains, long P[], long Q[], long Front_npivcol[], long Front_parent[], long Front_1strow[], long Front_leftmostdesc[], long Chain_start[], long Chain_maxrows[], long Chain_maxcols[], void *SymbolicHandle)
{
    struct SymbolicType *Symbolic;
    long k; long n_row; long n_col; long n1; long nfr; long nchains; long *p;
    Symbolic = (struct SymbolicType *) SymbolicHandle ;
    if (!umfdl_valid_symbolic (Symbolic))
    {
 return ((-4)) ;
    }
    n_row = Symbolic->n_row ;
    n_col = Symbolic->n_col ;
    n1 = Symbolic->n1 ;
    nfr = Symbolic->nfr ;
    nchains = Symbolic->nchains ;
    if (p_n_row)
    {
 *p_n_row = n_row ;
    }
    if (p_n_col)
    {
 *p_n_col = n_col ;
    }
    if (p_n1)
    {
 *p_n1 = n1 ;
    }
    if (p_nz)
    {
 *p_nz = Symbolic->nz ;
    }
    if (p_nfr)
    {
 *p_nfr = nfr ;
    }
    if (p_nchains)
    {
 *p_nchains = nchains ;
    }
    if (P != (long *) ((void *)0))
    {
 long *Rperm_init; long *Diagonal_map;
 Rperm_init = Symbolic->Rperm_init ;
 Diagonal_map = Symbolic->Diagonal_map ;
 if (Diagonal_map != (long *) ((void *)0))
 {
     ;
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [Diagonal_map [k]] ;
     }
 }
 else
 {
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [k] ;
     }
 }
    }
    if (Q != (long *) ((void *)0))
    {
 p = Symbolic->Cperm_init ;
 for (k = 0 ; k < n_col ; k++)
 {
     Q [k] = p [k] ;
 }
    }
    if (Front_npivcol != (long *) ((void *)0))
    {
 p = Symbolic->Front_npivcol ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_npivcol [k] = p [k] ;
 }
    }
    if (Front_parent != (long *) ((void *)0))
    {
 p = Symbolic->Front_parent ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_parent [k] = p [k] ;
 }
    }
    if (Front_1strow != (long *) ((void *)0))
    {
 p = Symbolic->Front_1strow ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_1strow [k] = p [k] ;
 }
    }
    if (Front_leftmostdesc != (long *) ((void *)0))
    {
 p = Symbolic->Front_leftmostdesc ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_leftmostdesc [k] = p [k] ;
 }
    }
    if (Chain_start != (long *) ((void *)0))
    {
 p = Symbolic->Chain_start ;
 for (k = 0 ; k <= nchains ; k++)
 {
     Chain_start [k] = p [k] ;
 }
    }
    if (Chain_maxrows != (long *) ((void *)0))
    {
 p = Symbolic->Chain_maxrows ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxrows [k] = p [k] ;
 }
 Chain_maxrows [nchains] = 0 ;
    }
    if (Chain_maxcols != (long *) ((void *)0))
    {
 p = Symbolic->Chain_maxcols ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxcols [k] = p [k] ;
 }
 Chain_maxcols [nchains] = 0 ;
    }
    return ((0)) ;
}

variable_types:
P
long []

variable_types:
Q
long []

variable_types:
SymbolicHandle
void *

variable_types: struct SymbolicType { double num_mem_usage_est; long valid; } *

variable_types: nfr long

variable_types: nchains long

variable_types:
p
long *


decompiled_code:
__int64 __fastcall umfzl_report_vector(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int64 a6)
{
__int64 v11; // r15
__int64 v12; // rbx
__int64 v13; // rdi
__int64 v14; // r12
__int64 i; // rbx

if ( a4 <= 3 && a5 == 0 )
return 0LL;
if ( amd_printf )
{
amd_printf("dense vector, n = %ld. ", a1);
if ( !a5 )
{
LABEL_7:
if ( amd_printf )
amd_printf("\n");
goto LABEL_9;
}
}
else if ( !a5 )
{
LABEL_9:
if ( a4 == 4 )
{
v11 = 10LL;
if ( a1 <= 10 )
v11 = a1;
v12 = 0LL;
if ( a1 > 0 )
{
do
{
v13 = v12++;
print_value(v13, a2, a3, a6);
}
while ( v11 > v12 );
}
if ( a1 > v11 )
{
if ( amd_printf )
amd_printf(" ...\n");
print_value(a1 - 1, a2, a3, a6);
}
}
else if ( a4 > 4 && a1 > 0 )
{
for ( i = 0LL; i != a1; ++i )
print_value(i, a2, a3, a6);
}
if ( !amd_printf )
return 0LL;
amd_printf(" dense vector ");
goto LABEL_17;
}
if ( a2 )
{
if ( a1 >= 0 )
{
if ( a4 <= 3 )
{
LABEL_17:
if ( amd_printf )
amd_printf("OK\n\n");
return 0LL;
}
goto LABEL_7;
}
v14 = -6LL;
if ( amd_printf )
amd_printf("ERROR: length of vector is < 0\n\n");
}
else
{
v14 = -5LL;
if ( amd_printf )
amd_printf("ERROR: vector not present\n\n");
}
return v14;
}

canonical_decompiled_code:
__int64 __fastcall func1(__int64 a1, __int64 a2, __int64 a3, __int64 a4, __int64 a5, __int64 a6)
{
__int64 v11; // r15
__int64 v12; // rbx
__int64 v13; // rdi
__int64 v14; // r12
__int64 i; // rbx

if ( a4 <= 3 && a5 == 0 )
return 0LL;
if ( amd_printf )
{
amd_printf("dense vector, n = %ld. ", a1);
if ( !a5 )
{
LABEL_7:
if ( amd_printf )
amd_printf("\n");
goto LABEL_9;
}
}
else if ( !a5 )
{
LABEL_9:
if ( a4 == 4 )
{
v11 = 10LL;
if ( a1 <= 10 )
v11 = a1;
v12 = 0LL;
if ( a1 > 0 )
{
do
{
v13 = v12++;
func0(v13, a2, a3, a6);
}
while ( v11 > v12 );
}
if ( a1 > v11 )
{
if ( amd_printf )
amd_printf(" ...\n");
func0(a1 - 1, a2, a3, a6);
}
}
else if ( a4 > 4 && a1 > 0 )
{
for ( i = 0LL; i != a1; ++i )
func0(i, a2, a3, a6);
}
if ( !amd_printf )
return 0LL;
amd_printf(" dense vector ");
goto LABEL_17;
}
if ( a2 )
{
if ( a1 >= 0 )
{
if ( a4 <= 3 )
{
LABEL_17:
if ( amd_printf )
amd_printf("OK\n\n");
return 0LL;
}
goto LABEL_7;
}
v14 = -6LL;
if ( amd_printf )
amd_printf("ERROR: length of vector is < 0\n\n");
}
else
{
v14 = -5LL;
if ( amd_printf )
amd_printf("ERROR: vector not present\n\n");
}
return v14;
}

original_code:
long umfzl_report_vector
(
    long n,
    const double Xx [ ],
    const double Xz [ ],
    long prl,
    long user,
    long scalar
)
{
    long n2, i ;
    if (user || prl >= 4)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("dense vector, n = ""%" "ld"". ", n) ; } ;
    }
    if (user)
    {
 if (!Xx)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: vector not present\n\n") ; } ;
     return ((-5)) ;
 }
 if (n < 0)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: length of vector is < 0\n\n") ; } ;
     return ((-6)) ;
 }
    }
    if (user || prl >= 4)
    {
 { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("\n") ; } ; } } ;
    }
    if (prl == 4)
    {
 n2 = (((10) < (n)) ? (10) : (n)) ;
 for (i = 0 ; i < n2 ; i++)
 {
     print_value (i, Xx, Xz, scalar) ;
 }
 if (n2 < n)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("    ...\n") ; } ;
     print_value (n-1, Xx, Xz, scalar) ;
 }
    }
    else if (prl > 4)
    {
 for (i = 0 ; i < n ; i++)
 {
     print_value (i, Xx, Xz, scalar) ;
 }
    }
    { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("    dense vector ") ; } ; } } ;
    if (user || prl >= 4)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("OK\n\n") ; } ;
    }
    return ((0)) ;
}

canonical_original_code:
long umfzl_report_vector(long n, double Xx[], double Xz[], long prl, long user, long scalar)
{
    long n2; long i;
    if (user || prl >= 4)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("dense vector, n = ""%" "ld"". ", n) ; } ;
    }
    if (user)
    {
 if (!Xx)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: vector not present\n\n") ; } ;
     return ((-5)) ;
 }
 if (n < 0)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: length of vector is < 0\n\n") ; } ;
     return ((-6)) ;
 }
    }
    if (user || prl >= 4)
    {
 { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("\n") ; } ; } } ;
    }
    if (prl == 4)
    {
 n2 = (((10) < (n)) ? (10) : (n)) ;
 for (i = 0 ; i < n2 ; i++)
 {
     print_value (i, Xx, Xz, scalar) ;
 }
 if (n2 < n)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("    ...\n") ; } ;
     print_value (n-1, Xx, Xz, scalar) ;
 }
    }
    else if (prl > 4)
    {
 for (i = 0 ; i < n ; i++)
 {
     print_value (i, Xx, Xz, scalar) ;
 }
    }
    { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("    dense vector ") ; } ; } } ;
    if (user || prl >= 4)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("OK\n\n") ; } ;
    }
    return ((0)) ;
}

variable_types: n long

variable_types:
Xx
double []

variable_types:
Xz
double []

variable_types: user long

variable_types: scalar long


original_code:
int cholmod_l_amd
(
    cholmod_sparse *A,
    long *fset,
    size_t fsize,
    long *Perm,
    cholmod_common *Common
)
{
    double Info [20], Control2 [5], *Control ;
    long *Cp, *Len, *Nv, *Head, *Elen, *Degree, *Wi, *Iwork, *Next ;
    cholmod_sparse *C ;
    long j, n, cnz ;
    size_t s ;
    int ok = 1 ;
    { if (Common == ((void *)0)) { return (0) ; } if (Common->itype != 2 || Common->dtype != 0) { Common->status = (-4) ; return (0) ; } } ;
    { if ((A) == ((void *)0)) { if (Common->status != (-2)) { cholmod_l_error ((-4), "../Cholesky/cholmod_amd.c", 71, "argument missing", Common) ; } return (0) ; } } ;
    n = A->nrow ;
    { if ((Perm) == ((void *)0)) { if (Common->status != (-2)) { cholmod_l_error ((-4), "../Cholesky/cholmod_amd.c", 74, "argument missing", Common) ; } return (0) ; } } ;
    { if ((A)->xtype < (0) || (A)->xtype > (3) || ((A)->xtype != 0 && ((A)->x) == ((void *)0)) || ((A)->xtype == 3 && ((A)->z) == ((void *)0))) { if (Common->status != (-2)) { cholmod_l_error ((-4), "../Cholesky/cholmod_amd.c", 75, "invalid xtype", Common) ; } return (0) ; } } ;
    Common->status = 0 ;
    if (n == 0)
    {
 Common->fl = 0 ;
 Common->lnz = 0 ;
 Common->anz = 0 ;
 return (1) ;
    }
    s = cholmod_l_mult_size_t (n, 6, &ok) ;
    if (!ok)
    {
 cholmod_l_error ((-3), "../Cholesky/cholmod_amd.c", 99, "problem too large", Common) ;
 return (0) ;
    }
    s = (((s) > (A->ncol)) ? (s) : (A->ncol)) ;
    cholmod_l_allocate_work (n, s, 0, Common) ;
    if (Common->status < 0)
    {
 return (0) ;
    }
    Iwork = Common->Iwork ;
    Degree = Iwork ;
    Wi = Iwork + n ;
    Len = Iwork + 2*((size_t) n) ;
    Nv = Iwork + 3*((size_t) n) ;
    Next = Iwork + 4*((size_t) n) ;
    Elen = Iwork + 5*((size_t) n) ;
    Head = Common->Head ;
    if (A->stype == 0)
    {
 C = cholmod_l_aat (A, fset, fsize, -2, Common) ;
    }
    else
    {
 C = cholmod_l_copy (A, 0, -2, Common) ;
    }
    if (Common->status < 0)
    {
 return (0) ;
    }
    Cp = C->p ;
    for (j = 0 ; j < n ; j++)
    {
 Len [j] = Cp [j+1] - Cp [j] ;
    }
    cnz = Cp [n] ;
    Common->anz = cnz / 2 + n ;
    if (Common->current < 0 || Common->current >= 9)
    {
 Control = ((void *)0) ;
    }
    else
    {
 Control = Control2 ;
 Control [0] = Common->method [Common->current].prune_dense ;
 Control [1] = Common->method [Common->current].aggressive ;
    }
    amd_malloc = Common->malloc_memory ;
    amd_free = Common->free_memory ;
    amd_calloc = Common->calloc_memory ;
    amd_realloc = Common->realloc_memory ;
    amd_printf = Common->print_function ;
    amd_l2 (n, C->p, C->i, Len, C->nzmax, cnz, Nv, Next, Perm, Head, Elen,
     Degree, Wi, Control, Info) ;
    Common->fl = Info [10] + 2 * Info [11] + n ;
    Common->lnz = n + Info [9] ;
    ;
    cholmod_l_free_sparse (&C, Common) ;
    for (j = 0 ; j <= n ; j++)
    {
 Head [j] = (-1) ;
    }
    return (1) ;
}

canonical_original_code:
int cholmod_l_amd(struct cholmod_sparse_struct *A, long *fset, unsigned long fsize, long *Perm, struct cholmod_common_struct *Common)
{
    double Info[20]; double Control2[5]; double *Control;
    long *Cp; long *Len; long *Nv; long *Head; long *Elen; long *Degree; long *Wi; long *Iwork; long *Next;
    struct cholmod_sparse_struct *C;
    long j; long n; long cnz;
    unsigned long s;
    int ok = 1;
    { if (Common == ((void *)0)) { return (0) ; } if (Common->itype != 2 || Common->dtype != 0) { Common->status = (-4) ; return (0) ; } } ;
    { if ((A) == ((void *)0)) { if (Common->status != (-2)) { cholmod_l_error ((-4), "../Cholesky/cholmod_amd.c", 71, "argument missing", Common) ; } return (0) ; } } ;
    n = A->nrow ;
    { if ((Perm) == ((void *)0)) { if (Common->status != (-2)) { cholmod_l_error ((-4), "../Cholesky/cholmod_amd.c", 74, "argument missing", Common) ; } return (0) ; } } ;
    { if ((A)->xtype < (0) || (A)->xtype > (3) || ((A)->xtype != 0 && ((A)->x) == ((void *)0)) || ((A)->xtype == 3 && ((A)->z) == ((void *)0))) { if (Common->status != (-2)) { cholmod_l_error ((-4), "../Cholesky/cholmod_amd.c", 75, "invalid xtype", Common) ; } return (0) ; } } ;
    Common->status = 0 ;
    if (n == 0)
    {
 Common->fl = 0 ;
 Common->lnz = 0 ;
 Common->anz = 0 ;
 return (1) ;
    }
    s = cholmod_l_mult_size_t (n, 6, &ok) ;
    if (!ok)
    {
 cholmod_l_error ((-3), "../Cholesky/cholmod_amd.c", 99, "problem too large", Common) ;
 return (0) ;
    }
    s = (((s) > (A->ncol)) ? (s) : (A->ncol)) ;
    cholmod_l_allocate_work (n, s, 0, Common) ;
    if (Common->status < 0)
    {
 return (0) ;
    }
    Iwork = Common->Iwork ;
    Degree = Iwork ;
    Wi = Iwork + n ;
    Len = Iwork + 2*((unsigned long) n) ;
    Nv = Iwork + 3*((unsigned long) n) ;
    Next = Iwork + 4*((unsigned long) n) ;
    Elen = Iwork + 5*((unsigned long) n) ;
    Head = Common->Head ;
    if (A->stype == 0)
    {
 C = cholmod_l_aat (A, fset, fsize, -2, Common) ;
    }
    else
    {
 C = cholmod_l_copy (A, 0, -2, Common) ;
    }
    if (Common->status < 0)
    {
 return (0) ;
    }
    Cp = C->p ;
    for (j = 0 ; j < n ; j++)
    {
 Len [j] = Cp [j+1] - Cp [j] ;
    }
    cnz = Cp [n] ;
    Common->anz = cnz / 2 + n ;
    if (Common->current < 0 || Common->current >= 9)
    {
 Control = ((void *)0) ;
    }
    else
    {
 Control = Control2 ;
 Control [0] = Common->method [Common->current].prune_dense ;
 Control [1] = Common->method [Common->current].aggressive ;
    }
    amd_malloc = Common->malloc_memory ;
    amd_free = Common->free_memory ;
    amd_calloc = Common->calloc_memory ;
    amd_realloc = Common->realloc_memory ;
    amd_printf = Common->print_function ;
    amd_l2 (n, C->p, C->i, Len, C->nzmax, cnz, Nv, Next, Perm, Head, Elen,
     Degree, Wi, Control, Info) ;
    Common->fl = Info [10] + 2 * Info [11] + n ;
    Common->lnz = n + Info [9] ;
    ;
    cholmod_l_free_sparse (&C, Common) ;
    for (j = 0 ; j <= n ; j++)
    {
 Head [j] = (-1) ;
    }
    return (1) ;
}

variable_types: struct cholmod_sparse_struct { unsigned long nrow; unsigned long ncol; unsigned long nzmax; void *p; void *i; void *nz; void *x; void *z; int stype; int itype; int xtype; int dtype; int sorted; int packed; } *

variable_types:
fset
long *

variable_types:
fsize
unsigned long

variable_types:
Perm
long *

variable_types: struct cholmod_common_struct { double dbound; double grow0; double grow1; unsigned long grow2; unsigned long maxrank; double supernodal_switch; int supernodal; int final_asis; int final_super; int final_ll; int final_pack; int final_monotonic; int final_resymbol; double zrelax[3]; unsigned long nrelax[3]; int prefer_zomplex; int prefer_upper; int quick_return_if_not_posdef; int print; int precise; int (*print_function)(char *, ...); int try_catch; void (*error_handler)(int status, char *file, int line, char *message); int nmethods; int current; int selected; struct cholmod_method_struct { double lnz; double fl; double prune_dense; double prune_dense2; double nd_oksep; double other_1[4]; unsigned long nd_small; unsigned long other_2[4]; int aggressive; int order_for_lu; int nd_compress; int nd_camd; int nd_components; int ordering; unsigned long other_3[4]; } method[-1]; int postorder; void *(*malloc_memory)(unsigned long); void *(*realloc_memory)(void *, unsigned long); void (*free_memory)(void *); void *(*calloc_memory)(unsigned long, unsigned long); int (*complex_divide)(double ax, double az, double bx, double bz, double *cx, double *cz); double (*hypotenuse)(double x, double y); double metis_memory; double metis_dswitch; unsigned long metis_nswitch; unsigned long nrow; long mark; unsigned long iworksize; unsigned long xworksize; void *Flag; void *Head; void *Xwork; void *Iwork; int itype; int dtype; int no_workspace_reallocate; int status; double fl; double lnz; double anz; double modfl; unsigned long malloc_count; unsigned long memory_usage; unsigned long memory_inuse; double nrealloc_col; double nrealloc_factor; double ndbounds_hit; double rowfacfl; double aatfl; double other1[10]; double SPQR_xstat[4]; double SPQR_grain; double SPQR_small; long SPQR_istat[10]; long other2[6]; int other3[10]; int prefer_binary; int default_nesdis; int called_nd; int blas_ok; int SPQR_shrink; int SPQR_nthreads; unsigned long other4[16]; void *other5[16]; } *

variable_types:
Info
double [20]

variable_types:
Control
double *

variable_types:
Cp
long *

variable_types:
Len
long *

variable_types:
Nv
long *

variable_types:
Head
long *

variable_types:
Elen
long *

variable_types:
Degree
long *

variable_types:
Wi
long *

variable_types:
Iwork
long *

variable_types:
Next
long *

variable_types: cnz long

variable_types:
s
unsigned long

variable_types: ok int

user_defined_types: struct cholmod_common_struct { double dbound; double grow0; double grow1; unsigned long grow2; unsigned long maxrank; double supernodal_switch; int supernodal; int final_asis; int final_super; int final_ll; int final_pack; int final_monotonic; int final_resymbol; double zrelax[3]; unsigned long nrelax[3]; int prefer_zomplex; int prefer_upper; int quick_return_if_not_posdef; int print; int precise; int (*print_function)(char *, ...); int try_catch; void (*error_handler)(int status, char *file, int line, char *message); int nmethods; int current; int selected; struct cholmod_method_struct method[-1]; int postorder; void *(*malloc_memory)(unsigned long); void *(*realloc_memory)(void *, unsigned long); void (*free_memory)(void *); void *(*calloc_memory)(unsigned long, unsigned long); int (*complex_divide)(double ax, double az, double bx, double bz, double *cx, double *cz); double (*hypotenuse)(double x, double y); double metis_memory; double metis_dswitch; unsigned long metis_nswitch; unsigned long nrow; long mark; unsigned long iworksize; unsigned long xworksize; void *Flag; void *Head; void *Xwork; void *Iwork; int itype; int dtype; int no_workspace_reallocate; int status; double fl; double lnz; double anz; double modfl; unsigned long malloc_count; unsigned long memory_usage; unsigned long memory_inuse; double nrealloc_col; double nrealloc_factor; double ndbounds_hit; double rowfacfl; double aatfl; double other1[10]; double SPQR_xstat[4]; double SPQR_grain; double SPQR_small; long SPQR_istat[10]; long other2[6]; int other3[10]; int prefer_binary; int default_nesdis; int called_nd; int blas_ok; int SPQR_shrink; int SPQR_nthreads; unsigned long other4[16]; void *other5[16]; }


original_code:
int cholmod_l_drop
(
    double tol,
    cholmod_sparse *A,
    cholmod_common *Common
)
{
    double aij ;
    double *Ax ;
    long *Ap, *Ai, *Anz ;
    long packed, i, j, nrow, ncol, p, pend, nz, values ;
    { if (Common == ((void *)0)) { return (0) ; } if (Common->itype != 2 || Common->dtype != 0) { Common->status = (-4) ; return (0) ; } } ;
    { if ((A) == ((void *)0)) { if (Common->status != (-2)) { cholmod_l_error ((-4), "../MatrixOps/cholmod_drop.c", 52, "argument missing", Common) ; } return (0) ; } } ;
    { if ((A)->xtype < (0) || (A)->xtype > (1) || ((A)->xtype != 0 && ((A)->x) == ((void *)0)) || ((A)->xtype == 3 && ((A)->z) == ((void *)0))) { if (Common->status != (-2)) { cholmod_l_error ((-4), "../MatrixOps/cholmod_drop.c", 53, "invalid xtype", Common) ; } return (0) ; } } ;
    Common->status = 0 ;
    ;
    Ap = A->p ;
    Ai = A->i ;
    Ax = A->x ;
    Anz = A->nz ;
    packed = A->packed ;
    ncol = A->ncol ;
    nrow = A->nrow ;
    values = (A->xtype != 0) ;
    nz = 0 ;
    if (values)
    {
 if (A->stype > 0)
 {
     for (j = 0 ; j < ncol ; j++)
     {
  p = Ap [j] ;
  pend = (packed) ? (Ap [j+1]) : (p + Anz [j]) ;
  Ap [j] = nz ;
  for ( ; p < pend ; p++)
  {
      i = Ai [p] ;
      aij = Ax [p] ;
      if (i <= j && (fabs (aij) > tol || ((aij) != (aij))))
      {
   Ai [nz] = i ;
   Ax [nz] = aij ;
   nz++ ;
      }
  }
     }
 }
 else if (A->stype < 0)
 {
     for (j = 0 ; j < ncol ; j++)
     {
  p = Ap [j] ;
  pend = (packed) ? (Ap [j+1]) : (p + Anz [j]) ;
  Ap [j] = nz ;
  for ( ; p < pend ; p++)
  {
      i = Ai [p] ;
      aij = Ax [p] ;
      if (i >= j && (fabs (aij) > tol || ((aij) != (aij))))
      {
   Ai [nz] = i ;
   Ax [nz] = aij ;
   nz++ ;
      }
  }
     }
 }
 else
 {
     for (j = 0 ; j < ncol ; j++)
     {
  p = Ap [j] ;
  pend = (packed) ? (Ap [j+1]) : (p + Anz [j]) ;
  Ap [j] = nz ;
  for ( ; p < pend ; p++)
  {
      i = Ai [p] ;
      aij = Ax [p] ;
      if (fabs (aij) > tol || ((aij) != (aij)))
      {
   Ai [nz] = i ;
   Ax [nz] = aij ;
   nz++ ;
      }
  }
     }
 }
 Ap [ncol] = nz ;
 ;
 cholmod_l_reallocate_sparse (nz, A, Common) ;
 ;
    }
    else
    {
 if (A->stype > 0)
 {
     cholmod_l_band_inplace (0, ncol, 0, A, Common) ;
 }
 else if (A->stype < 0)
 {
     cholmod_l_band_inplace (-nrow, 0, 0, A, Common) ;
 }
    }
    ;
    return (1) ;
}

canonical_original_code:
int cholmod_l_drop(double tol, struct cholmod_sparse_struct *A, struct cholmod_common_struct *Common)
{
    double aij;
    double *Ax;
    long *Ap; long *Ai; long *Anz;
    long packed; long i; long j; long nrow; long ncol; long p; long pend; long nz; long values;
    { if (Common == ((void *)0)) { return (0) ; } if (Common->itype != 2 || Common->dtype != 0) { Common->status = (-4) ; return (0) ; } } ;
    { if ((A) == ((void *)0)) { if (Common->status != (-2)) { cholmod_l_error ((-4), "../MatrixOps/cholmod_drop.c", 52, "argument missing", Common) ; } return (0) ; } } ;
    { if ((A)->xtype < (0) || (A)->xtype > (1) || ((A)->xtype != 0 && ((A)->x) == ((void *)0)) || ((A)->xtype == 3 && ((A)->z) == ((void *)0))) { if (Common->status != (-2)) { cholmod_l_error ((-4), "../MatrixOps/cholmod_drop.c", 53, "invalid xtype", Common) ; } return (0) ; } } ;
    Common->status = 0 ;
    ;
    Ap = A->p ;
    Ai = A->i ;
    Ax = A->x ;
    Anz = A->nz ;
    packed = A->packed ;
    ncol = A->ncol ;
    nrow = A->nrow ;
    values = (A->xtype != 0) ;
    nz = 0 ;
    if (values)
    {
 if (A->stype > 0)
 {
     for (j = 0 ; j < ncol ; j++)
     {
  p = Ap [j] ;
  pend = (packed) ? (Ap [j+1]) : (p + Anz [j]) ;
  Ap [j] = nz ;
  for ( ; p < pend ; p++)
  {
      i = Ai [p] ;
      aij = Ax [p] ;
      if (i <= j && (fabs (aij) > tol || ((aij) != (aij))))
      {
   Ai [nz] = i ;
   Ax [nz] = aij ;
   nz++ ;
      }
  }
     }
 }
 else if (A->stype < 0)
 {
     for (j = 0 ; j < ncol ; j++)
     {
  p = Ap [j] ;
  pend = (packed) ? (Ap [j+1]) : (p + Anz [j]) ;
  Ap [j] = nz ;
  for ( ; p < pend ; p++)
  {
      i = Ai [p] ;
      aij = Ax [p] ;
      if (i >= j && (fabs (aij) > tol || ((aij) != (aij))))
      {
   Ai [nz] = i ;
   Ax [nz] = aij ;
   nz++ ;
      }
  }
     }
 }
 else
 {
     for (j = 0 ; j < ncol ; j++)
     {
  p = Ap [j] ;
  pend = (packed) ? (Ap [j+1]) : (p + Anz [j]) ;
  Ap [j] = nz ;
  for ( ; p < pend ; p++)
  {
      i = Ai [p] ;
      aij = Ax [p] ;
      if (fabs (aij) > tol || ((aij) != (aij)))
      {
   Ai [nz] = i ;
   Ax [nz] = aij ;
   nz++ ;
      }
  }
     }
 }
 Ap [ncol] = nz ;
 ;
 cholmod_l_reallocate_sparse (nz, A, Common) ;
 ;
    }
    else
    {
 if (A->stype > 0)
 {
     cholmod_l_band_inplace (0, ncol, 0, A, Common) ;
 }
 else if (A->stype < 0)
 {
     cholmod_l_band_inplace (-nrow, 0, 0, A, Common) ;
 }
    }
    ;
    return (1) ;
}

variable_types: tol double

variable_types: struct cholmod_sparse_struct { unsigned long nrow; unsigned long ncol; unsigned long nzmax; void *p; void *i; void *nz; void *x; void *z; int stype; int itype; int xtype; int dtype; int sorted; int packed; } *

variable_types: aij double

variable_types:
Ax
double *

variable_types:
Ap
long *

variable_types:
Ai
long *

variable_types:
Anz
long *

variable_types: packed long

variable_types: i long

variable_types: j long

variable_types: nrow long

variable_types: ncol long

variable_types: p long

variable_types: pend long

variable_types: nz long

variable_types: values long

user_defined_types: struct cholmod_method_struct { double lnz; double fl; double prune_dense; double prune_dense2; double nd_oksep; double other_1[4]; unsigned long nd_small; unsigned long other_2[4]; int aggressive; int order_for_lu; int nd_compress; int nd_camd; int nd_components; int ordering; unsigned long other_3[4]; }


decompiled_code:
__int64 __fastcall umfpack_zi_report_triplet(int a1, int a2, int a3, __int64 a4, __int64 a5, __int64 a6, double a7, double a8, double a9, double a10, __int64 a11, double *a12)
{
__int64 (*v13)(const char *, ...); // r9
bool v14; // bl
int v15; // er14
__int64 v16; // r13
int v17; // ebx
int v18; // er12
int v19; // ebp
double v20; // xmm0_8
double v21; // xmm1_8
int v26; // [rsp+28h] [rbp-40h]
int v27; // [rsp+2Ch] [rbp-3Ch]

if ( !a12 )
return 0LL;
v27 = (int)*a12;
if ( v27 <= 2 )
return 0LL;
v13 = amd_printf;
v14 = a5 == 0 || a4 == 0;
if ( amd_printf )
{
amd_printf(
"triplet-form matrix, n_row = %d, n_col = %d nz = %d. ",
(unsigned int)a1,
(unsigned int)a2,
(unsigned int)a3);
if ( !v14 )
{
v13 = amd_printf;
if ( a1 > 0 && a2 > 0 )
{
if ( a3 >= 0 )
goto LABEL_8;
if ( amd_printf )
{
amd_printf("ERROR: nz is < 0\n\n");
return 4294967288LL;
}
return 4294967288LL;
}
if ( amd_printf )
{
amd_printf("ERROR: n_row or n_col is <= 0\n\n");
return 4294967290LL;
}
return 4294967290LL;
}
if ( amd_printf )
amd_printf("ERROR: indices not present\n\n");
return 4294967291LL;
}
if ( v14 )
return 4294967291LL;
if ( a2 > 0 && a1 > 0 )
{
if ( a3 >= 0 )
{
LABEL_8:
if ( v27 == 3 )
{
if ( !a3 )
{
LABEL_36:
if ( v13 )
v13("OK\n\n");
return 0LL;
}
}
else if ( v13 )
{
v13("\n");
v13 = amd_printf;
if ( !a3 )
goto LABEL_34;
}
else if ( !a3 )
{
return 0LL;
}
v26 = a3;
v15 = v27;
v16 = 0LL;
while ( 2 )
{
v17 = v16;
v18 = *(_DWORD *)(a4 + 4 * v16);
v19 = *(_DWORD *)(a5 + 4 * v16);
if ( v15 == 3 )
goto LABEL_26;
if ( v13 )
{
v13(" %d : %d %d ", (unsigned int)v16, (unsigned int)v18, (unsigned int)v19);
v13 = amd_printf;
}
if ( !a6 )
{
LABEL_24:
v13 = amd_printf;
if ( amd_printf )
{
amd_printf("\n");
v13 = amd_printf;
}
while ( 1 )
{
LABEL_26:
if ( v18 < 0 || v18 >= a1 || v19 < 0 || v19 >= a2 )
{
if ( v13 )
v13("ERROR: invalid triplet\n\n");
return 4294967288LL;
}
if ( v15 != 4 || (_DWORD)v16 != 9 )
break;
if ( v26 <= 10 )
goto LABEL_33;
if ( v13 )
{
v13(" ...\n");
v13 = amd_printf;
}
++v16;
v15 = 3;
v17 = v16;
v18 = *(_DWORD *)(a4 + 4 * v16);
v19 = *(_DWORD *)(a5 + 4 * v16);
}
if ( v26 > v17 + 1 )
{
++v16;
continue;
}
LABEL_33:
if ( v27 == 3 )
goto LABEL_36;
LABEL_34:
if ( v13 )
{
v13(" triplet-form matrix ");
v13 = amd_printf;
goto LABEL_36;
}
return 0LL;
}
break;
}
if ( a11 )
{
v20 = *(double *)(a6 + 8 * v16);
v21 = *(double *)(a11 + 8 * v16);
}
else
{
v20 = *(double *)(a6 + 16 * v16);
v21 = *(double *)(a6 + 16 * v16 + 8);
}
if ( v20 == 0.0 )
{
if ( !v13 )
goto LABEL_26;
v13(" (0");
v13 = amd_printf;
if ( v21 >= 0.0 )
{
LABEL_21:
if ( v21 == 0.0 )
{
if ( !v13 )
goto LABEL_26;
v13(" + 0i)", v20, v21, 0.0, a10, 0.0, 0.0);
}
else
{
if ( !v13 )
goto LABEL_26;
v13(" + %gi)", v21);
}
goto LABEL_24;
}
}
else
{
if ( !v13 )
goto LABEL_26;
v13(" (%g");
v13 = amd_printf;
if ( v21 >= 0.0 )
goto LABEL_21;
}
if ( !v13 )
goto LABEL_26;
v13(" - %gi)", COERCE_DOUBLE(*(_QWORD *)&v21 ^ LC9));
goto LABEL_24;
}
return 4294967288LL;
}
return 4294967290LL;
}

canonical_decompiled_code:
__int64 __fastcall func0(int a1, int a2, int a3, __int64 a4, __int64 a5, __int64 a6, double a7, double a8, double a9, double a10, __int64 a11, double *a12)
{
__int64 (*v13)(const char *, ...); // r9
bool v14; // bl
int v15; // er14
__int64 v16; // r13
int v17; // ebx
int v18; // er12
int v19; // ebp
double v20; // xmm0_8
double v21; // xmm1_8
int v26; // [rsp+28h] [rbp-40h]
int v27; // [rsp+2Ch] [rbp-3Ch]

if ( !a12 )
return 0LL;
v27 = (int)*a12;
if ( v27 <= 2 )
return 0LL;
v13 = amd_printf;
v14 = a5 == 0 || a4 == 0;
if ( amd_printf )
{
amd_printf(
"triplet-form matrix, n_row = %d, n_col = %d nz = %d. ",
(unsigned int)a1,
(unsigned int)a2,
(unsigned int)a3);
if ( !v14 )
{
v13 = amd_printf;
if ( a1 > 0 && a2 > 0 )
{
if ( a3 >= 0 )
goto LABEL_8;
if ( amd_printf )
{
amd_printf("ERROR: nz is < 0\n\n");
return 4294967288LL;
}
return 4294967288LL;
}
if ( amd_printf )
{
amd_printf("ERROR: n_row or n_col is <= 0\n\n");
return 4294967290LL;
}
return 4294967290LL;
}
if ( amd_printf )
amd_printf("ERROR: indices not present\n\n");
return 4294967291LL;
}
if ( v14 )
return 4294967291LL;
if ( a2 > 0 && a1 > 0 )
{
if ( a3 >= 0 )
{
LABEL_8:
if ( v27 == 3 )
{
if ( !a3 )
{
LABEL_36:
if ( v13 )
v13("OK\n\n");
return 0LL;
}
}
else if ( v13 )
{
v13("\n");
v13 = amd_printf;
if ( !a3 )
goto LABEL_34;
}
else if ( !a3 )
{
return 0LL;
}
v26 = a3;
v15 = v27;
v16 = 0LL;
while ( 2 )
{
v17 = v16;
v18 = *(_DWORD *)(a4 + 4 * v16);
v19 = *(_DWORD *)(a5 + 4 * v16);
if ( v15 == 3 )
goto LABEL_26;
if ( v13 )
{
v13(" %d : %d %d ", (unsigned int)v16, (unsigned int)v18, (unsigned int)v19);
v13 = amd_printf;
}
if ( !a6 )
{
LABEL_24:
v13 = amd_printf;
if ( amd_printf )
{
amd_printf("\n");
v13 = amd_printf;
}
while ( 1 )
{
LABEL_26:
if ( v18 < 0 || v18 >= a1 || v19 < 0 || v19 >= a2 )
{
if ( v13 )
v13("ERROR: invalid triplet\n\n");
return 4294967288LL;
}
if ( v15 != 4 || (_DWORD)v16 != 9 )
break;
if ( v26 <= 10 )
goto LABEL_33;
if ( v13 )
{
v13(" ...\n");
v13 = amd_printf;
}
++v16;
v15 = 3;
v17 = v16;
v18 = *(_DWORD *)(a4 + 4 * v16);
v19 = *(_DWORD *)(a5 + 4 * v16);
}
if ( v26 > v17 + 1 )
{
++v16;
continue;
}
LABEL_33:
if ( v27 == 3 )
goto LABEL_36;
LABEL_34:
if ( v13 )
{
v13(" triplet-form matrix ");
v13 = amd_printf;
goto LABEL_36;
}
return 0LL;
}
break;
}
if ( a11 )
{
v20 = *(double *)(a6 + 8 * v16);
v21 = *(double *)(a11 + 8 * v16);
}
else
{
v20 = *(double *)(a6 + 16 * v16);
v21 = *(double *)(a6 + 16 * v16 + 8);
}
if ( v20 == 0.0 )
{
if ( !v13 )
goto LABEL_26;
v13(" (0");
v13 = amd_printf;
if ( v21 >= 0.0 )
{
LABEL_21:
if ( v21 == 0.0 )
{
if ( !v13 )
goto LABEL_26;
v13(" + 0i)", v20, v21, 0.0, a10, 0.0, 0.0);
}
else
{
if ( !v13 )
goto LABEL_26;
v13(" + %gi)", v21);
}
goto LABEL_24;
}
}
else
{
if ( !v13 )
goto LABEL_26;
v13(" (%g");
v13 = amd_printf;
if ( v21 >= 0.0 )
goto LABEL_21;
}
if ( !v13 )
goto LABEL_26;
v13(" - %gi)", COERCE_DOUBLE(*(_QWORD *)&v21 ^ LC9));
goto LABEL_24;
}
return 4294967288LL;
}
return 4294967290LL;
}

original_code:
int umfpack_zi_report_triplet
(
    int n_row,
    int n_col,
    int nz,
    const int Ti [ ],
    const int Tj [ ],
    const double Tx [ ],
    const double Tz [ ],
    const double Control [20]
)
{
    DoubleComplex t ;
    int prl, prl1, k, i, j, do_values ;
    int split = ((Tz) != (double *) ((void *)0)) ;
    prl = ((Control != (double *) ((void *)0)) ? (((Control [0]) != (Control [0])) ? 1 : Control [0]) : 1) ;
    if (prl <= 2)
    {
 return ((0)) ;
    }
    { if (amd_printf != ((void *)0)) (void) amd_printf ("triplet-form matrix, n_row = ""%d"", n_col = ""%d"" nz = ""%d"". ", n_row, n_col, nz) ; } ;
    if (!Ti || !Tj)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: indices not present\n\n") ; } ;
 return ((-5)) ;
    }
    if (n_row <= 0 || n_col <= 0)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: n_row or n_col is <= 0\n\n") ; } ;
 return ((-6)) ;
    }
    if (nz < 0)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: nz is < 0\n\n") ; } ;
 return ((-8)) ;
    }
    { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("\n") ; } ; } } ;
    do_values = Tx != (double *) ((void *)0) ;
    prl1 = prl ;
    for (k = 0 ; k < nz ; k++)
    {
 i = Ti [k] ;
 j = Tj [k] ;
 { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("    ""%d"" : ""%d"" ""%d"" ", (k), (i), (j)) ; } ; } } ;
 if (do_values && prl >= 4)
 {
     { if (split) { (t).component [0] = (Tx)[k] ; (t).component [1] = (Tz)[k] ; } else { (t) = ((DoubleComplex *)(Tx))[k] ; } } ;
     { if ((((t).component [0]) != 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" (%g", (t).component [0]) ; } ; } else { { if (amd_printf != ((void *)0)) (void) amd_printf (" (0") ; } ; } if ((((t).component [1]) < 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" - %gi)", -(t).component [1]) ; } ; } else if ((((t).component [1]) == 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" + 0i)") ; } ; } else { { if (amd_printf != ((void *)0)) (void) amd_printf (" + %gi)", (t).component [1]) ; } ; } } ;
 }
 { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("\n") ; } ; } } ;
 if (i < 0 || i >= n_row || j < 0 || j >= n_col)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: invalid triplet\n\n") ; } ;
     return ((-8)) ;
 }
 if (prl == 4 && k == 9 && nz > 10)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("    ...\n") ; } ;
     prl-- ;
 }
    }
    prl = prl1 ;
    { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("    triplet-form matrix ") ; } ; } } ;
    { if (amd_printf != ((void *)0)) (void) amd_printf ("OK\n\n") ; } ;
    return ((0)) ;
}

canonical_original_code:
int umfpack_zi_report_triplet(int n_row, int n_col, int nz, int Ti[], int Tj[], double Tx[], double Tz[], double Control[20])
{
    struct DoubleComplex t;
    int prl; int prl1; int k; int i; int j; int do_values;
    int split = ((Tz) != (double *) ((void *)0));
    prl = ((Control != (double *) ((void *)0)) ? (((Control [0]) != (Control [0])) ? 1 : Control [0]) : 1) ;
    if (prl <= 2)
    {
 return ((0)) ;
    }
    { if (amd_printf != ((void *)0)) (void) amd_printf ("triplet-form matrix, n_row = ""%d"", n_col = ""%d"" nz = ""%d"". ", n_row, n_col, nz) ; } ;
    if (!Ti || !Tj)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: indices not present\n\n") ; } ;
 return ((-5)) ;
    }
    if (n_row <= 0 || n_col <= 0)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: n_row or n_col is <= 0\n\n") ; } ;
 return ((-6)) ;
    }
    if (nz < 0)
    {
 { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: nz is < 0\n\n") ; } ;
 return ((-8)) ;
    }
    { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("\n") ; } ; } } ;
    do_values = Tx != (double *) ((void *)0) ;
    prl1 = prl ;
    for (k = 0 ; k < nz ; k++)
    {
 i = Ti [k] ;
 j = Tj [k] ;
 { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("    ""%d"" : ""%d"" ""%d"" ", (k), (i), (j)) ; } ; } } ;
 if (do_values && prl >= 4)
 {
     { if (split) { (t).component [0] = (Tx)[k] ; (t).component [1] = (Tz)[k] ; } else { (t) = ((struct DoubleComplex *)(Tx))[k] ; } } ;
     { if ((((t).component [0]) != 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" (%g", (t).component [0]) ; } ; } else { { if (amd_printf != ((void *)0)) (void) amd_printf (" (0") ; } ; } if ((((t).component [1]) < 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" - %gi)", -(t).component [1]) ; } ; } else if ((((t).component [1]) == 0.)) { { if (amd_printf != ((void *)0)) (void) amd_printf (" + 0i)") ; } ; } else { { if (amd_printf != ((void *)0)) (void) amd_printf (" + %gi)", (t).component [1]) ; } ; } } ;
 }
 { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("\n") ; } ; } } ;
 if (i < 0 || i >= n_row || j < 0 || j >= n_col)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("ERROR: invalid triplet\n\n") ; } ;
     return ((-8)) ;
 }
 if (prl == 4 && k == 9 && nz > 10)
 {
     { if (amd_printf != ((void *)0)) (void) amd_printf ("    ...\n") ; } ;
     prl-- ;
 }
    }
    prl = prl1 ;
    { if (prl >= (4)) { { if (amd_printf != ((void *)0)) (void) amd_printf ("    triplet-form matrix ") ; } ; } } ;
    { if (amd_printf != ((void *)0)) (void) amd_printf ("OK\n\n") ; } ;
    return ((0)) ;
}

variable_types: nz int

variable_types:
Ti
int []

variable_types:
Tj
int []

variable_types:
Tx
double []

variable_types:
Tz
double []

variable_types:
Control
double [20]

variable_types: struct DoubleComplex { double component[2]; }

variable_types: prl int

variable_types: k int

variable_types: i int

variable_types: j int

variable_types: split int


original_code:
int umfdi_extend_front
(
    NumericType *Numeric,
    WorkType *Work
)
{
    int j, i, *Frows, row, col, *Wrow, fnr2, fnc2, *Frpos, *Fcpos, *Fcols,
 fnrows_extended, rrdeg, ccdeg, fncols_extended, fnr_curr, fnc_curr,
 fnrows, fncols, pos, fnpiv, *Wm ;
    double *Wx, *Wy, *Fu, *Fl ;
    fnpiv = Work->fnpiv ;
    if (Work->do_grow)
    {
 fnr2 = (1.2) * Work->fnrows_new + 2 ;
 fnc2 = (1.2) * Work->fncols_new + 2 ;
 if (!umfdi_grow_front (Numeric, fnr2, fnc2, Work, 1))
 {
     ;
     return ((0)) ;
 }
    }
    fnr_curr = Work->fnr_curr ;
    fnc_curr = Work->fnc_curr ;
    ;
    ;
    ;
    Frows = Work->Frows ;
    Frpos = Work->Frpos ;
    Fcols = Work->Fcols ;
    Fcpos = Work->Fcpos ;
    fnrows = Work->fnrows ;
    fncols = Work->fncols ;
    rrdeg = Work->rrdeg ;
    ccdeg = Work->ccdeg ;
    Work->fscan_col = fncols ;
    Work->NewCols = Fcols ;
    Work->fscan_row = fnrows ;
    Work->NewRows = Frows ;
    fnrows_extended = fnrows ;
    fncols_extended = fncols ;
    Fl = Work->Flblock + fnpiv * fnr_curr ;
    if (Work->pivcol_in_front)
    {
 fnrows_extended += ccdeg ;
 Wy = Work->Wy ;
 for (i = 0 ; i < fnrows_extended ; i++)
 {
     Fl [i] = Wy [i] ;
 }
    }
    else
    {
 double *F ;
 Fu = Work->Flublock + fnpiv * Work->nb ;
 Wm = Work->Wm ;
 Wx = Work->Wx ;
 F = Fu ;
 for (i = 0 ; i < fnpiv ; i++)
 {
     { *F++ = 0. ; } ;
 }
 F = Fl ;
 for (i = 0 ; i < fnrows ; i++)
 {
     { *F++ = 0. ; } ;
 }
 for (i = 0 ; i < ccdeg ; i++)
 {
     row = Wm [i] ;
     pos = Frpos [row] ;
     if (pos < 0)
     {
  pos = fnrows_extended++ ;
  Frows [pos] = row ;
  Frpos [row] = pos ;
     }
     Fl [pos] = Wx [i] ;
 }
    }
    ;
    if (Work->pivrow_in_front)
    {
 if (Work->pivcol_in_front)
 {
     ;
     for (j = fncols ; j < rrdeg ; j++)
     {
  Fcpos [Fcols [j]] = j * fnr_curr ;
     }
 }
 else
 {
     Wrow = Work->Wrow ;
     ;
     if (Wrow == Fcols)
     {
  for (j = fncols ; j < rrdeg ; j++)
  {
      col = Wrow [j] ;
      ;
      ;
      Fcpos [col] = j * fnr_curr ;
  }
     }
     else
     {
  for (j = fncols ; j < rrdeg ; j++)
  {
      col = Wrow [j] ;
      ;
      ;
      Fcols [j] = col ;
      Fcpos [col] = j * fnr_curr ;
  }
     }
 }
 fncols_extended = rrdeg ;
    }
    else
    {
 ;
 Wrow = Work->Wrow ;
 for (j = 0 ; j < rrdeg ; j++)
 {
     col = Wrow [j] ;
     ;
     if (Fcpos [col] < 0)
     {
  ;
  Fcols [fncols_extended] = col ;
  Fcpos [col] = fncols_extended * fnr_curr ;
  fncols_extended++ ;
     }
 }
    }
    zero_front (Work->Flblock, Work->Fublock, Work->Fcblock,
 fnrows, fncols, fnr_curr, fnc_curr,
 fnpiv, fnrows_extended, fncols_extended) ;
    Work->fnrows = fnrows_extended ;
    Work->fncols = fncols_extended ;
    ;
    ;
    return ((1)) ;
}

canonical_original_code:
int umfdi_extend_front(struct NumericType *Numeric, struct WorkType *Work)
{
    int j; int i; int *Frows; int row; int col; int *Wrow; int fnr2; int fnc2; int *Frpos; int *Fcpos; int *Fcols; int fnrows_extended; int rrdeg; int ccdeg; int fncols_extended; int fnr_curr; int fnc_curr; int fnrows; int fncols; int pos; int fnpiv; int *Wm;
    double *Wx; double *Wy; double *Fu; double *Fl;
    fnpiv = Work->fnpiv ;
    if (Work->do_grow)
    {
 fnr2 = (1.2) * Work->fnrows_new + 2 ;
 fnc2 = (1.2) * Work->fncols_new + 2 ;
 if (!umfdi_grow_front (Numeric, fnr2, fnc2, Work, 1))
 {
     ;
     return ((0)) ;
 }
    }
    fnr_curr = Work->fnr_curr ;
    fnc_curr = Work->fnc_curr ;
    ;
    ;
    ;
    Frows = Work->Frows ;
    Frpos = Work->Frpos ;
    Fcols = Work->Fcols ;
    Fcpos = Work->Fcpos ;
    fnrows = Work->fnrows ;
    fncols = Work->fncols ;
    rrdeg = Work->rrdeg ;
    ccdeg = Work->ccdeg ;
    Work->fscan_col = fncols ;
    Work->NewCols = Fcols ;
    Work->fscan_row = fnrows ;
    Work->NewRows = Frows ;
    fnrows_extended = fnrows ;
    fncols_extended = fncols ;
    Fl = Work->Flblock + fnpiv * fnr_curr ;
    if (Work->pivcol_in_front)
    {
 fnrows_extended += ccdeg ;
 Wy = Work->Wy ;
 for (i = 0 ; i < fnrows_extended ; i++)
 {
     Fl [i] = Wy [i] ;
 }
    }
    else
    {
 double *F;
 Fu = Work->Flublock + fnpiv * Work->nb ;
 Wm = Work->Wm ;
 Wx = Work->Wx ;
 F = Fu ;
 for (i = 0 ; i < fnpiv ; i++)
 {
     { *F++ = 0. ; } ;
 }
 F = Fl ;
 for (i = 0 ; i < fnrows ; i++)
 {
     { *F++ = 0. ; } ;
 }
 for (i = 0 ; i < ccdeg ; i++)
 {
     row = Wm [i] ;
     pos = Frpos [row] ;
     if (pos < 0)
     {
  pos = fnrows_extended++ ;
  Frows [pos] = row ;
  Frpos [row] = pos ;
     }
     Fl [pos] = Wx [i] ;
 }
    }
    ;
    if (Work->pivrow_in_front)
    {
 if (Work->pivcol_in_front)
 {
     ;
     for (j = fncols ; j < rrdeg ; j++)
     {
  Fcpos [Fcols [j]] = j * fnr_curr ;
     }
 }
 else
 {
     Wrow = Work->Wrow ;
     ;
     if (Wrow == Fcols)
     {
  for (j = fncols ; j < rrdeg ; j++)
  {
      col = Wrow [j] ;
      ;
      ;
      Fcpos [col] = j * fnr_curr ;
  }
     }
     else
     {
  for (j = fncols ; j < rrdeg ; j++)
  {
      col = Wrow [j] ;
      ;
      ;
      Fcols [j] = col ;
      Fcpos [col] = j * fnr_curr ;
  }
     }
 }
 fncols_extended = rrdeg ;
    }
    else
    {
 ;
 Wrow = Work->Wrow ;
 for (j = 0 ; j < rrdeg ; j++)
 {
     col = Wrow [j] ;
     ;
     if (Fcpos [col] < 0)
     {
  ;
  Fcols [fncols_extended] = col ;
  Fcpos [col] = fncols_extended * fnr_curr ;
  fncols_extended++ ;
     }
 }
    }
    zero_front (Work->Flblock, Work->Fublock, Work->Fcblock,
 fnrows, fncols, fnr_curr, fnc_curr,
 fnpiv, fnrows_extended, fncols_extended) ;
    Work->fnrows = fnrows_extended ;
    Work->fncols = fncols_extended ;
    ;
    ;
    return ((1)) ;
}

variable_types: struct NumericType { double flops; int scale; int valid; union Unit_union { struct { int size; } header; double xxxxxx; } *Memory; int ihead; int *Rperm; int ulen; double *D; int do_recip; double *Rs; int n_row; int tail_usage; int maxnrows; } *

variable_types: struct WorkType { int *E; double *Wx; int *Wp; int *Lpattern; int *Diagonal_map; int n_row; int *Front_new1strow; int Pivrow[64]; double *Flublock; int *Frows; } *

variable_types:
Frows
int *

variable_types: row int

variable_types: col int

variable_types:
Wrow
int *

variable_types:
Frpos
int *

variable_types:
Fcpos
int *

variable_types:
Fcols
int *

variable_types: rrdeg int

variable_types: ccdeg int

variable_types: fnrows int

variable_types: fncols int

variable_types: pos int

variable_types: fnpiv int

variable_types:
Wm
int *

variable_types:
Wx
double *

variable_types:
Wy
double *

variable_types:
Fu
double *

variable_types:
Fl
double *

variable_types:
F
double *

user_defined_types: struct NumericType { double flops; int scale; int valid; union Unit_union *Memory; int ihead; int *Rperm; int ulen; double *D; int do_recip; double *Rs; int n_row; int tail_usage; int maxnrows; }


original_code:
static void zero_front (
    double *Flblock, double *Fublock, double *Fcblock,
    int fnrows, int fncols, int fnr_curr, int fnc_curr,
    int fnpiv, int fnrows_extended, int fncols_extended)
{
    int j, i ;
    double *F, *Fj, *Fi ;
    Fj = Fcblock + fnrows ;
    for (j = 0 ; j < fncols ; j++)
    {
 F = Fj ;
 Fj += fnr_curr ;
#pragma ivdep
 for (i = fnrows ; i < fnrows_extended ; i++)
 {
     { *F++ = 0. ; } ;
 }
    }
    Fj -= fnrows ;
    for (j = fncols ; j < fncols_extended ; j++)
    {
 F = Fj ;
 Fj += fnr_curr ;
#pragma ivdep
 for (i = 0 ; i < fnrows_extended ; i++)
 {
     { *F++ = 0. ; } ;
 }
    }
    Fj = Flblock + fnrows ;
    for (j = 0 ; j < fnpiv ; j++)
    {
 F = Fj ;
 Fj += fnr_curr ;
#pragma ivdep
 for (i = fnrows ; i < fnrows_extended ; i++)
 {
     { *F++ = 0. ; } ;
 }
    }
    Fi = Fublock + fncols ;
    for (i = 0 ; i < fnpiv ; i++)
    {
 F = Fi ;
 Fi += fnc_curr ;
#pragma ivdep
 for (j = fncols ; j < fncols_extended ; j++)
 {
     { *F++ = 0. ; } ;
 }
    }
}

canonical_original_code:
static void zero_front(double *Flblock, double *Fublock, double *Fcblock, int fnrows, int fncols, int fnr_curr, int fnc_curr, int fnpiv, int fnrows_extended, int fncols_extended)
{
    int j; int i;
    double *F; double *Fj; double *Fi;
    Fj = Fcblock + fnrows ;
    for (j = 0 ; j < fncols ; j++)
    {
 F = Fj ;
 Fj += fnr_curr ;
#pragma ivdep
 for (i = fnrows ; i < fnrows_extended ; i++)
 {
     { *F++ = 0. ; } ;
 }
    }
    Fj -= fnrows ;
    for (j = fncols ; j < fncols_extended ; j++)
    {
 F = Fj ;
 Fj += fnr_curr ;
#pragma ivdep
 for (i = 0 ; i < fnrows_extended ; i++)
 {
     { *F++ = 0. ; } ;
 }
    }
    Fj = Flblock + fnrows ;
    for (j = 0 ; j < fnpiv ; j++)
    {
 F = Fj ;
 Fj += fnr_curr ;
#pragma ivdep
 for (i = fnrows ; i < fnrows_extended ; i++)
 {
     { *F++ = 0. ; } ;
 }
    }
    Fi = Fublock + fncols ;
    for (i = 0 ; i < fnpiv ; i++)
    {
 F = Fi ;
 Fi += fnc_curr ;
#pragma ivdep
 for (j = fncols ; j < fncols_extended ; j++)
 {
     { *F++ = 0. ; } ;
 }
    }
}

variable_types:
Flblock
double *

variable_types:
Fublock
double *

variable_types:
Fcblock
double *

variable_types: j int

variable_types: i int

variable_types:
Fj
double *

variable_types:
Fi
double *

return_type: void


original_code:
long umfpack_zl_get_symbolic
(
    long *p_n_row,
    long *p_n_col,
    long *p_n1,
    long *p_nz,
    long *p_nfr,
    long *p_nchains,
    long P [ ],
    long Q [ ],
    long Front_npivcol [ ],
    long Front_parent [ ],
    long Front_1strow [ ],
    long Front_leftmostdesc [ ],
    long Chain_start [ ],
    long Chain_maxrows [ ],
    long Chain_maxcols [ ],
    void *SymbolicHandle
)
{
    SymbolicType *Symbolic ;
    long k, n_row, n_col, n1, nfr, nchains, *p ;
    Symbolic = (SymbolicType *) SymbolicHandle ;
    if (!umfzl_valid_symbolic (Symbolic))
    {
 return ((-4)) ;
    }
    n_row = Symbolic->n_row ;
    n_col = Symbolic->n_col ;
    n1 = Symbolic->n1 ;
    nfr = Symbolic->nfr ;
    nchains = Symbolic->nchains ;
    if (p_n_row)
    {
 *p_n_row = n_row ;
    }
    if (p_n_col)
    {
 *p_n_col = n_col ;
    }
    if (p_n1)
    {
 *p_n1 = n1 ;
    }
    if (p_nz)
    {
 *p_nz = Symbolic->nz ;
    }
    if (p_nfr)
    {
 *p_nfr = nfr ;
    }
    if (p_nchains)
    {
 *p_nchains = nchains ;
    }
    if (P != (long *) ((void *)0))
    {
 long *Rperm_init, *Diagonal_map ;
 Rperm_init = Symbolic->Rperm_init ;
 Diagonal_map = Symbolic->Diagonal_map ;
 if (Diagonal_map != (long *) ((void *)0))
 {
     ;
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [Diagonal_map [k]] ;
     }
 }
 else
 {
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [k] ;
     }
 }
    }
    if (Q != (long *) ((void *)0))
    {
 p = Symbolic->Cperm_init ;
 for (k = 0 ; k < n_col ; k++)
 {
     Q [k] = p [k] ;
 }
    }
    if (Front_npivcol != (long *) ((void *)0))
    {
 p = Symbolic->Front_npivcol ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_npivcol [k] = p [k] ;
 }
    }
    if (Front_parent != (long *) ((void *)0))
    {
 p = Symbolic->Front_parent ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_parent [k] = p [k] ;
 }
    }
    if (Front_1strow != (long *) ((void *)0))
    {
 p = Symbolic->Front_1strow ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_1strow [k] = p [k] ;
 }
    }
    if (Front_leftmostdesc != (long *) ((void *)0))
    {
 p = Symbolic->Front_leftmostdesc ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_leftmostdesc [k] = p [k] ;
 }
    }
    if (Chain_start != (long *) ((void *)0))
    {
 p = Symbolic->Chain_start ;
 for (k = 0 ; k <= nchains ; k++)
 {
     Chain_start [k] = p [k] ;
 }
    }
    if (Chain_maxrows != (long *) ((void *)0))
    {
 p = Symbolic->Chain_maxrows ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxrows [k] = p [k] ;
 }
 Chain_maxrows [nchains] = 0 ;
    }
    if (Chain_maxcols != (long *) ((void *)0))
    {
 p = Symbolic->Chain_maxcols ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxcols [k] = p [k] ;
 }
 Chain_maxcols [nchains] = 0 ;
    }
    return ((0)) ;
}

canonical_original_code:
long umfpack_zl_get_symbolic(long *p_n_row, long *p_n_col, long *p_n1, long *p_nz, long *p_nfr, long *p_nchains, long P[], long Q[], long Front_npivcol[], long Front_parent[], long Front_1strow[], long Front_leftmostdesc[], long Chain_start[], long Chain_maxrows[], long Chain_maxcols[], void *SymbolicHandle)
{
    struct SymbolicType *Symbolic;
    long k; long n_row; long n_col; long n1; long nfr; long nchains; long *p;
    Symbolic = (struct SymbolicType *) SymbolicHandle ;
    if (!umfzl_valid_symbolic (Symbolic))
    {
 return ((-4)) ;
    }
    n_row = Symbolic->n_row ;
    n_col = Symbolic->n_col ;
    n1 = Symbolic->n1 ;
    nfr = Symbolic->nfr ;
    nchains = Symbolic->nchains ;
    if (p_n_row)
    {
 *p_n_row = n_row ;
    }
    if (p_n_col)
    {
 *p_n_col = n_col ;
    }
    if (p_n1)
    {
 *p_n1 = n1 ;
    }
    if (p_nz)
    {
 *p_nz = Symbolic->nz ;
    }
    if (p_nfr)
    {
 *p_nfr = nfr ;
    }
    if (p_nchains)
    {
 *p_nchains = nchains ;
    }
    if (P != (long *) ((void *)0))
    {
 long *Rperm_init; long *Diagonal_map;
 Rperm_init = Symbolic->Rperm_init ;
 Diagonal_map = Symbolic->Diagonal_map ;
 if (Diagonal_map != (long *) ((void *)0))
 {
     ;
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [Diagonal_map [k]] ;
     }
 }
 else
 {
     for (k = 0 ; k < n_row ; k++)
     {
  P [k] = Rperm_init [k] ;
     }
 }
    }
    if (Q != (long *) ((void *)0))
    {
 p = Symbolic->Cperm_init ;
 for (k = 0 ; k < n_col ; k++)
 {
     Q [k] = p [k] ;
 }
    }
    if (Front_npivcol != (long *) ((void *)0))
    {
 p = Symbolic->Front_npivcol ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_npivcol [k] = p [k] ;
 }
    }
    if (Front_parent != (long *) ((void *)0))
    {
 p = Symbolic->Front_parent ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_parent [k] = p [k] ;
 }
    }
    if (Front_1strow != (long *) ((void *)0))
    {
 p = Symbolic->Front_1strow ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_1strow [k] = p [k] ;
 }
    }
    if (Front_leftmostdesc != (long *) ((void *)0))
    {
 p = Symbolic->Front_leftmostdesc ;
 for (k = 0 ; k <= nfr ; k++)
 {
     Front_leftmostdesc [k] = p [k] ;
 }
    }
    if (Chain_start != (long *) ((void *)0))
    {
 p = Symbolic->Chain_start ;
 for (k = 0 ; k <= nchains ; k++)
 {
     Chain_start [k] = p [k] ;
 }
    }
    if (Chain_maxrows != (long *) ((void *)0))
    {
 p = Symbolic->Chain_maxrows ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxrows [k] = p [k] ;
 }
 Chain_maxrows [nchains] = 0 ;
    }
    if (Chain_maxcols != (long *) ((void *)0))
    {
 p = Symbolic->Chain_maxcols ;
 for (k = 0 ; k < nchains ; k++)
 {
     Chain_maxcols [k] = p [k] ;
 }
 Chain_maxcols [nchains] = 0 ;
    }
    return ((0)) ;
}

variable_types:
P
long []

variable_types:
Q
long []

variable_types:
SymbolicHandle
void *

variable_types: struct SymbolicType { double num_mem_usage_est; long valid; } *

variable_types: k long

variable_types: nfr long

variable_types: nchains long

variable_types:
p
long *


original_code:
int umfdi_grow_front
(
    NumericType *Numeric,
    int fnr2,
    int fnc2,
    WorkType *Work,
    int do_what
)
{
    double s ;
    double *Fcold, *Fcnew ;
    int j, i, col, *Fcpos, *Fcols, fnrows_max, fncols_max, fnr_curr, nb,
 fnrows_new, fncols_new, fnr_min, fnc_min, minsize,
 newsize, fnrows, fncols, *E, eloc ;
    Fcols = Work->Fcols ;
    Fcpos = Work->Fcpos ;
    E = Work->E ;
    nb = Work->nb ;
    fnrows_max = Work->fnrows_max + nb ;
    fncols_max = Work->fncols_max + nb ;
    ;
    ;
    ;
    ;
    ;
    fnrows_new = Work->fnrows_new + 1 ;
    fncols_new = Work->fncols_new + 1 ;
    ;
    if (fnrows_new % 2 == 0) fnrows_new++ ;
    fnrows_new += nb ;
    fncols_new += nb ;
    fnr_min = (((fnrows_new) < (fnrows_max)) ? (fnrows_new) : (fnrows_max)) ;
    fnc_min = (((fncols_new) < (fncols_max)) ? (fncols_new) : (fncols_max)) ;
    minsize = fnr_min * fnc_min ;
    if (((!(((double) fnr_min * (double) fnc_min * sizeof (double)) * (1.0+1e-8) <= (double) 0x7fffffff)) || (((double) fnr_min * (double) fnc_min * sizeof (double)) != ((double) fnr_min * (double) fnc_min * sizeof (double)))))
    {
 return ((0)) ;
    }
    ;
    ;
    ;
    ;
    fnr2 += nb ;
    fnc2 += nb ;
    ;
    if (fnr2 % 2 == 0) fnr2++ ;
    fnr2 = (((fnr2) > (fnr_min)) ? (fnr2) : (fnr_min)) ;
    fnc2 = (((fnc2) > (fnc_min)) ? (fnc2) : (fnc_min)) ;
    fnr2 = (((fnr2) < (fnrows_max)) ? (fnr2) : (fnrows_max)) ;
    fnc2 = (((fnc2) < (fncols_max)) ? (fnc2) : (fncols_max)) ;
    ;
    ;
    ;
    s = ((double) fnr2) * ((double) fnc2) ;
    if (((!((s * sizeof (double)) * (1.0+1e-8) <= (double) 0x7fffffff)) || ((s * sizeof (double)) != (s * sizeof (double)))))
    {
 double a = 0.9 * sqrt ((0x7fffffff / sizeof (double)) / s) ;
 fnr2 = (((fnr_min) > (a * fnr2)) ? (fnr_min) : (a * fnr2)) ;
 fnc2 = (((fnc_min) > (a * fnc2)) ? (fnc_min) : (a * fnc2)) ;
 newsize = fnr2 * fnc2 ;
 ;
 if (fnr2 % 2 == 0) fnr2++ ;
 fnc2 = newsize / fnr2 ;
    }
    fnr2 = (((fnr2) > (fnr_min)) ? (fnr2) : (fnr_min)) ;
    fnc2 = (((fnc2) > (fnc_min)) ? (fnc2) : (fnc_min)) ;
    newsize = fnr2 * fnc2 ;
    ;
    ;
    ;
    ;
    ;
    if (E [0] && do_what != 1)
    {
 ;
 umfdi_mem_free_tail_block (Numeric, E [0]) ;
 E [0] = 0 ;
 Work->Flublock = (double *) ((void *)0) ;
 Work->Flblock = (double *) ((void *)0) ;
 Work->Fublock = (double *) ((void *)0) ;
 Work->Fcblock = (double *) ((void *)0) ;
    }
    ;
    eloc = umfdi_mem_alloc_tail_block (Numeric, (((((sizeof (double) * (newsize))) + (sizeof (Unit)) - 1) / (sizeof (Unit))))) ;
    if (!eloc)
    {
 ;
 if (!umfdi_get_memory (Numeric, Work, 1 + (((((sizeof (double) * (newsize))) + (sizeof (Unit)) - 1) / (sizeof (Unit)))),
     Work->fnrows, Work->fncols, (0)))
 {
     return ((0)) ;
 }
 ;
 eloc = umfdi_mem_alloc_tail_block (Numeric, (((((sizeof (double) * (newsize))) + (sizeof (Unit)) - 1) / (sizeof (Unit))))) ;
    }
    while ((fnr2 != fnr_min || fnc2 != fnc_min) && !eloc)
    {
 fnr2 = (((fnr2 - 2) < (fnr2 * (0.95))) ? (fnr2 - 2) : (fnr2 * (0.95))) ;
 fnc2 = (((fnc2 - 2) < (fnc2 * (0.95))) ? (fnc2 - 2) : (fnc2 * (0.95))) ;
 ;
 ;
 fnr2 = (((fnr_min) > (fnr2)) ? (fnr_min) : (fnr2)) ;
 fnc2 = (((fnc_min) > (fnc2)) ? (fnc_min) : (fnc2)) ;
 ;
 if (fnr2 % 2 == 0) fnr2++ ;
 newsize = fnr2 * fnc2 ;
 ;
 eloc = umfdi_mem_alloc_tail_block (Numeric, (((((sizeof (double) * (newsize))) + (sizeof (Unit)) - 1) / (sizeof (Unit))))) ;
    }
    if (!eloc)
    {
 fnr2 = fnr_min ;
 fnc2 = fnc_min ;
 newsize = minsize ;
 ;
 eloc = umfdi_mem_alloc_tail_block (Numeric, (((((sizeof (double) * (newsize))) + (sizeof (Unit)) - 1) / (sizeof (Unit))))) ;
    }
    if (!eloc)
    {
 return ((0)) ;
    }
    ;
    ;
    ;
    fnr_curr = Work->fnr_curr ;
    ;
    ;
    fnrows = Work->fnrows ;
    fncols = Work->fncols ;
    Fcold = Work->Fcblock ;
    fnr2 -= nb ;
    fnc2 -= nb ;
    Work->Flublock = (double *) (Numeric->Memory + eloc) ;
    Work->Flblock = Work->Flublock + nb * nb ;
    Work->Fublock = Work->Flblock + nb * fnr2 ;
    Work->Fcblock = Work->Fublock + nb * fnc2 ;
    Fcnew = Work->Fcblock ;
    if (E [0])
    {
 for (j = 0 ; j < fncols ; j++)
 {
     col = Fcols [j] ;
     ;
     ;
     for (i = 0 ; i < fnrows ; i++)
     {
  Fcnew [i] = Fcold [i] ;
     }
     Fcnew += fnr2 ;
     Fcold += fnr_curr ;
     ;
     Fcpos [col] = j * fnr2 ;
 }
    }
    else if (do_what == 2)
    {
 for (j = 0 ; j < fncols ; j++)
 {
     col = Fcols [j] ;
     ;
     Fcpos [col] = j * fnr2 ;
 }
    }
    umfdi_mem_free_tail_block (Numeric, E [0]) ;
    E [0] = eloc ;
    Work->fnr_curr = fnr2 ;
    Work->fnc_curr = fnc2 ;
    Work->fcurr_size = newsize ;
    Work->do_grow = (0) ;
    ;
    ;
    ;
    return ((1)) ;
}

canonical_original_code:
int umfdi_grow_front(struct NumericType *Numeric, int fnr2, int fnc2, struct WorkType *Work, int do_what)
{
    double s;
    double *Fcold; double *Fcnew;
    int j; int i; int col; int *Fcpos; int *Fcols; int fnrows_max; int fncols_max; int fnr_curr; int nb; int fnrows_new; int fncols_new; int fnr_min; int fnc_min; int minsize; int newsize; int fnrows; int fncols; int *E; int eloc;
    Fcols = Work->Fcols ;
    Fcpos = Work->Fcpos ;
    E = Work->E ;
    nb = Work->nb ;
    fnrows_max = Work->fnrows_max + nb ;
    fncols_max = Work->fncols_max + nb ;
    ;
    ;
    ;
    ;
    ;
    fnrows_new = Work->fnrows_new + 1 ;
    fncols_new = Work->fncols_new + 1 ;
    ;
    if (fnrows_new % 2 == 0) fnrows_new++ ;
    fnrows_new += nb ;
    fncols_new += nb ;
    fnr_min = (((fnrows_new) < (fnrows_max)) ? (fnrows_new) : (fnrows_max)) ;
    fnc_min = (((fncols_new) < (fncols_max)) ? (fncols_new) : (fncols_max)) ;
    minsize = fnr_min * fnc_min ;
    if (((!(((double) fnr_min * (double) fnc_min * sizeof (double)) * (1.0+1e-8) <= (double) 0x7fffffff)) || (((double) fnr_min * (double) fnc_min * sizeof (double)) != ((double) fnr_min * (double) fnc_min * sizeof (double)))))
    {
 return ((0)) ;
    }
    ;
    ;
    ;
    ;
    fnr2 += nb ;
    fnc2 += nb ;
    ;
    if (fnr2 % 2 == 0) fnr2++ ;
    fnr2 = (((fnr2) > (fnr_min)) ? (fnr2) : (fnr_min)) ;
    fnc2 = (((fnc2) > (fnc_min)) ? (fnc2) : (fnc_min)) ;
    fnr2 = (((fnr2) < (fnrows_max)) ? (fnr2) : (fnrows_max)) ;
    fnc2 = (((fnc2) < (fncols_max)) ? (fnc2) : (fncols_max)) ;
    ;
    ;
    ;
    s = ((double) fnr2) * ((double) fnc2) ;
    if (((!((s * sizeof (double)) * (1.0+1e-8) <= (double) 0x7fffffff)) || ((s * sizeof (double)) != (s * sizeof (double)))))
    {
 double a = 0.9 * sqrt ((0x7fffffff / sizeof (double)) / s);
 fnr2 = (((fnr_min) > (a * fnr2)) ? (fnr_min) : (a * fnr2)) ;
 fnc2 = (((fnc_min) > (a * fnc2)) ? (fnc_min) : (a * fnc2)) ;
 newsize = fnr2 * fnc2 ;
 ;
 if (fnr2 % 2 == 0) fnr2++ ;
 fnc2 = newsize / fnr2 ;
    }
    fnr2 = (((fnr2) > (fnr_min)) ? (fnr2) : (fnr_min)) ;
    fnc2 = (((fnc2) > (fnc_min)) ? (fnc2) : (fnc_min)) ;
    newsize = fnr2 * fnc2 ;
    ;
    ;
    ;
    ;
    ;
    if (E [0] && do_what != 1)
    {
 ;
 umfdi_mem_free_tail_block (Numeric, E [0]) ;
 E [0] = 0 ;
 Work->Flublock = (double *) ((void *)0) ;
 Work->Flblock = (double *) ((void *)0) ;
 Work->Fublock = (double *) ((void *)0) ;
 Work->Fcblock = (double *) ((void *)0) ;
    }
    ;
    eloc = umfdi_mem_alloc_tail_block (Numeric, (((((sizeof (double) * (newsize))) + (sizeof (Unit)) - 1) / (sizeof (Unit))))) ;
    if (!eloc)
    {
 ;
 if (!umfdi_get_memory (Numeric, Work, 1 + (((((sizeof (double) * (newsize))) + (sizeof (Unit)) - 1) / (sizeof (Unit)))),
     Work->fnrows, Work->fncols, (0)))
 {
     return ((0)) ;
 }
 ;
 eloc = umfdi_mem_alloc_tail_block (Numeric, (((((sizeof (double) * (newsize))) + (sizeof (Unit)) - 1) / (sizeof (Unit))))) ;
    }
    while ((fnr2 != fnr_min || fnc2 != fnc_min) && !eloc)
    {
 fnr2 = (((fnr2 - 2) < (fnr2 * (0.95))) ? (fnr2 - 2) : (fnr2 * (0.95))) ;
 fnc2 = (((fnc2 - 2) < (fnc2 * (0.95))) ? (fnc2 - 2) : (fnc2 * (0.95))) ;
 ;
 ;
 fnr2 = (((fnr_min) > (fnr2)) ? (fnr_min) : (fnr2)) ;
 fnc2 = (((fnc_min) > (fnc2)) ? (fnc_min) : (fnc2)) ;
 ;
 if (fnr2 % 2 == 0) fnr2++ ;
 newsize = fnr2 * fnc2 ;
 ;
 eloc = umfdi_mem_alloc_tail_block (Numeric, (((((sizeof (double) * (newsize))) + (sizeof (Unit)) - 1) / (sizeof (Unit))))) ;
    }
    if (!eloc)
    {
 fnr2 = fnr_min ;
 fnc2 = fnc_min ;
 newsize = minsize ;
 ;
 eloc = umfdi_mem_alloc_tail_block (Numeric, (((((sizeof (double) * (newsize))) + (sizeof (Unit)) - 1) / (sizeof (Unit))))) ;
    }
    if (!eloc)
    {
 return ((0)) ;
    }
    ;
    ;
    ;
    fnr_curr = Work->fnr_curr ;
    ;
    ;
    fnrows = Work->fnrows ;
    fncols = Work->fncols ;
    Fcold = Work->Fcblock ;
    fnr2 -= nb ;
    fnc2 -= nb ;
    Work->Flublock = (double *) (Numeric->Memory + eloc) ;
    Work->Flblock = Work->Flublock + nb * nb ;
    Work->Fublock = Work->Flblock + nb * fnr2 ;
    Work->Fcblock = Work->Fublock + nb * fnc2 ;
    Fcnew = Work->Fcblock ;
    if (E [0])
    {
 for (j = 0 ; j < fncols ; j++)
 {
     col = Fcols [j] ;
     ;
     ;
     for (i = 0 ; i < fnrows ; i++)
     {
  Fcnew [i] = Fcold [i] ;
     }
     Fcnew += fnr2 ;
     Fcold += fnr_curr ;
     ;
     Fcpos [col] = j * fnr2 ;
 }
    }
    else if (do_what == 2)
    {
 for (j = 0 ; j < fncols ; j++)
 {
     col = Fcols [j] ;
     ;
     Fcpos [col] = j * fnr2 ;
 }
    }
    umfdi_mem_free_tail_block (Numeric, E [0]) ;
    E [0] = eloc ;
    Work->fnr_curr = fnr2 ;
    Work->fnc_curr = fnc2 ;
    Work->fcurr_size = newsize ;
    Work->do_grow = (0) ;
    ;
    ;
    ;
    return ((1)) ;
}

variable_types: struct NumericType { double flops; int scale; int valid; union Unit_union { struct { int size; } header; double xxxxxx; } *Memory; int ihead; int *Rperm; int ulen; double *D; int do_recip; double *Rs; int n_row; int tail_usage; int maxnrows; } *

variable_types: struct WorkType { int *E; double *Wx; int *Wp; int *Lpattern; int *Diagonal_map; int n_row; int *Front_new1strow; int Pivrow[64]; double *Flublock; int *Frows; } *

variable_types: s double

variable_types:
Fcold
double *

variable_types:
Fcnew
double *

variable_types: col int

variable_types:
Fcpos
int *

variable_types:
Fcols
int *

variable_types: nb int

variable_types: minsize int

variable_types: newsize int

variable_types: fnrows int

variable_types: fncols int

variable_types:
E
int *

variable_types: eloc int

variable_types: a double


original_code:
void umfzi_scale
(
    int n,
    DoubleComplex pivot,
    DoubleComplex X [ ]
)
{
    DoubleComplex x ;
    double s ;
    int i ;
    { (s) = (((((pivot).component [0]) < 0.)) ? -((pivot).component [0]) : ((pivot).component [0])) + (((((pivot).component [1]) < 0.)) ? -((pivot).component [1]) : ((pivot).component [1])) ; } ;
    if (s < 1e-12 || ((((pivot).component [0]) != ((pivot).component [0])) || (((pivot).component [1]) != ((pivot).component [1]))))
    {
 for (i = 0 ; i < n ; i++)
 {
     x = X [i] ;
     if (((((x).component [0]) != 0.) || (((x).component [1]) != 0.)))
     {
  { (void) umfpack_divcomplex ((x).component [0], (x).component [1], (pivot).component [0], (pivot).component [1], &((X [i]).component [0]), &((X [i]).component [1])) ; } ;
     }
 }
    }
    else
    {
 for (i = 0 ; i < n ; i++)
 {
     x = X [i] ;
     { (void) umfpack_divcomplex ((x).component [0], (x).component [1], (pivot).component [0], (pivot).component [1], &((X [i]).component [0]), &((X [i]).component [1])) ; } ;
 }
    }
}

canonical_original_code:
void umfzi_scale(int n, struct DoubleComplex pivot, struct DoubleComplex X[])
{
    struct DoubleComplex x;
    double s;
    int i;
    { (s) = (((((pivot).component [0]) < 0.)) ? -((pivot).component [0]) : ((pivot).component [0])) + (((((pivot).component [1]) < 0.)) ? -((pivot).component [1]) : ((pivot).component [1])) ; } ;
    if (s < 1e-12 || ((((pivot).component [0]) != ((pivot).component [0])) || (((pivot).component [1]) != ((pivot).component [1]))))
    {
 for (i = 0 ; i < n ; i++)
 {
     x = X [i] ;
     if (((((x).component [0]) != 0.) || (((x).component [1]) != 0.)))
     {
  { (void) umfpack_divcomplex ((x).component [0], (x).component [1], (pivot).component [0], (pivot).component [1], &((X [i]).component [0]), &((X [i]).component [1])) ; } ;
     }
 }
    }
    else
    {
 for (i = 0 ; i < n ; i++)
 {
     x = X [i] ;
     { (void) umfpack_divcomplex ((x).component [0], (x).component [1], (pivot).component [0], (pivot).component [1], &((X [i]).component [0]), &((X [i]).component [1])) ; } ;
 }
    }
}

variable_types: n int

variable_types: struct DoubleComplex { double component[2]; }

variable_types:
X
struct DoubleComplex []

variable_types: i int


original_code:
void umf_l_apply_order
(
    long Front [ ],
    const long Order [ ],
    long Temp [ ],
    long nn,
    long nfr
)
{
    long i, k ;
    for (i = 0 ; i < nn ; i++)
    {
 k = Order [i] ;
 ;
 if (k != (-1))
 {
     Temp [k] = Front [i] ;
 }
    }
    for (k = 0 ; k < nfr ; k++)
    {
 Front [k] = Temp [k] ;
    }
}

canonical_original_code:
void umf_l_apply_order(long Front[], long Order[], long Temp[], long nn, long nfr)
{
    long i; long k;
    for (i = 0 ; i < nn ; i++)
    {
 k = Order [i] ;
 ;
 if (k != (-1))
 {
     Temp [k] = Front [i] ;
 }
    }
    for (k = 0 ; k < nfr ; k++)
    {
 Front [k] = Temp [k] ;
    }
}

variable_types:
Front
long []

variable_types:
Order
long []

variable_types:
Temp
long []

variable_types: nn long

variable_types: nfr long

variable_types: i long

variable_types: k long