#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *, ...);
int /*<<< orphan*/ printf(char *, ...);
int check_params(int global_method, int local_method, int rqi_flag, int ndims) {
  extern FILE *Output_File;
  extern int ECHO;
  extern int EXPERT;
  extern int OUTPUT_METRICS;
  extern int OUTPUT_TIME;
  extern int LANCZOS_TYPE;
  extern double EIGEN_TOLERANCE;
  extern int LANCZOS_SO_INTERVAL;
  extern double BISECTION_SAFETY;
  extern int LANCZOS_CONVERGENCE_MODE;
  extern int RQI_CONVERGENCE_MODE;
  extern double WARNING_ORTHTOL;
  extern double WARNING_MISTOL;
  extern int LANCZOS_SO_PRECISION;
  extern int PERTURB;
  extern int NPERTURB;
  extern double PERTURB_MAX;
  extern int MAPPING_TYPE;
  extern int COARSE_NLEVEL_RQI;
  extern int OPT3D_NTRIES;
  extern int KL_METRIC;
  extern int KL_BAD_MOVES;
  extern int KL_NTRIES_BAD;
  extern double KL_IMBALANCE;
  extern double COARSEN_RATIO_MIN;
  extern int COARSE_NLEVEL_KL;
  extern int MATCH_TYPE;
  extern int SIMULATOR;
  extern int TERM_PROP;
  extern double CUT_TO_HOP_COST;
  int flag_params;
  flag_params = 0;
  if (ECHO < -2 || ECHO > 2) {
    printf("ECHO (%d) should be in [-2,2].\n", ECHO);
    flag_params = 1;
  }
  if (OUTPUT_METRICS < -2 || OUTPUT_METRICS > 2) {
    printf("WARNING: OUTPUT_METRICS (%d) should be in [-2,2].\n",
           OUTPUT_METRICS);
    if (Output_File != NULL) {
      fprintf(Output_File,
              "WARNING: OUTPUT_METRICS (%d) should be in [-2,2].\n",
              OUTPUT_METRICS);
    }
  }
  if (OUTPUT_TIME < 0 || OUTPUT_TIME > 2) {
    printf("WARNING: OUTPUT_TIME (%d) should be in [0,2].\n", OUTPUT_TIME);
    if (Output_File != NULL) {
      fprintf(Output_File, "WARNING: OUTPUT_TIME (%d) should be in [0,2].\n",
              OUTPUT_TIME);
    }
  }
  if (global_method == 1 || global_method == 2) {
    if (EXPERT) {
      if (LANCZOS_TYPE < 1 || LANCZOS_TYPE > 4) {
        printf("LANCZOS_TYPE (%d) should be in [1,4].\n", LANCZOS_TYPE);
        flag_params = 1;
      }
    } else {
      if (LANCZOS_TYPE < 1 || LANCZOS_TYPE > 3) {
        printf("LANCZOS_TYPE (%d) should be in [1,3].\n", LANCZOS_TYPE);
        flag_params = 1;
      }
    }
    if (EIGEN_TOLERANCE <= 0) {
      printf("EIGEN_TOLERANCE (%g) should be positive.\n", EIGEN_TOLERANCE);
      flag_params = 1;
    }
    if (LANCZOS_SO_INTERVAL <= 0) {
      printf("LANCZOS_SO_INTERVAL (%d) should be positive.\n",
             LANCZOS_SO_INTERVAL);
      flag_params = 1;
    }
    if (LANCZOS_SO_INTERVAL == 1) {
      printf("WARNING: More efficient if LANCZOS_SO_INTERVAL = 2, not 1.\n");
      if (Output_File != NULL) {
        fprintf(Output_File,
                "WARNING: More efficient if LANCZOS_SO_INTERVAL = 2, not 1.\n");
      }
    }
    if (BISECTION_SAFETY <= 0) {
      printf("BISECTION_SAFETY (%g) should be positive.\n", BISECTION_SAFETY);
      flag_params = 1;
    }
    if (LANCZOS_CONVERGENCE_MODE < 0 || LANCZOS_CONVERGENCE_MODE > 1) {
      printf("LANCZOS_CONVERGENCE_MODE (%d) should be in [0,1].\n",
             LANCZOS_CONVERGENCE_MODE);
      flag_params = 1;
    }
    if (WARNING_ORTHTOL == 0) {
      printf("WARNING: WARNING_ORTHTOL (%g) should be positive.\n",
             WARNING_ORTHTOL);
      if (Output_File != NULL) {
        fprintf(Output_File,
                "WARNING: WARNING_ORTHTOL (%g) should be positive.\n",
                WARNING_ORTHTOL);
      }
    }
    if (WARNING_MISTOL == 0) {
      printf("WARNING: WARNING_MISTOL (%g) should be positive.\n",
             WARNING_MISTOL);
      if (Output_File != NULL) {
        fprintf(Output_File,
                "WARNING: WARNING_MISTOL (%g) should be positive.\n",
                WARNING_MISTOL);
      }
    }
    if (LANCZOS_SO_PRECISION < 1 || LANCZOS_SO_PRECISION > 2) {
      printf("LANCZOS_SO_PRECISION (%d) should be in [1,2].\n",
             LANCZOS_SO_PRECISION);
      flag_params = 1;
    }
    if (PERTURB) {
      if (NPERTURB < 0) {
        printf("NPERTURB (%d) should be nonnegative.\n", NPERTURB);
        flag_params = 1;
      }
      if (NPERTURB > 0 && PERTURB_MAX < 0) {
        printf("PERTURB_MAX (%g) should be nonnegative.\n", PERTURB_MAX);
        flag_params = 1;
      }
    }
    if (MAPPING_TYPE < 0 || MAPPING_TYPE > 3) {
      printf("MAPPING_TYPE (%d) should be in [0,3].\n", MAPPING_TYPE);
      flag_params = 1;
    }
    if (ndims == 3 && OPT3D_NTRIES <= 0) {
      printf("OPT3D_NTRIES (%d) should be positive.\n", OPT3D_NTRIES);
      flag_params = 1;
    }
    if (global_method == 2 && rqi_flag) {
      if (COARSE_NLEVEL_RQI <= 0) {
        printf("COARSE_NLEVEL_RQI (%d) should be positive.\n",
               COARSE_NLEVEL_RQI);
        flag_params = 1;
      }
      if (RQI_CONVERGENCE_MODE < 0 || RQI_CONVERGENCE_MODE > 1) {
        printf("RQI_CONVERGENCE_MODE (%d) should be in [0,1].\n",
               RQI_CONVERGENCE_MODE);
        flag_params = 1;
      }
      if (TERM_PROP) {
        printf("WARNING: Using default Lanczos for extended eigenproblem, not "
               "RQI/Symmlq.\n");
      }
    }
    if (global_method == 1) {
      if (COARSE_NLEVEL_KL <= 0) {
        printf("COARSE_NLEVEL_KL (%d) should be positive.\n", COARSE_NLEVEL_KL);
        flag_params = 1;
      }
    }
    if (global_method == 1 || (global_method == 2 && rqi_flag)) {
      if (COARSEN_RATIO_MIN < .5) {
        printf("COARSEN_RATIO_MIN (%g) should be at least 1/2.\n",
               COARSEN_RATIO_MIN);
        flag_params = 1;
      }
      if (MATCH_TYPE < 1 || MATCH_TYPE > 9) {
        printf("MATCH_TYPE (%d) should be in [1,9].\n", MATCH_TYPE);
        flag_params = 1;
      }
    }
  }
  if (global_method == 1 || local_method == 1) {
    if (KL_METRIC < 1 || KL_METRIC > 2) {
      printf("KL_METRIC (%d) should be in [0,1].\n", KL_METRIC);
      flag_params = 1;
    }
    if (KL_BAD_MOVES < 0) {
      printf("KL_BAD_MOVES (%d) should be non-negative.\n", KL_BAD_MOVES);
      flag_params = 1;
    }
    if (KL_NTRIES_BAD < 0) {
      printf("KL_NTRIES_BAD (%d) should be non-negative.\n", KL_NTRIES_BAD);
      flag_params = 1;
    }
    if (KL_IMBALANCE < 0.0 || KL_IMBALANCE > 1.0) {
      printf("KL_IMBALANCE (%g) should be in [0,1].\n", KL_IMBALANCE);
      flag_params = 1;
    }
  }
  if (SIMULATOR < 0 || SIMULATOR > 3) {
    printf("SIMULATOR (%d) should be in [0,3].\n", SIMULATOR);
    flag_params = 1;
  }
  if (TERM_PROP) {
    if (CUT_TO_HOP_COST <= 0) {
      printf("CUT_TO_HOP_COST (%g) should be positive.\n", CUT_TO_HOP_COST);
      flag_params = 1;
    }
    if (ndims > 1) {
      printf("WARNING: May ignore terminal propagation in spectral quadri/octa "
             "section\n");
    }
  }
  return (flag_params);
}


x86 assembly (clang, -O0):
<check_params>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %edi,-0x4(%rbp)
mov    %esi,-0x8(%rbp)
mov    %edx,-0xc(%rbp)
mov    %ecx,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
mov    0x2e4e(%rip),%rax
cmpl   $0xfffffffe,(%rax)
jl     115b <check_params+0x3b>
mov    0x2e3e(%rip),%rax
cmpl   $0x2,(%rax)
jle    1179 <check_params+0x59>
mov    0x2e2e(%rip),%rax
mov    (%rax),%esi
lea    0xea5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x2e38(%rip),%rax
cmpl   $0xfffffffe,(%rax)
jl     1199 <check_params+0x79>
mov    0x2e28(%rip),%rax
cmpl   $0x2,(%rax)
jle    11e7 <check_params+0xc7>
mov    0x2e18(%rip),%rax
mov    (%rax),%esi
lea    0xe87(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    0x2e11(%rip),%rax
cmpq   $0x0,(%rax)
je     11e2 <check_params+0xc2>
mov    0x2e00(%rip),%rax
mov    (%rax),%rdi
mov    0x2de6(%rip),%rax
mov    (%rax),%edx
lea    0xe55(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
jmp    11e7 <check_params+0xc7>
mov    0x2d22(%rip),%rax
cmpl   $0x0,(%rax)
jl     1207 <check_params+0xe7>
mov    0x2d12(%rip),%rax
cmpl   $0x2,(%rax)
jle    1255 <check_params+0x135>
mov    0x2d02(%rip),%rax
mov    (%rax),%esi
lea    0xe4c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    0x2da3(%rip),%rax
cmpq   $0x0,(%rax)
je     1250 <check_params+0x130>
mov    0x2d92(%rip),%rax
mov    (%rax),%rdi
mov    0x2cd0(%rip),%rax
mov    (%rax),%edx
lea    0xe1a(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
jmp    1255 <check_params+0x135>
cmpl   $0x1,-0x4(%rbp)
je     1269 <check_params+0x149>
cmpl   $0x2,-0x4(%rbp)
jne    17b9 <check_params+0x699>
mov    0x2d28(%rip),%rax
cmpl   $0x0,(%rax)
je     12bc <check_params+0x19c>
mov    0x2c70(%rip),%rax
cmpl   $0x1,(%rax)
jl     1299 <check_params+0x179>
mov    0x2c60(%rip),%rax
cmpl   $0x4,(%rax)
jle    12b7 <check_params+0x197>
mov    0x2c50(%rip),%rax
mov    (%rax),%esi
lea    0xde9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
jmp    12ff <check_params+0x1df>
mov    0x2c2d(%rip),%rax
cmpl   $0x1,(%rax)
jl     12dc <check_params+0x1bc>
mov    0x2c1d(%rip),%rax
cmpl   $0x3,(%rax)
jle    12fa <check_params+0x1da>
mov    0x2c0d(%rip),%rax
mov    (%rax),%esi
lea    0xdcd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
jmp    12ff <check_params+0x1df>
xorps  %xmm0,%xmm0
mov    0x2c2f(%rip),%rax
ucomisd (%rax),%xmm0
jb     1333 <check_params+0x213>
mov    0x2c1e(%rip),%rax
movsd  (%rax),%xmm0
lea    0xdbb(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x2be6(%rip),%rax
cmpl   $0x0,(%rax)
jg     1361 <check_params+0x241>
mov    0x2bd6(%rip),%rax
mov    (%rax),%esi
lea    0xdb7(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x2bb8(%rip),%rax
cmpl   $0x1,(%rax)
jne    13ad <check_params+0x28d>
lea    0xdc0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
mov    0x2c42(%rip),%rax
cmpq   $0x0,(%rax)
je     13a8 <check_params+0x288>
mov    0x2c31(%rip),%rax
mov    (%rax),%rdi
lea    0xd97(%rip),%rsi
mov    $0x0,%al
call   1040 <fprintf@plt>
jmp    13ad <check_params+0x28d>
xorps  %xmm0,%xmm0
mov    0x2b89(%rip),%rax
ucomisd (%rax),%xmm0
jb     13e1 <check_params+0x2c1>
mov    0x2b78(%rip),%rax
movsd  (%rax),%xmm0
lea    0xda1(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x2b40(%rip),%rax
cmpl   $0x0,(%rax)
jl     1401 <check_params+0x2e1>
mov    0x2b30(%rip),%rax
cmpl   $0x1,(%rax)
jle    141f <check_params+0x2ff>
mov    0x2b20(%rip),%rax
mov    (%rax),%esi
lea    0xd8e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x2af2(%rip),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    148f <check_params+0x36f>
jp     148f <check_params+0x36f>
mov    0x2ad4(%rip),%rax
movsd  (%rax),%xmm0
lea    0xd83(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    0x2b6b(%rip),%rax
cmpq   $0x0,(%rax)
je     148a <check_params+0x36a>
mov    0x2b5a(%rip),%rax
mov    (%rax),%rdi
mov    0x2aa0(%rip),%rax
movsd  (%rax),%xmm0
lea    0xd4f(%rip),%rsi
mov    $0x1,%al
call   1040 <fprintf@plt>
jmp    148f <check_params+0x36f>
mov    0x2ad2(%rip),%rax
movsd  (%rax),%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    14ff <check_params+0x3df>
jp     14ff <check_params+0x3df>
mov    0x2ab4(%rip),%rax
movsd  (%rax),%xmm0
lea    0xd46(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
mov    0x2afb(%rip),%rax
cmpq   $0x0,(%rax)
je     14fa <check_params+0x3da>
mov    0x2aea(%rip),%rax
mov    (%rax),%rdi
mov    0x2a80(%rip),%rax
movsd  (%rax),%xmm0
lea    0xd12(%rip),%rsi
mov    $0x1,%al
call   1040 <fprintf@plt>
jmp    14ff <check_params+0x3df>
mov    0x29f2(%rip),%rax
cmpl   $0x1,(%rax)
jl     151f <check_params+0x3ff>
mov    0x29e2(%rip),%rax
cmpl   $0x2,(%rax)
jle    153d <check_params+0x41d>
mov    0x29d2(%rip),%rax
mov    (%rax),%esi
lea    0xd08(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x2a04(%rip),%rax
cmpl   $0x0,(%rax)
je     15c4 <check_params+0x4a4>
mov    0x2a04(%rip),%rax
cmpl   $0x0,(%rax)
jge    157b <check_params+0x45b>
mov    0x29f4(%rip),%rax
mov    (%rax),%esi
lea    0xcf9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x29d6(%rip),%rax
cmpl   $0x0,(%rax)
jle    15bf <check_params+0x49f>
xorps  %xmm0,%xmm0
mov    0x2a0b(%rip),%rax
ucomisd (%rax),%xmm0
jbe    15bf <check_params+0x49f>
mov    0x29fa(%rip),%rax
movsd  (%rax),%xmm0
lea    0xcdb(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
jmp    15c4 <check_params+0x4a4>
mov    0x29bd(%rip),%rax
cmpl   $0x0,(%rax)
jl     15e4 <check_params+0x4c4>
mov    0x29ad(%rip),%rax
cmpl   $0x3,(%rax)
jle    1602 <check_params+0x4e2>
mov    0x299d(%rip),%rax
mov    (%rax),%esi
lea    0xcc1(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
cmpl   $0x3,-0x10(%rbp)
jne    163a <check_params+0x51a>
mov    0x293d(%rip),%rax
cmpl   $0x0,(%rax)
jg     163a <check_params+0x51a>
mov    0x292d(%rip),%rax
mov    (%rax),%esi
lea    0xcb0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
cmpl   $0x2,-0x4(%rbp)
jne    16dd <check_params+0x5bd>
cmpl   $0x0,-0xc(%rbp)
je     16dd <check_params+0x5bd>
mov    0x291b(%rip),%rax
cmpl   $0x0,(%rax)
jg     167c <check_params+0x55c>
mov    0x290b(%rip),%rax
mov    (%rax),%esi
lea    0xc95(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x294d(%rip),%rax
cmpl   $0x0,(%rax)
jl     169c <check_params+0x57c>
mov    0x293d(%rip),%rax
cmpl   $0x1,(%rax)
jle    16ba <check_params+0x59a>
mov    0x292d(%rip),%rax
mov    (%rax),%esi
lea    0xc83(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x28e7(%rip),%rax
cmpl   $0x0,(%rax)
je     16d8 <check_params+0x5b8>
lea    0xc8d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    16dd <check_params+0x5bd>
cmpl   $0x1,-0x4(%rbp)
jne    171a <check_params+0x5fa>
mov    0x28f2(%rip),%rax
cmpl   $0x0,(%rax)
jg     1715 <check_params+0x5f5>
mov    0x28e2(%rip),%rax
mov    (%rax),%esi
lea    0xca2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
jmp    171a <check_params+0x5fa>
cmpl   $0x1,-0x4(%rbp)
je     1738 <check_params+0x618>
cmpl   $0x2,-0x4(%rbp)
jne    17b4 <check_params+0x694>
cmpl   $0x0,-0xc(%rbp)
je     17b4 <check_params+0x694>
movsd  0x8c0(%rip),%xmm0
mov    0x2839(%rip),%rax
ucomisd (%rax),%xmm0
jbe    1771 <check_params+0x651>
mov    0x2828(%rip),%rax
movsd  (%rax),%xmm0
lea    0xc71(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x2880(%rip),%rax
cmpl   $0x1,(%rax)
jl     1791 <check_params+0x671>
mov    0x2870(%rip),%rax
cmpl   $0x9,(%rax)
jle    17af <check_params+0x68f>
mov    0x2860(%rip),%rax
mov    (%rax),%esi
lea    0xc63(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
jmp    17b4 <check_params+0x694>
jmp    17b9 <check_params+0x699>
cmpl   $0x1,-0x4(%rbp)
je     17cd <check_params+0x6ad>
cmpl   $0x1,-0x8(%rbp)
jne    18bd <check_params+0x79d>
mov    0x27dc(%rip),%rax
cmpl   $0x1,(%rax)
jl     17ed <check_params+0x6cd>
mov    0x27cc(%rip),%rax
cmpl   $0x2,(%rax)
jle    180b <check_params+0x6eb>
mov    0x27bc(%rip),%rax
mov    (%rax),%esi
lea    0xc2c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x26ee(%rip),%rax
cmpl   $0x0,(%rax)
jge    1839 <check_params+0x719>
mov    0x26de(%rip),%rax
mov    (%rax),%esi
lea    0xc22(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x27b0(%rip),%rax
cmpl   $0x0,(%rax)
jge    1867 <check_params+0x747>
mov    0x27a0(%rip),%rax
mov    (%rax),%esi
lea    0xc1f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
xorps  %xmm0,%xmm0
mov    0x26bf(%rip),%rax
ucomisd (%rax),%xmm0
ja     1898 <check_params+0x778>
mov    0x26ae(%rip),%rax
movsd  (%rax),%xmm0
movsd  0x77a(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    18b8 <check_params+0x798>
mov    0x2691(%rip),%rax
movsd  (%rax),%xmm0
lea    0xbfa(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
jmp    18bd <check_params+0x79d>
mov    0x26fc(%rip),%rax
cmpl   $0x0,(%rax)
jl     18dd <check_params+0x7bd>
mov    0x26ec(%rip),%rax
cmpl   $0x3,(%rax)
jle    18fb <check_params+0x7db>
mov    0x26dc(%rip),%rax
mov    (%rax),%esi
lea    0xbde(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
mov    0x26a6(%rip),%rax
cmpl   $0x0,(%rax)
je     195c <check_params+0x83c>
xorps  %xmm0,%xmm0
mov    0x264b(%rip),%rax
ucomisd (%rax),%xmm0
jb     193f <check_params+0x81f>
mov    0x263a(%rip),%rax
movsd  (%rax),%xmm0
lea    0xbbe(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0x1,-0x14(%rbp)
cmpl   $0x1,-0x10(%rbp)
jle    1957 <check_params+0x837>
lea    0xbc9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
jmp    195c <check_params+0x83c>
mov    -0x14(%rbp),%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<check_params>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %ecx,%r14d
mov    %edx,%r12d
mov    %esi,%r15d
mov    %edi,%r13d
mov    0x2e32(%rip),%rax
mov    (%rax),%esi
lea    -0x3(%rsi),%eax
xor    %ebp,%ebp
cmp    $0xfffffffa,%eax
ja     117d <check_params+0x3d>
lea    0xe9f(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2e34(%rip),%rbx
mov    (%rbx),%esi
lea    -0x3(%rsi),%eax
cmp    $0xfffffffa,%eax
ja     11bb <check_params+0x7b>
lea    0xe9b(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x2e25(%rip),%rax
mov    (%rax),%rdi
test   %rdi,%rdi
je     11bb <check_params+0x7b>
mov    (%rbx),%edx
lea    0xe7c(%rip),%rsi
xor    %eax,%eax
call   1050 <fprintf@plt>
mov    0x2d4e(%rip),%rbx
mov    (%rbx),%esi
cmp    $0x3,%esi
jb     11f6 <check_params+0xb6>
lea    0xe93(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    0x2dea(%rip),%rax
mov    (%rax),%rdi
test   %rdi,%rdi
je     11f6 <check_params+0xb6>
mov    (%rbx),%edx
lea    0xe74(%rip),%rsi
xor    %eax,%eax
call   1050 <fprintf@plt>
lea    -0x1(%r13),%eax
cmp    $0x1,%eax
ja     155a <check_params+0x41a>
mov    0x2d8e(%rip),%rax
cmpl   $0x0,(%rax)
mov    0x2cdc(%rip),%rax
mov    (%rax),%esi
je     1229 <check_params+0xe9>
lea    -0x5(%rsi),%eax
cmp    $0xfffffffc,%eax
jae    1244 <check_params+0x104>
lea    0xe6b(%rip),%rdi
jmp    1238 <check_params+0xf8>
lea    -0x4(%rsi),%eax
cmp    $0xfffffffc,%eax
ja     1244 <check_params+0x104>
lea    0xe81(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2ced(%rip),%rax
movsd  (%rax),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jb     126c <check_params+0x12c>
lea    0xe80(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2cad(%rip),%rbx
mov    (%rbx),%esi
test   %esi,%esi
jle    1280 <check_params+0x140>
cmp    $0x1,%esi
je     129a <check_params+0x15a>
jmp    12cb <check_params+0x18b>
lea    0xe83(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    (%rbx),%esi
mov    $0x1,%ebp
cmp    $0x1,%esi
jne    12cb <check_params+0x18b>
lea    0x12c0(%rip),%rdi
call   1030 <puts@plt>
mov    0x2d1b(%rip),%rax
mov    (%rax),%rcx
test   %rcx,%rcx
je     12cb <check_params+0x18b>
lea    0xe7c(%rip),%rdi
mov    $0x3b,%esi
mov    $0x1,%edx
call   1060 <fwrite@plt>
mov    0x2c6e(%rip),%rax
movsd  (%rax),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jb     12f3 <check_params+0x1b3>
lea    0xe8d(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2c2e(%rip),%rax
mov    (%rax),%esi
cmp    $0x2,%esi
jb     1314 <check_params+0x1d4>
lea    0xe97(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2bfd(%rip),%rbx
movsd  (%rbx),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jne    1362 <check_params+0x222>
jp     1362 <check_params+0x222>
lea    0xea0(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
xorpd  %xmm1,%xmm1
mov    0x2c84(%rip),%rax
mov    (%rax),%rdi
test   %rdi,%rdi
je     1362 <check_params+0x222>
movsd  (%rbx),%xmm0
lea    0xe7b(%rip),%rsi
mov    $0x1,%al
call   1050 <fprintf@plt>
xorpd  %xmm1,%xmm1
mov    0x2bff(%rip),%rbx
movsd  (%rbx),%xmm0
ucomisd %xmm1,%xmm0
jne    13a4 <check_params+0x264>
jp     13a4 <check_params+0x264>
lea    0xe89(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    0x2c3e(%rip),%rax
mov    (%rax),%rdi
test   %rdi,%rdi
je     13a4 <check_params+0x264>
movsd  (%rbx),%xmm0
lea    0xe68(%rip),%rsi
mov    $0x1,%al
call   1050 <fprintf@plt>
mov    0x2b4d(%rip),%rax
mov    (%rax),%esi
lea    -0x3(%rsi),%eax
cmp    $0xfffffffd,%eax
ja     13c8 <check_params+0x288>
lea    0xe7b(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2b79(%rip),%rax
cmpl   $0x0,(%rax)
je     1422 <check_params+0x2e2>
mov    0x2b7d(%rip),%rbx
mov    (%rbx),%esi
test   %esi,%esi
jns    13f6 <check_params+0x2b6>
lea    0xe7e(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    (%rbx),%esi
mov    $0x1,%ebp
test   %esi,%esi
jle    1422 <check_params+0x2e2>
mov    0x2b9f(%rip),%rax
movsd  (%rax),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jbe    1422 <check_params+0x2e2>
lea    0xe76(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2b5f(%rip),%rax
mov    (%rax),%esi
cmp    $0x4,%esi
jb     1443 <check_params+0x303>
lea    0xe7e(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
cmp    $0x3,%r14d
jne    1469 <check_params+0x329>
mov    0x2b00(%rip),%rax
mov    (%rax),%esi
test   %esi,%esi
jg     1469 <check_params+0x329>
lea    0xe7f(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
cmp    $0x2,%r13d
sete   %al
test   %r12d,%r12d
setne  %bl
and    %al,%bl
cmp    $0x1,%bl
jne    14d6 <check_params+0x396>
mov    0x2aec(%rip),%rax
mov    (%rax),%esi
test   %esi,%esi
jg     149d <check_params+0x35d>
lea    0xe72(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2b2c(%rip),%rax
mov    (%rax),%esi
cmp    $0x2,%esi
jb     14be <check_params+0x37e>
lea    0xe7d(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2ae3(%rip),%rax
cmpl   $0x0,(%rax)
je     14d6 <check_params+0x396>
lea    0x1046(%rip),%rdi
call   1030 <puts@plt>
cmp    $0x1,%r13d
jne    14fc <check_params+0x3bc>
mov    0x2afd(%rip),%rax
mov    (%rax),%esi
test   %esi,%esi
jg     14fc <check_params+0x3bc>
lea    0xe6e(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
cmp    $0x1,%r13d
setne  %al
xor    $0x1,%bl
test   %bl,%al
jne    155a <check_params+0x41a>
mov    0x2a6f(%rip),%rax
movsd  (%rax),%xmm0
movsd  0xae3(%rip),%xmm1
ucomisd %xmm0,%xmm1
jbe    1536 <check_params+0x3f6>
lea    0xe5f(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2abb(%rip),%rax
mov    (%rax),%esi
lea    -0xa(%rsi),%eax
cmp    $0xfffffff6,%eax
ja     155a <check_params+0x41a>
lea    0xe6b(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
cmp    $0x1,%r13d
je     156a <check_params+0x42a>
cmp    $0x1,%r15d
jne    1600 <check_params+0x4c0>
mov    0x2a3f(%rip),%rax
mov    (%rax),%esi
lea    -0x3(%rsi),%eax
cmp    $0xfffffffd,%eax
ja     158e <check_params+0x44e>
lea    0xe5c(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x296b(%rip),%rax
mov    (%rax),%esi
test   %esi,%esi
jns    15ae <check_params+0x46e>
lea    0xe60(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2a3b(%rip),%rax
mov    (%rax),%esi
test   %esi,%esi
jns    15ce <check_params+0x48e>
lea    0xe6b(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x295b(%rip),%rax
movsd  (%rax),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
ja     15ed <check_params+0x4ad>
ucomisd 0xa1d(%rip),%xmm0
jbe    1600 <check_params+0x4c0>
lea    0xe65(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x29b9(%rip),%rax
mov    (%rax),%esi
cmp    $0x4,%esi
jb     1621 <check_params+0x4e1>
lea    0xe6b(%rip),%rdi
xor    %eax,%eax
call   1040 <printf@plt>
mov    $0x1,%ebp
mov    0x2980(%rip),%rax
cmpl   $0x0,(%rax)
je     1667 <check_params+0x527>
mov    0x292c(%rip),%rax
movsd  (%rax),%xmm0
xorpd  %xmm1,%xmm1
ucomisd %xmm0,%xmm1
jb     1655 <check_params+0x515>
lea    0xe5b(%rip),%rdi
mov    $0x1,%al
call   1040 <printf@plt>
mov    $0x1,%ebp
cmp    $0x2,%r14d
jl     1667 <check_params+0x527>
lea    0xe6c(%rip),%rdi
call   1030 <puts@plt>
mov    %ebp,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@ECHO = external global i32
@.str = [32 x i8] c"ECHO (%d) should be in [-2,2].\0A\00"
@OUTPUT_METRICS = external global i32
@.str.1 = [51 x i8] c"WARNING: OUTPUT_METRICS (%d) should be in [-2,2].\0A\00"
@Output_File = external global i32*
@OUTPUT_TIME = external global i32
@.str.2 = [47 x i8] c"WARNING: OUTPUT_TIME (%d) should be in [0,2].\0A\00"
@EXPERT = external global i32
@LANCZOS_TYPE = external global i32
@.str.3 = [39 x i8] c"LANCZOS_TYPE (%d) should be in [1,4].\0A\00"
@.str.4 = [39 x i8] c"LANCZOS_TYPE (%d) should be in [1,3].\0A\00"
@EIGEN_TOLERANCE = external global double
@.str.5 = [42 x i8] c"EIGEN_TOLERANCE (%g) should be positive.\0A\00"
@LANCZOS_SO_INTERVAL = external global i32
@.str.6 = [46 x i8] c"LANCZOS_SO_INTERVAL (%d) should be positive.\0A\00"
@.str.7 = [60 x i8] c"WARNING: More efficient if LANCZOS_SO_INTERVAL = 2, not 1.\0A\00"
@BISECTION_SAFETY = external global double
@.str.8 = [43 x i8] c"BISECTION_SAFETY (%g) should be positive.\0A\00"
@LANCZOS_CONVERGENCE_MODE = external global i32
@.str.9 = [51 x i8] c"LANCZOS_CONVERGENCE_MODE (%d) should be in [0,1].\0A\00"
@WARNING_ORTHTOL = external global double
@.str.10 = [51 x i8] c"WARNING: WARNING_ORTHTOL (%g) should be positive.\0A\00"
@WARNING_MISTOL = external global double
@.str.11 = [50 x i8] c"WARNING: WARNING_MISTOL (%g) should be positive.\0A\00"
@LANCZOS_SO_PRECISION = external global i32
@.str.12 = [47 x i8] c"LANCZOS_SO_PRECISION (%d) should be in [1,2].\0A\00"
@PERTURB = external global i32
@NPERTURB = external global i32
@.str.13 = [38 x i8] c"NPERTURB (%d) should be nonnegative.\0A\00"
@PERTURB_MAX = external global double
@.str.14 = [41 x i8] c"PERTURB_MAX (%g) should be nonnegative.\0A\00"
@MAPPING_TYPE = external global i32
@.str.15 = [39 x i8] c"MAPPING_TYPE (%d) should be in [0,3].\0A\00"
@OPT3D_NTRIES = external global i32
@.str.16 = [39 x i8] c"OPT3D_NTRIES (%d) should be positive.\0A\00"
@COARSE_NLEVEL_RQI = external global i32
@.str.17 = [44 x i8] c"COARSE_NLEVEL_RQI (%d) should be positive.\0A\00"
@RQI_CONVERGENCE_MODE = external global i32
@.str.18 = [47 x i8] c"RQI_CONVERGENCE_MODE (%d) should be in [0,1].\0A\00"
@TERM_PROP = external global i32
@.str.19 = [75 x i8] c"WARNING: Using default Lanczos for extended eigenproblem, not RQI/Symmlq.\0A\00"
@COARSE_NLEVEL_KL = external global i32
@.str.20 = [43 x i8] c"COARSE_NLEVEL_KL (%d) should be positive.\0A\00"
@COARSEN_RATIO_MIN = external global double
@.str.21 = [48 x i8] c"COARSEN_RATIO_MIN (%g) should be at least 1/2.\0A\00"
@MATCH_TYPE = external global i32
@.str.22 = [37 x i8] c"MATCH_TYPE (%d) should be in [1,9].\0A\00"
@KL_METRIC = external global i32
@.str.23 = [36 x i8] c"KL_METRIC (%d) should be in [0,1].\0A\00"
@KL_BAD_MOVES = external global i32
@.str.24 = [43 x i8] c"KL_BAD_MOVES (%d) should be non-negative.\0A\00"
@KL_NTRIES_BAD = external global i32
@.str.25 = [44 x i8] c"KL_NTRIES_BAD (%d) should be non-negative.\0A\00"
@KL_IMBALANCE = external global double
@.str.26 = [39 x i8] c"KL_IMBALANCE (%g) should be in [0,1].\0A\00"
@SIMULATOR = external global i32
@.str.27 = [36 x i8] c"SIMULATOR (%d) should be in [0,3].\0A\00"
@CUT_TO_HOP_COST = external global double
@.str.28 = [42 x i8] c"CUT_TO_HOP_COST (%g) should be positive.\0A\00"
@.str.29 = [74 x i8] c"WARNING: May ignore terminal propagation in spectral quadri/octa section\0A\00"
define i32 @check_params(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
store i32 %0, i32* %5
store i32 %1, i32* %6
store i32 %2, i32* %7
store i32 %3, i32* %8
store i32 0, i32* %9
%10 = load i32, i32* @ECHO
%11 = icmp slt i32 %10, -2
br i1 %11, label %15, label %12
12: ; preds = %4
%13 = load i32, i32* @ECHO
%14 = icmp sgt i32 %13, 2
br i1 %14, label %15, label %18
15: ; preds = %12, %4
%16 = load i32, i32* @ECHO
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str, i64 0, i64 0), i32 %16)
store i32 1, i32* %9
br label %18
18: ; preds = %15, %12
%19 = load i32, i32* @OUTPUT_METRICS
%20 = icmp slt i32 %19, -2
br i1 %20, label %24, label %21
21: ; preds = %18
%22 = load i32, i32* @OUTPUT_METRICS
%23 = icmp sgt i32 %22, 2
br i1 %23, label %24, label %34
24: ; preds = %21, %18
%25 = load i32, i32* @OUTPUT_METRICS
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.1, i64 0, i64 0), i32 %25)
%27 = load i32*, i32** @Output_File
%28 = icmp ne i32* %27, null
br i1 %28, label %29, label %33
29: ; preds = %24
%30 = load i32*, i32** @Output_File
%31 = load i32, i32* @OUTPUT_METRICS
%32 = call i32 (i32*, i8*, ...) @fprintf(i32* %30, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.1, i64 0, i64 0), i32 %31)
br label %33
33: ; preds = %29, %24
br label %34
34: ; preds = %33, %21
%35 = load i32, i32* @OUTPUT_TIME
%36 = icmp slt i32 %35, 0
br i1 %36, label %40, label %37
37: ; preds = %34
%38 = load i32, i32* @OUTPUT_TIME
%39 = icmp sgt i32 %38, 2
br i1 %39, label %40, label %50
40: ; preds = %37, %34
%41 = load i32, i32* @OUTPUT_TIME
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.2, i64 0, i64 0), i32 %41)
%43 = load i32*, i32** @Output_File
%44 = icmp ne i32* %43, null
br i1 %44, label %45, label %49
45: ; preds = %40
%46 = load i32*, i32** @Output_File
%47 = load i32, i32* @OUTPUT_TIME
%48 = call i32 (i32*, i8*, ...) @fprintf(i32* %46, i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.2, i64 0, i64 0), i32 %47)
br label %49
49: ; preds = %45, %40
br label %50
50: ; preds = %49, %37
%51 = load i32, i32* %5
%52 = icmp eq i32 %51, 1
br i1 %52, label %56, label %53
53: ; preds = %50
%54 = load i32, i32* %5
%55 = icmp eq i32 %54, 2
br i1 %55, label %56, label %252
56: ; preds = %53, %50
%57 = load i32, i32* @EXPERT
%58 = icmp ne i32 %57, 0
br i1 %58, label %59, label %69
59: ; preds = %56
%60 = load i32, i32* @LANCZOS_TYPE
%61 = icmp slt i32 %60, 1
br i1 %61, label %65, label %62
62: ; preds = %59
%63 = load i32, i32* @LANCZOS_TYPE
%64 = icmp sgt i32 %63, 4
br i1 %64, label %65, label %68
65: ; preds = %62, %59
%66 = load i32, i32* @LANCZOS_TYPE
%67 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.3, i64 0, i64 0), i32 %66)
store i32 1, i32* %9
br label %68
68: ; preds = %65, %62
br label %79
69: ; preds = %56
%70 = load i32, i32* @LANCZOS_TYPE
%71 = icmp slt i32 %70, 1
br i1 %71, label %75, label %72
72: ; preds = %69
%73 = load i32, i32* @LANCZOS_TYPE
%74 = icmp sgt i32 %73, 3
br i1 %74, label %75, label %78
75: ; preds = %72, %69
%76 = load i32, i32* @LANCZOS_TYPE
%77 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.4, i64 0, i64 0), i32 %76)
store i32 1, i32* %9
br label %78
78: ; preds = %75, %72
br label %79
79: ; preds = %78, %68
%80 = load double, double* @EIGEN_TOLERANCE
%81 = fcmp ole double %80, 0.000000e+00
br i1 %81, label %82, label %85
82: ; preds = %79
%83 = load double, double* @EIGEN_TOLERANCE
%84 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.5, i64 0, i64 0), double %83)
store i32 1, i32* %9
br label %85
85: ; preds = %82, %79
%86 = load i32, i32* @LANCZOS_SO_INTERVAL
%87 = icmp sle i32 %86, 0
br i1 %87, label %88, label %91
88: ; preds = %85
%89 = load i32, i32* @LANCZOS_SO_INTERVAL
%90 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.6, i64 0, i64 0), i32 %89)
store i32 1, i32* %9
br label %91
91: ; preds = %88, %85
%92 = load i32, i32* @LANCZOS_SO_INTERVAL
%93 = icmp eq i32 %92, 1
br i1 %93, label %94, label %102
94: ; preds = %91
%95 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.7, i64 0, i64 0))
%96 = load i32*, i32** @Output_File
%97 = icmp ne i32* %96, null
br i1 %97, label %98, label %101
98: ; preds = %94
%99 = load i32*, i32** @Output_File
%100 = call i32 (i32*, i8*, ...) @fprintf(i32* %99, i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.7, i64 0, i64 0))
br label %101
101: ; preds = %98, %94
br label %102
102: ; preds = %101, %91
%103 = load double, double* @BISECTION_SAFETY
%104 = fcmp ole double %103, 0.000000e+00
br i1 %104, label %105, label %108
105: ; preds = %102
%106 = load double, double* @BISECTION_SAFETY
%107 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.8, i64 0, i64 0), double %106)
store i32 1, i32* %9
br label %108
108: ; preds = %105, %102
%109 = load i32, i32* @LANCZOS_CONVERGENCE_MODE
%110 = icmp slt i32 %109, 0
br i1 %110, label %114, label %111
111: ; preds = %108
%112 = load i32, i32* @LANCZOS_CONVERGENCE_MODE
%113 = icmp sgt i32 %112, 1
br i1 %113, label %114, label %117
114: ; preds = %111, %108
%115 = load i32, i32* @LANCZOS_CONVERGENCE_MODE
%116 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.9, i64 0, i64 0), i32 %115)
store i32 1, i32* %9
br label %117
117: ; preds = %114, %111
%118 = load double, double* @WARNING_ORTHTOL
%119 = fcmp oeq double %118, 0.000000e+00
br i1 %119, label %120, label %130
120: ; preds = %117
%121 = load double, double* @WARNING_ORTHTOL
%122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.10, i64 0, i64 0), double %121)
%123 = load i32*, i32** @Output_File
%124 = icmp ne i32* %123, null
br i1 %124, label %125, label %129
125: ; preds = %120
%126 = load i32*, i32** @Output_File
%127 = load double, double* @WARNING_ORTHTOL
%128 = call i32 (i32*, i8*, ...) @fprintf(i32* %126, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.10, i64 0, i64 0), double %127)
br label %129
129: ; preds = %125, %120
br label %130
130: ; preds = %129, %117
%131 = load double, double* @WARNING_MISTOL
%132 = fcmp oeq double %131, 0.000000e+00
br i1 %132, label %133, label %143
133: ; preds = %130
%134 = load double, double* @WARNING_MISTOL
%135 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.11, i64 0, i64 0), double %134)
%136 = load i32*, i32** @Output_File
%137 = icmp ne i32* %136, null
br i1 %137, label %138, label %142
138: ; preds = %133
%139 = load i32*, i32** @Output_File
%140 = load double, double* @WARNING_MISTOL
%141 = call i32 (i32*, i8*, ...) @fprintf(i32* %139, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.11, i64 0, i64 0), double %140)
br label %142
142: ; preds = %138, %133
br label %143
143: ; preds = %142, %130
%144 = load i32, i32* @LANCZOS_SO_PRECISION
%145 = icmp slt i32 %144, 1
br i1 %145, label %149, label %146
146: ; preds = %143
%147 = load i32, i32* @LANCZOS_SO_PRECISION
%148 = icmp sgt i32 %147, 2
br i1 %148, label %149, label %152
149: ; preds = %146, %143
%150 = load i32, i32* @LANCZOS_SO_PRECISION
%151 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.12, i64 0, i64 0), i32 %150)
store i32 1, i32* %9
br label %152
152: ; preds = %149, %146
%153 = load i32, i32* @PERTURB
%154 = icmp ne i32 %153, 0
br i1 %154, label %155, label %171
155: ; preds = %152
%156 = load i32, i32* @NPERTURB
%157 = icmp slt i32 %156, 0
br i1 %157, label %158, label %161
158: ; preds = %155
%159 = load i32, i32* @NPERTURB
%160 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.13, i64 0, i64 0), i32 %159)
store i32 1, i32* %9
br label %161
161: ; preds = %158, %155
%162 = load i32, i32* @NPERTURB
%163 = icmp sgt i32 %162, 0
br i1 %163, label %164, label %170
164: ; preds = %161
%165 = load double, double* @PERTURB_MAX
%166 = fcmp olt double %165, 0.000000e+00
br i1 %166, label %167, label %170
167: ; preds = %164
%168 = load double, double* @PERTURB_MAX
%169 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.14, i64 0, i64 0), double %168)
store i32 1, i32* %9
br label %170
170: ; preds = %167, %164, %161
br label %171
171: ; preds = %170, %152
%172 = load i32, i32* @MAPPING_TYPE
%173 = icmp slt i32 %172, 0
br i1 %173, label %177, label %174
174: ; preds = %171
%175 = load i32, i32* @MAPPING_TYPE
%176 = icmp sgt i32 %175, 3
br i1 %176, label %177, label %180
177: ; preds = %174, %171
%178 = load i32, i32* @MAPPING_TYPE
%179 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.15, i64 0, i64 0), i32 %178)
store i32 1, i32* %9
br label %180
180: ; preds = %177, %174
%181 = load i32, i32* %8
%182 = icmp eq i32 %181, 3
br i1 %182, label %183, label %189
183: ; preds = %180
%184 = load i32, i32* @OPT3D_NTRIES
%185 = icmp sle i32 %184, 0
br i1 %185, label %186, label %189
186: ; preds = %183
%187 = load i32, i32* @OPT3D_NTRIES
%188 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.16, i64 0, i64 0), i32 %187)
store i32 1, i32* %9
br label %189
189: ; preds = %186, %183, %180
%190 = load i32, i32* %5
%191 = icmp eq i32 %190, 2
br i1 %191, label %192, label %216
192: ; preds = %189
%193 = load i32, i32* %7
%194 = icmp ne i32 %193, 0
br i1 %194, label %195, label %216
195: ; preds = %192
%196 = load i32, i32* @COARSE_NLEVEL_RQI
%197 = icmp sle i32 %196, 0
br i1 %197, label %198, label %201
198: ; preds = %195
%199 = load i32, i32* @COARSE_NLEVEL_RQI
%200 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.17, i64 0, i64 0), i32 %199)
store i32 1, i32* %9
br label %201
201: ; preds = %198, %195
%202 = load i32, i32* @RQI_CONVERGENCE_MODE
%203 = icmp slt i32 %202, 0
br i1 %203, label %207, label %204
204: ; preds = %201
%205 = load i32, i32* @RQI_CONVERGENCE_MODE
%206 = icmp sgt i32 %205, 1
br i1 %206, label %207, label %210
207: ; preds = %204, %201
%208 = load i32, i32* @RQI_CONVERGENCE_MODE
%209 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.18, i64 0, i64 0), i32 %208)
store i32 1, i32* %9
br label %210
210: ; preds = %207, %204
%211 = load i32, i32* @TERM_PROP
%212 = icmp ne i32 %211, 0
br i1 %212, label %213, label %215
213: ; preds = %210
%214 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([75 x i8], [75 x i8]* @.str.19, i64 0, i64 0))
br label %215
215: ; preds = %213, %210
br label %216
216: ; preds = %215, %192, %189
%217 = load i32, i32* %5
%218 = icmp eq i32 %217, 1
br i1 %218, label %219, label %226
219: ; preds = %216
%220 = load i32, i32* @COARSE_NLEVEL_KL
%221 = icmp sle i32 %220, 0
br i1 %221, label %222, label %225
222: ; preds = %219
%223 = load i32, i32* @COARSE_NLEVEL_KL
%224 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.20, i64 0, i64 0), i32 %223)
store i32 1, i32* %9
br label %225
225: ; preds = %222, %219
br label %226
226: ; preds = %225, %216
%227 = load i32, i32* %5
%228 = icmp eq i32 %227, 1
br i1 %228, label %235, label %229
229: ; preds = %226
%230 = load i32, i32* %5
%231 = icmp eq i32 %230, 2
br i1 %231, label %232, label %251
232: ; preds = %229
%233 = load i32, i32* %7
%234 = icmp ne i32 %233, 0
br i1 %234, label %235, label %251
235: ; preds = %232, %226
%236 = load double, double* @COARSEN_RATIO_MIN
%237 = fcmp olt double %236, 5.000000e-01
br i1 %237, label %238, label %241
238: ; preds = %235
%239 = load double, double* @COARSEN_RATIO_MIN
%240 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.21, i64 0, i64 0), double %239)
store i32 1, i32* %9
br label %241
241: ; preds = %238, %235
%242 = load i32, i32* @MATCH_TYPE
%243 = icmp slt i32 %242, 1
br i1 %243, label %247, label %244
244: ; preds = %241
%245 = load i32, i32* @MATCH_TYPE
%246 = icmp sgt i32 %245, 9
br i1 %246, label %247, label %250
247: ; preds = %244, %241
%248 = load i32, i32* @MATCH_TYPE
%249 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.22, i64 0, i64 0), i32 %248)
store i32 1, i32* %9
br label %250
250: ; preds = %247, %244
br label %251
251: ; preds = %250, %232, %229
br label %252
252: ; preds = %251, %53
%253 = load i32, i32* %5
%254 = icmp eq i32 %253, 1
br i1 %254, label %258, label %255
255: ; preds = %252
%256 = load i32, i32* %6
%257 = icmp eq i32 %256, 1
br i1 %257, label %258, label %289
258: ; preds = %255, %252
%259 = load i32, i32* @KL_METRIC
%260 = icmp slt i32 %259, 1
br i1 %260, label %264, label %261
261: ; preds = %258
%262 = load i32, i32* @KL_METRIC
%263 = icmp sgt i32 %262, 2
br i1 %263, label %264, label %267
264: ; preds = %261, %258
%265 = load i32, i32* @KL_METRIC
%266 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.23, i64 0, i64 0), i32 %265)
store i32 1, i32* %9
br label %267
267: ; preds = %264, %261
%268 = load i32, i32* @KL_BAD_MOVES
%269 = icmp slt i32 %268, 0
br i1 %269, label %270, label %273
270: ; preds = %267
%271 = load i32, i32* @KL_BAD_MOVES
%272 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.24, i64 0, i64 0), i32 %271)
store i32 1, i32* %9
br label %273
273: ; preds = %270, %267
%274 = load i32, i32* @KL_NTRIES_BAD
%275 = icmp slt i32 %274, 0
br i1 %275, label %276, label %279
276: ; preds = %273
%277 = load i32, i32* @KL_NTRIES_BAD
%278 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.25, i64 0, i64 0), i32 %277)
store i32 1, i32* %9
br label %279
279: ; preds = %276, %273
%280 = load double, double* @KL_IMBALANCE
%281 = fcmp olt double %280, 0.000000e+00
br i1 %281, label %285, label %282
282: ; preds = %279
%283 = load double, double* @KL_IMBALANCE
%284 = fcmp ogt double %283, 1.000000e+00
br i1 %284, label %285, label %288
285: ; preds = %282, %279
%286 = load double, double* @KL_IMBALANCE
%287 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.26, i64 0, i64 0), double %286)
store i32 1, i32* %9
br label %288
288: ; preds = %285, %282
br label %289
289: ; preds = %288, %255
%290 = load i32, i32* @SIMULATOR
%291 = icmp slt i32 %290, 0
br i1 %291, label %295, label %292
292: ; preds = %289
%293 = load i32, i32* @SIMULATOR
%294 = icmp sgt i32 %293, 3
br i1 %294, label %295, label %298
295: ; preds = %292, %289
%296 = load i32, i32* @SIMULATOR
%297 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.27, i64 0, i64 0), i32 %296)
store i32 1, i32* %9
br label %298
298: ; preds = %295, %292
%299 = load i32, i32* @TERM_PROP
%300 = icmp ne i32 %299, 0
br i1 %300, label %301, label %313
301: ; preds = %298
%302 = load double, double* @CUT_TO_HOP_COST
%303 = fcmp ole double %302, 0.000000e+00
br i1 %303, label %304, label %307
304: ; preds = %301
%305 = load double, double* @CUT_TO_HOP_COST
%306 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.28, i64 0, i64 0), double %305)
store i32 1, i32* %9
br label %307
307: ; preds = %304, %301
%308 = load i32, i32* %8
%309 = icmp sgt i32 %308, 1
br i1 %309, label %310, label %312
310: ; preds = %307
%311 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.29, i64 0, i64 0))
br label %312
312: ; preds = %310, %307
br label %313
313: ; preds = %312, %298
%314 = load i32, i32* %9
ret i32 %314
}

LLVM IR (-O2):
@ECHO = external global i32
@.str = [32 x i8] c"ECHO (%d) should be in [-2,2].\0A\00"
@OUTPUT_METRICS = external global i32
@.str.1 = [51 x i8] c"WARNING: OUTPUT_METRICS (%d) should be in [-2,2].\0A\00"
@Output_File = external global i32*
@OUTPUT_TIME = external global i32
@.str.2 = [47 x i8] c"WARNING: OUTPUT_TIME (%d) should be in [0,2].\0A\00"
@EXPERT = external global i32
@LANCZOS_TYPE = external global i32
@.str.3 = [39 x i8] c"LANCZOS_TYPE (%d) should be in [1,4].\0A\00"
@.str.4 = [39 x i8] c"LANCZOS_TYPE (%d) should be in [1,3].\0A\00"
@EIGEN_TOLERANCE = external global double
@.str.5 = [42 x i8] c"EIGEN_TOLERANCE (%g) should be positive.\0A\00"
@LANCZOS_SO_INTERVAL = external global i32
@.str.6 = [46 x i8] c"LANCZOS_SO_INTERVAL (%d) should be positive.\0A\00"
@.str.7 = [60 x i8] c"WARNING: More efficient if LANCZOS_SO_INTERVAL = 2, not 1.\0A\00"
@BISECTION_SAFETY = external global double
@.str.8 = [43 x i8] c"BISECTION_SAFETY (%g) should be positive.\0A\00"
@LANCZOS_CONVERGENCE_MODE = external global i32
@.str.9 = [51 x i8] c"LANCZOS_CONVERGENCE_MODE (%d) should be in [0,1].\0A\00"
@WARNING_ORTHTOL = external global double
@.str.10 = [51 x i8] c"WARNING: WARNING_ORTHTOL (%g) should be positive.\0A\00"
@WARNING_MISTOL = external global double
@.str.11 = [50 x i8] c"WARNING: WARNING_MISTOL (%g) should be positive.\0A\00"
@LANCZOS_SO_PRECISION = external global i32
@.str.12 = [47 x i8] c"LANCZOS_SO_PRECISION (%d) should be in [1,2].\0A\00"
@PERTURB = external global i32
@NPERTURB = external global i32
@.str.13 = [38 x i8] c"NPERTURB (%d) should be nonnegative.\0A\00"
@PERTURB_MAX = external global double
@.str.14 = [41 x i8] c"PERTURB_MAX (%g) should be nonnegative.\0A\00"
@MAPPING_TYPE = external global i32
@.str.15 = [39 x i8] c"MAPPING_TYPE (%d) should be in [0,3].\0A\00"
@OPT3D_NTRIES = external global i32
@.str.16 = [39 x i8] c"OPT3D_NTRIES (%d) should be positive.\0A\00"
@COARSE_NLEVEL_RQI = external global i32
@.str.17 = [44 x i8] c"COARSE_NLEVEL_RQI (%d) should be positive.\0A\00"
@RQI_CONVERGENCE_MODE = external global i32
@.str.18 = [47 x i8] c"RQI_CONVERGENCE_MODE (%d) should be in [0,1].\0A\00"
@TERM_PROP = external global i32
@COARSE_NLEVEL_KL = external global i32
@.str.20 = [43 x i8] c"COARSE_NLEVEL_KL (%d) should be positive.\0A\00"
@COARSEN_RATIO_MIN = external global double
@.str.21 = [48 x i8] c"COARSEN_RATIO_MIN (%g) should be at least 1/2.\0A\00"
@MATCH_TYPE = external global i32
@.str.22 = [37 x i8] c"MATCH_TYPE (%d) should be in [1,9].\0A\00"
@KL_METRIC = external global i32
@.str.23 = [36 x i8] c"KL_METRIC (%d) should be in [0,1].\0A\00"
@KL_BAD_MOVES = external global i32
@.str.24 = [43 x i8] c"KL_BAD_MOVES (%d) should be non-negative.\0A\00"
@KL_NTRIES_BAD = external global i32
@.str.25 = [44 x i8] c"KL_NTRIES_BAD (%d) should be non-negative.\0A\00"
@KL_IMBALANCE = external global double
@.str.26 = [39 x i8] c"KL_IMBALANCE (%g) should be in [0,1].\0A\00"
@SIMULATOR = external global i32
@.str.27 = [36 x i8] c"SIMULATOR (%d) should be in [0,3].\0A\00"
@CUT_TO_HOP_COST = external global double
@.str.28 = [42 x i8] c"CUT_TO_HOP_COST (%g) should be positive.\0A\00"
@str = [73 x i8] c"WARNING: May ignore terminal propagation in spectral quadri/octa section\00"
@str.30 = [74 x i8] c"WARNING: Using default Lanczos for extended eigenproblem, not RQI/Symmlq.\00"
@str.31 = [59 x i8] c"WARNING: More efficient if LANCZOS_SO_INTERVAL = 2, not 1.\00"
define i32 @check_params(i32 %0, i32 %1, i32 %2, i32 %3) {
%5 = load i32, i32* @ECHO
%6 = add i32 %5, -3
%7 = icmp ult i32 %6, -5
br i1 %7, label %8, label %10
8: ; preds = %4
%9 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @.str, i64 0, i64 0), i32 %5)
br label %10
10: ; preds = %4, %8
%11 = phi i32 [ 1, %8 ], [ 0, %4 ]
%12 = load i32, i32* @OUTPUT_METRICS
%13 = add i32 %12, -3
%14 = icmp ult i32 %13, -5
br i1 %14, label %15, label %22
15: ; preds = %10
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([51 x i8], [51 x i8]* @.str.1, i64 0, i64 0), i32 %12)
%17 = load i32*, i32** @Output_File
%18 = icmp eq i32* %17, null
br i1 %18, label %22, label %19
19: ; preds = %15
%20 = load i32, i32* @OUTPUT_METRICS
%21 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %17, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.1, i64 0, i64 0), i32 %20)
br label %22
22: ; preds = %15, %19, %10
%23 = load i32, i32* @OUTPUT_TIME
%24 = icmp ugt i32 %23, 2
br i1 %24, label %25, label %32
25: ; preds = %22
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @.str.2, i64 0, i64 0), i32 %23)
%27 = load i32*, i32** @Output_File
%28 = icmp eq i32* %27, null
br i1 %28, label %32, label %29
29: ; preds = %25
%30 = load i32, i32* @OUTPUT_TIME
%31 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %27, i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.2, i64 0, i64 0), i32 %30)
br label %32
32: ; preds = %25, %29, %22
%33 = icmp eq i32 %0, 1
%34 = icmp eq i32 %0, 2
%35 = add i32 %0, -1
%36 = icmp ult i32 %35, 2
br i1 %36, label %37, label %187
37: ; preds = %32
%38 = load i32, i32* @EXPERT
%39 = icmp eq i32 %38, 0
%40 = load i32, i32* @LANCZOS_TYPE
br i1 %39, label %44, label %41
41: ; preds = %37
%42 = add i32 %40, -5
%43 = icmp ult i32 %42, -4
br i1 %43, label %47, label %50
44: ; preds = %37
%45 = add i32 %40, -4
%46 = icmp ult i32 %45, -3
br i1 %46, label %47, label %50
47: ; preds = %44, %41
%48 = phi i8* [ getelementptr inbounds ([39 x i8], [39 x i8]* @.str.3, i64 0, i64 0), %41 ], [ getelementptr inbounds ([39 x i8], [39 x i8]* @.str.4, i64 0, i64 0), %44 ]
%49 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) %48, i32 %40)
br label %50
50: ; preds = %47, %44, %41
%51 = phi i32 [ %11, %41 ], [ %11, %44 ], [ 1, %47 ]
%52 = load double, double* @EIGEN_TOLERANCE
%53 = fcmp ugt double %52, 0.000000e+00
br i1 %53, label %56, label %54
54: ; preds = %50
%55 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @.str.5, i64 0, i64 0), double %52)
br label %56
56: ; preds = %54, %50
%57 = phi i32 [ 1, %54 ], [ %51, %50 ]
%58 = load i32, i32* @LANCZOS_SO_INTERVAL
%59 = icmp slt i32 %58, 1
br i1 %59, label %60, label %63
60: ; preds = %56
%61 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @.str.6, i64 0, i64 0), i32 %58)
%62 = load i32, i32* @LANCZOS_SO_INTERVAL
br label %63
63: ; preds = %60, %56
%64 = phi i32 [ %62, %60 ], [ %58, %56 ]
%65 = phi i32 [ 1, %60 ], [ %57, %56 ]
%66 = icmp eq i32 %64, 1
br i1 %66, label %67, label %73
67: ; preds = %63
%68 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([59 x i8], [59 x i8]* @str.31, i64 0, i64 0))
%69 = load i32*, i32** @Output_File
%70 = icmp eq i32* %69, null
br i1 %70, label %73, label %71
71: ; preds = %67
%72 = tail call i64 @fwrite(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.7, i64 0, i64 0), i64 59, i64 1, i32* %69)
br label %73
73: ; preds = %67, %71, %63
%74 = load double, double* @BISECTION_SAFETY
%75 = fcmp ugt double %74, 0.000000e+00
br i1 %75, label %78, label %76
76: ; preds = %73
%77 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @.str.8, i64 0, i64 0), double %74)
br label %78
78: ; preds = %76, %73
%79 = phi i32 [ 1, %76 ], [ %65, %73 ]
%80 = load i32, i32* @LANCZOS_CONVERGENCE_MODE
%81 = icmp ugt i32 %80, 1
br i1 %81, label %82, label %84
82: ; preds = %78
%83 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([51 x i8], [51 x i8]* @.str.9, i64 0, i64 0), i32 %80)
br label %84
84: ; preds = %78, %82
%85 = phi i32 [ 1, %82 ], [ %79, %78 ]
%86 = load double, double* @WARNING_ORTHTOL
%87 = fcmp oeq double %86, 0.000000e+00
br i1 %87, label %88, label %95
88: ; preds = %84
%89 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([51 x i8], [51 x i8]* @.str.10, i64 0, i64 0), double %86)
%90 = load i32*, i32** @Output_File
%91 = icmp eq i32* %90, null
br i1 %91, label %95, label %92
92: ; preds = %88
%93 = load double, double* @WARNING_ORTHTOL
%94 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %90, i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.10, i64 0, i64 0), double %93)
br label %95
95: ; preds = %88, %92, %84
%96 = load double, double* @WARNING_MISTOL
%97 = fcmp oeq double %96, 0.000000e+00
br i1 %97, label %98, label %105
98: ; preds = %95
%99 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([50 x i8], [50 x i8]* @.str.11, i64 0, i64 0), double %96)
%100 = load i32*, i32** @Output_File
%101 = icmp eq i32* %100, null
br i1 %101, label %105, label %102
102: ; preds = %98
%103 = load double, double* @WARNING_MISTOL
%104 = tail call i32 (i32*, i8*, ...) @fprintf(i32* %100, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.11, i64 0, i64 0), double %103)
br label %105
105: ; preds = %98, %102, %95
%106 = load i32, i32* @LANCZOS_SO_PRECISION
%107 = add i32 %106, -3
%108 = icmp ult i32 %107, -2
br i1 %108, label %109, label %111
109: ; preds = %105
%110 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @.str.12, i64 0, i64 0), i32 %106)
br label %111
111: ; preds = %105, %109
%112 = phi i32 [ 1, %109 ], [ %85, %105 ]
%113 = load i32, i32* @PERTURB
%114 = icmp eq i32 %113, 0
br i1 %114, label %130, label %115
115: ; preds = %111
%116 = load i32, i32* @NPERTURB
%117 = icmp slt i32 %116, 0
br i1 %117, label %118, label %121
118: ; preds = %115
%119 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @.str.13, i64 0, i64 0), i32 %116)
%120 = load i32, i32* @NPERTURB
br label %121
121: ; preds = %118, %115
%122 = phi i32 [ %120, %118 ], [ %116, %115 ]
%123 = phi i32 [ 1, %118 ], [ %112, %115 ]
%124 = icmp sgt i32 %122, 0
%125 = load double, double* @PERTURB_MAX
%126 = fcmp olt double %125, 0.000000e+00
%127 = select i1 %124, i1 %126, i1 false
br i1 %127, label %128, label %130
128: ; preds = %121
%129 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @.str.14, i64 0, i64 0), double %125)
br label %130
130: ; preds = %121, %128, %111
%131 = phi i32 [ 1, %128 ], [ %123, %121 ], [ %112, %111 ]
%132 = load i32, i32* @MAPPING_TYPE
%133 = icmp ugt i32 %132, 3
br i1 %133, label %134, label %136
134: ; preds = %130
%135 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @.str.15, i64 0, i64 0), i32 %132)
br label %136
136: ; preds = %130, %134
%137 = phi i32 [ 1, %134 ], [ %131, %130 ]
%138 = icmp eq i32 %3, 3
%139 = load i32, i32* @OPT3D_NTRIES
%140 = icmp slt i32 %139, 1
%141 = select i1 %138, i1 %140, i1 false
br i1 %141, label %142, label %144
142: ; preds = %136
%143 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @.str.16, i64 0, i64 0), i32 %139)
br label %144
144: ; preds = %142, %136
%145 = phi i32 [ 1, %142 ], [ %137, %136 ]
%146 = icmp ne i32 %2, 0
%147 = and i1 %34, %146
br i1 %147, label %148, label %165
148: ; preds = %144
%149 = load i32, i32* @COARSE_NLEVEL_RQI
%150 = icmp slt i32 %149, 1
br i1 %150, label %151, label %153
151: ; preds = %148
%152 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @.str.17, i64 0, i64 0), i32 %149)
br label %153
153: ; preds = %151, %148
%154 = phi i32 [ 1, %151 ], [ %145, %148 ]
%155 = load i32, i32* @RQI_CONVERGENCE_MODE
%156 = icmp ugt i32 %155, 1
br i1 %156, label %157, label %159
157: ; preds = %153
%158 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @.str.18, i64 0, i64 0), i32 %155)
br label %159
159: ; preds = %153, %157
%160 = phi i32 [ 1, %157 ], [ %154, %153 ]
%161 = load i32, i32* @TERM_PROP
%162 = icmp eq i32 %161, 0
br i1 %162, label %165, label %163
163: ; preds = %159
%164 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([74 x i8], [74 x i8]* @str.30, i64 0, i64 0))
br label %165
165: ; preds = %159, %163, %144
%166 = phi i32 [ %160, %163 ], [ %160, %159 ], [ %145, %144 ]
%167 = load i32, i32* @COARSE_NLEVEL_KL
%168 = icmp slt i32 %167, 1
%169 = select i1 %33, i1 %168, i1 false
br i1 %169, label %170, label %172
170: ; preds = %165
%171 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @.str.20, i64 0, i64 0), i32 %167)
br label %172
172: ; preds = %170, %165
%173 = phi i32 [ 1, %170 ], [ %166, %165 ]
%174 = or i1 %33, %147
br i1 %174, label %175, label %187
175: ; preds = %172
%176 = load double, double* @COARSEN_RATIO_MIN
%177 = fcmp olt double %176, 5.000000e-01
br i1 %177, label %178, label %180
178: ; preds = %175
%179 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @.str.21, i64 0, i64 0), double %176)
br label %180
180: ; preds = %178, %175
%181 = phi i32 [ 1, %178 ], [ %173, %175 ]
%182 = load i32, i32* @MATCH_TYPE
%183 = add i32 %182, -10
%184 = icmp ult i32 %183, -9
br i1 %184, label %185, label %187
185: ; preds = %180
%186 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @.str.22, i64 0, i64 0), i32 %182)
br label %187
187: ; preds = %172, %180, %185, %32
%188 = phi i32 [ 1, %185 ], [ %181, %180 ], [ %11, %32 ], [ %173, %172 ]
%189 = icmp eq i32 %1, 1
%190 = or i1 %33, %189
br i1 %190, label %191, label %217
191: ; preds = %187
%192 = load i32, i32* @KL_METRIC
%193 = add i32 %192, -3
%194 = icmp ult i32 %193, -2
br i1 %194, label %195, label %197
195: ; preds = %191
%196 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.23, i64 0, i64 0), i32 %192)
br label %197
197: ; preds = %191, %195
%198 = phi i32 [ 1, %195 ], [ %188, %191 ]
%199 = load i32, i32* @KL_BAD_MOVES
%200 = icmp slt i32 %199, 0
br i1 %200, label %201, label %203
201: ; preds = %197
%202 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @.str.24, i64 0, i64 0), i32 %199)
br label %203
203: ; preds = %201, %197
%204 = phi i32 [ 1, %201 ], [ %198, %197 ]
%205 = load i32, i32* @KL_NTRIES_BAD
%206 = icmp slt i32 %205, 0
br i1 %206, label %207, label %209
207: ; preds = %203
%208 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @.str.25, i64 0, i64 0), i32 %205)
br label %209
209: ; preds = %207, %203
%210 = phi i32 [ 1, %207 ], [ %204, %203 ]
%211 = load double, double* @KL_IMBALANCE
%212 = fcmp olt double %211, 0.000000e+00
%213 = fcmp ogt double %211, 1.000000e+00
%214 = or i1 %212, %213
br i1 %214, label %215, label %217
215: ; preds = %209
%216 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @.str.26, i64 0, i64 0), double %211)
br label %217
217: ; preds = %215, %209, %187
%218 = phi i32 [ 1, %215 ], [ %210, %209 ], [ %188, %187 ]
%219 = load i32, i32* @SIMULATOR
%220 = icmp ugt i32 %219, 3
br i1 %220, label %221, label %223
221: ; preds = %217
%222 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @.str.27, i64 0, i64 0), i32 %219)
br label %223
223: ; preds = %217, %221
%224 = phi i32 [ 1, %221 ], [ %218, %217 ]
%225 = load i32, i32* @TERM_PROP
%226 = icmp eq i32 %225, 0
br i1 %226, label %237, label %227
227: ; preds = %223
%228 = load double, double* @CUT_TO_HOP_COST
%229 = fcmp ugt double %228, 0.000000e+00
br i1 %229, label %232, label %230
230: ; preds = %227
%231 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @.str.28, i64 0, i64 0), double %228)
br label %232
232: ; preds = %230, %227
%233 = phi i32 [ 1, %230 ], [ %224, %227 ]
%234 = icmp sgt i32 %3, 1
br i1 %234, label %235, label %237
235: ; preds = %232
%236 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str, i64 0, i64 0))
br label %237
237: ; preds = %232, %235, %223
%238 = phi i32 [ %233, %235 ], [ %233, %232 ], [ %224, %223 ]
ret i32 %238
}