#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 */

/* Variables and functions */
int INT_MAX;
int INT_MIN;
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ sadd_is_oor(int, int);
int /*<<< orphan*/ sdiv_is_oor(int, int);
int /*<<< orphan*/ smul_is_oor(int, int);
int /*<<< orphan*/ sprintf(char *, char *);
int /*<<< orphan*/ ssub_is_oor(int, int);
int main(void) {
  int fails = 0;
  int tests = 0;
  int testfails = 0;
  int passes = 0;
  const char *name;
  const char *reason = NULL;
  char info[80];
  sprintf(info, " ");
  testfails = 0;
  printf("> %s...\n", "sadd_is_oor");
  if (1) {
    tests++;
    name = "sadd_is_oor";
    if (reason == NULL) {
      reason = ("sadd_is_oor(INT_MIN, -1)"
                " fails");
      ;
    }
    if (!(sadd_is_oor(INT_MIN, -1))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             16, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("sadd_is_oor(INT_MIN + 100, -101)"
                " fails");
      ;
    }
    if (!(sadd_is_oor(INT_MIN + 100, -101))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             17, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("sadd_is_oor(INT_MAX, 1)"
                " fails");
      ;
    }
    if (!(sadd_is_oor(INT_MAX, 1))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             18, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("sadd_is_oor(INT_MAX - 100, 101)"
                " fails");
      ;
    }
    if (!(sadd_is_oor(INT_MAX - 100, 101))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             19, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("sadd_is_oor(-1, INT_MIN)"
                " fails");
      ;
    }
    if (!(sadd_is_oor(-1, INT_MIN))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             20, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("sadd_is_oor(-101, INT_MIN + 100)"
                " fails");
      ;
    }
    if (!(sadd_is_oor(-101, INT_MIN + 100))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             21, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("sadd_is_oor(1, INT_MAX)"
                " fails");
      ;
    }
    if (!(sadd_is_oor(1, INT_MAX))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             22, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("sadd_is_oor(101, INT_MAX - 100)"
                " fails");
      ;
    }
    if (!(sadd_is_oor(101, INT_MAX - 100))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             23, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
  }
  testfails = 0;
  printf("> %s...\n", "ssub_is_oor");
  if (1) {
    tests++;
    name = "ssub_is_oor";
    if (reason == NULL) {
      reason = ("ssub_is_oor(INT_MIN, 1)"
                " fails");
      ;
    }
    if (!(ssub_is_oor(INT_MIN, 1))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             28, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("ssub_is_oor(INT_MIN + 100, 101)"
                " fails");
      ;
    }
    if (!(ssub_is_oor(INT_MIN + 100, 101))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             29, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("ssub_is_oor(INT_MAX, -1)"
                " fails");
      ;
    }
    if (!(ssub_is_oor(INT_MAX, -1))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             30, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("ssub_is_oor(INT_MAX - 100, -101)"
                " fails");
      ;
    }
    if (!(ssub_is_oor(INT_MAX - 100, -101))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             31, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("ssub_is_oor(0, INT_MIN)"
                " fails");
      ;
    }
    if (!(ssub_is_oor(0, INT_MIN))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             32, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
  }
  testfails = 0;
  printf("> %s...\n", "smul_is_oor");
  if (1) {
    tests++;
    name = "smul_is_oor";
    if (reason == NULL) {
      reason = ("smul_is_oor(INT_MIN, 2)"
                " fails");
      ;
    }
    if (!(smul_is_oor(INT_MIN, 2))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             37, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("smul_is_oor(INT_MIN / 2, 3)"
                " fails");
      ;
    }
    if (!(smul_is_oor(INT_MIN / 2, 3))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             38, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("smul_is_oor(INT_MAX, 2)"
                " fails");
      ;
    }
    if (!(smul_is_oor(INT_MAX, 2))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             39, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("smul_is_oor(INT_MAX / 2, 3)"
                " fails");
      ;
    }
    if (!(smul_is_oor(INT_MAX / 2, 3))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             40, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
    if (reason == NULL) {
      reason = ("smul_is_oor(INT_MIN, -1)"
                " fails");
      ;
    }
    if (!(smul_is_oor(INT_MIN, -1))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             41, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
  }
  testfails = 0;
  printf("> %s...\n", "sdiv_is_oor");
  if (1) {
    tests++;
    name = "sdiv_is_oor";
    if (reason == NULL) {
      reason = ("sdiv_is_oor(INT_MIN, -1)"
                " fails");
      ;
    }
    if (!(sdiv_is_oor(INT_MIN, -1))) {
      printf("[FAIL] %s:%d : (%s) : %s %s\n",
             "/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/"
             "2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/"
             "unit/test-utils-integer-range-checking.c",
             46, name, reason, info);
      fails++;
      testfails++;
      ;
    } else {
      passes++;
    }
    reason = NULL;
    sprintf(info, " ");
    ;
  }
  name = name;
  reason = reason;
  info[0] = info[0];
  printf("\n--- Results ---\n");
  printf("Tests run:%5d\n", tests);
  printf("Passes:   %5d\n", passes);
  printf("Failures: %5d\n", fails);
  return fails;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
movl   $0x0,-0x4(%rbp)
movl   $0x0,-0x8(%rbp)
movl   $0x0,-0xc(%rbp)
movl   $0x0,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xe5f(%rip),%rsi
call   1070 <sprintf@plt>
movl   $0x0,-0x10(%rbp)
lea    0xe4e(%rip),%rdi
lea    0xe50(%rip),%rsi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
lea    0xe39(%rip),%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    11ec <main+0x8c>
lea    0xe2f(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2ded(%rip),%rax
mov    (%rax),%edi
mov    $0xffffffff,%esi
call   1060 <sadd_is_oor@plt>
cmp    $0x0,%eax
jne    1245 <main+0xe5>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0xe1b(%rip),%rdi
lea    0xe31(%rip),%rsi
mov    $0x10,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    124e <main+0xee>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xd9f(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    127c <main+0x11c>
lea    0xe84(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2d5d(%rip),%rax
mov    (%rax),%edi
add    $0x64,%edi
mov    $0xffffff9b,%esi
call   1060 <sadd_is_oor@plt>
cmp    $0x0,%eax
jne    12d8 <main+0x178>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0xd88(%rip),%rdi
lea    0xd9e(%rip),%rsi
mov    $0x11,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    12e1 <main+0x181>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xd0c(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    130f <main+0x1af>
lea    0xe18(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2cd2(%rip),%rax
mov    (%rax),%edi
mov    $0x1,%esi
call   1060 <sadd_is_oor@plt>
cmp    $0x0,%eax
jne    1368 <main+0x208>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0xcf8(%rip),%rdi
lea    0xd0e(%rip),%rsi
mov    $0x12,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1371 <main+0x211>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xc7c(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    139f <main+0x23f>
lea    0xda6(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2c42(%rip),%rax
mov    (%rax),%edi
sub    $0x64,%edi
mov    $0x65,%esi
call   1060 <sadd_is_oor@plt>
cmp    $0x0,%eax
jne    13fb <main+0x29b>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0xc65(%rip),%rdi
lea    0xc7b(%rip),%rsi
mov    $0x13,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1404 <main+0x2a4>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xbe9(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    1432 <main+0x2d2>
lea    0xd39(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2ba7(%rip),%rax
mov    (%rax),%esi
mov    $0xffffffff,%edi
call   1060 <sadd_is_oor@plt>
cmp    $0x0,%eax
jne    148b <main+0x32b>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0xbd5(%rip),%rdi
lea    0xbeb(%rip),%rsi
mov    $0x14,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1494 <main+0x334>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xb59(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    14c2 <main+0x362>
lea    0xcc8(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2b17(%rip),%rax
mov    (%rax),%esi
add    $0x64,%esi
mov    $0xffffff9b,%edi
call   1060 <sadd_is_oor@plt>
cmp    $0x0,%eax
jne    151e <main+0x3be>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0xb42(%rip),%rdi
lea    0xb58(%rip),%rsi
mov    $0x15,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1527 <main+0x3c7>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xac6(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    1555 <main+0x3f5>
lea    0xc5c(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2a8c(%rip),%rax
mov    (%rax),%esi
mov    $0x1,%edi
call   1060 <sadd_is_oor@plt>
cmp    $0x0,%eax
jne    15ae <main+0x44e>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0xab2(%rip),%rdi
lea    0xac8(%rip),%rsi
mov    $0x16,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    15b7 <main+0x457>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0xa36(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    15e5 <main+0x485>
lea    0xbea(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x29fc(%rip),%rax
mov    (%rax),%esi
sub    $0x64,%esi
mov    $0x65,%edi
call   1060 <sadd_is_oor@plt>
cmp    $0x0,%eax
jne    1641 <main+0x4e1>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0xa1f(%rip),%rdi
lea    0xa35(%rip),%rsi
mov    $0x17,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    164a <main+0x4ea>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x9a3(%rip),%rsi
call   1070 <sprintf@plt>
movl   $0x0,-0x10(%rbp)
lea    0x992(%rip),%rdi
lea    0xb7a(%rip),%rsi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
lea    0xb63(%rip),%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    16a8 <main+0x548>
lea    0xb59(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2931(%rip),%rax
mov    (%rax),%edi
mov    $0x1,%esi
call   1040 <ssub_is_oor@plt>
cmp    $0x0,%eax
jne    1701 <main+0x5a1>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x95f(%rip),%rdi
lea    0x975(%rip),%rsi
mov    $0x1c,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    170a <main+0x5aa>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x8e3(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    1738 <main+0x5d8>
lea    0xae7(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x28a1(%rip),%rax
mov    (%rax),%edi
add    $0x64,%edi
mov    $0x65,%esi
call   1040 <ssub_is_oor@plt>
cmp    $0x0,%eax
jne    1794 <main+0x634>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x8cc(%rip),%rdi
lea    0x8e2(%rip),%rsi
mov    $0x1d,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    179d <main+0x63d>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x850(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    17cb <main+0x66b>
lea    0xa7a(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2816(%rip),%rax
mov    (%rax),%edi
mov    $0xffffffff,%esi
call   1040 <ssub_is_oor@plt>
cmp    $0x0,%eax
jne    1824 <main+0x6c4>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x83c(%rip),%rdi
lea    0x852(%rip),%rsi
mov    $0x1e,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    182d <main+0x6cd>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x7c0(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    185b <main+0x6fb>
lea    0xa09(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2786(%rip),%rax
mov    (%rax),%edi
sub    $0x64,%edi
mov    $0xffffff9b,%esi
call   1040 <ssub_is_oor@plt>
cmp    $0x0,%eax
jne    18b7 <main+0x757>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x7a9(%rip),%rdi
lea    0x7bf(%rip),%rsi
mov    $0x1f,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    18c0 <main+0x760>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x72d(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    18ee <main+0x78e>
lea    0x99d(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x26eb(%rip),%rax
mov    (%rax),%esi
xor    %edi,%edi
call   1040 <ssub_is_oor@plt>
cmp    $0x0,%eax
jne    1944 <main+0x7e4>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x71c(%rip),%rdi
lea    0x732(%rip),%rsi
mov    $0x20,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    194d <main+0x7ed>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x6a0(%rip),%rsi
call   1070 <sprintf@plt>
movl   $0x0,-0x10(%rbp)
lea    0x68f(%rip),%rdi
lea    0x92b(%rip),%rsi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
lea    0x914(%rip),%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    19ab <main+0x84b>
lea    0x90a(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x262e(%rip),%rax
mov    (%rax),%edi
mov    $0x2,%esi
call   1030 <smul_is_oor@plt>
cmp    $0x0,%eax
jne    1a04 <main+0x8a4>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x65c(%rip),%rdi
lea    0x672(%rip),%rsi
mov    $0x25,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1a0d <main+0x8ad>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x5e0(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    1a3b <main+0x8db>
lea    0x898(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x259e(%rip),%rax
mov    (%rax),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
mov    $0x3,%esi
call   1030 <smul_is_oor@plt>
cmp    $0x0,%eax
jne    1a9e <main+0x93e>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x5c2(%rip),%rdi
lea    0x5d8(%rip),%rsi
mov    $0x26,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1aa7 <main+0x947>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x546(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    1ad5 <main+0x975>
lea    0x820(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x250c(%rip),%rax
mov    (%rax),%edi
mov    $0x2,%esi
call   1030 <smul_is_oor@plt>
cmp    $0x0,%eax
jne    1b2e <main+0x9ce>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x532(%rip),%rdi
lea    0x548(%rip),%rsi
mov    $0x27,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1b37 <main+0x9d7>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x4b6(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    1b65 <main+0xa05>
lea    0x7ae(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x247c(%rip),%rax
mov    (%rax),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%edi
mov    $0x3,%esi
call   1030 <smul_is_oor@plt>
cmp    $0x0,%eax
jne    1bc8 <main+0xa68>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x498(%rip),%rdi
lea    0x4ae(%rip),%rsi
mov    $0x28,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1bd1 <main+0xa71>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x41c(%rip),%rsi
call   1070 <sprintf@plt>
cmpq   $0x0,-0x28(%rbp)
jne    1bff <main+0xa9f>
lea    0x736(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x23da(%rip),%rax
mov    (%rax),%edi
mov    $0xffffffff,%esi
call   1030 <smul_is_oor@plt>
cmp    $0x0,%eax
jne    1c58 <main+0xaf8>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x408(%rip),%rdi
lea    0x41e(%rip),%rsi
mov    $0x29,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1c61 <main+0xb01>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x38c(%rip),%rsi
call   1070 <sprintf@plt>
movl   $0x0,-0x10(%rbp)
lea    0x37b(%rip),%rdi
lea    0x6c2(%rip),%rsi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc(%rbp)
lea    0x6ab(%rip),%rax
mov    %rax,-0x20(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    1cbf <main+0xb5f>
lea    0x6a1(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x231a(%rip),%rax
mov    (%rax),%edi
mov    $0xffffffff,%esi
call   1080 <sdiv_is_oor@plt>
cmp    $0x0,%eax
jne    1d18 <main+0xbb8>
mov    -0x20(%rbp),%rcx
mov    -0x28(%rbp),%r8
lea    -0x80(%rbp),%r9
lea    0x348(%rip),%rdi
lea    0x35e(%rip),%rsi
mov    $0x2e,%edx
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
mov    -0x10(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x10(%rbp)
jmp    1d21 <main+0xbc1>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
movq   $0x0,-0x28(%rbp)
lea    -0x80(%rbp),%rdi
lea    0x2cc(%rip),%rsi
call   1070 <sprintf@plt>
mov    -0x20(%rbp),%rax
mov    %rax,-0x20(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x80(%rbp),%al
mov    %al,-0x80(%rbp)
lea    0x625(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0xc(%rbp),%esi
lea    0x626(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x14(%rbp),%esi
lea    0x624(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%esi
lea    0x622(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0x58,%rsp
movw   $0x20,(%rsp)
lea    0xe89(%rip),%rdi
lea    0xe8b(%rip),%rsi
xor    %ebx,%ebx
xor    %eax,%eax
call   1060 <printf@plt>
mov    0x2e52(%rip),%r14
mov    (%r14),%edi
mov    $0xffffffff,%esi
call   1070 <sadd_is_oor@plt>
mov    $0x1,%ebp
test   %eax,%eax
jne    11d6 <main+0x76>
lea    0xe89(%rip),%rdi
lea    0xe9f(%rip),%rsi
lea    0xe50(%rip),%rcx
lea    0xe55(%rip),%r8
xor    %ebp,%ebp
mov    %rsp,%r9
mov    $0x10,%edx
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r14),%edi
add    $0x64,%edi
mov    $0xffffff9b,%esi
call   1070 <sadd_is_oor@plt>
test   %eax,%eax
je     11f5 <main+0x95>
add    $0x1,%ebp
jmp    1223 <main+0xc3>
lea    0xe38(%rip),%rdi
lea    0xe4e(%rip),%rsi
lea    0xdff(%rip),%rcx
lea    0xee9(%rip),%r8
mov    %rsp,%r9
mov    $0x11,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    0x2db8(%rip),%r15
mov    (%r15),%edi
mov    $0x1,%esi
call   1070 <sadd_is_oor@plt>
test   %eax,%eax
je     1246 <main+0xe6>
add    $0x1,%ebp
jmp    1274 <main+0x114>
lea    0xde7(%rip),%rdi
lea    0xdfd(%rip),%rsi
lea    0xdae(%rip),%rcx
lea    0xebf(%rip),%r8
mov    %rsp,%r9
mov    $0x12,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r15),%edi
add    $0xffffff9c,%edi
mov    $0x65,%esi
call   1070 <sadd_is_oor@plt>
test   %eax,%eax
je     1293 <main+0x133>
add    $0x1,%ebp
jmp    12c1 <main+0x161>
lea    0xd9a(%rip),%rdi
lea    0xdb0(%rip),%rsi
lea    0xd61(%rip),%rcx
lea    0xe90(%rip),%r8
mov    %rsp,%r9
mov    $0x13,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r14),%esi
mov    $0xffffffff,%edi
call   1070 <sadd_is_oor@plt>
test   %eax,%eax
je     12dd <main+0x17d>
add    $0x1,%ebp
jmp    130b <main+0x1ab>
lea    0xd50(%rip),%rdi
lea    0xd66(%rip),%rsi
lea    0xd17(%rip),%rcx
lea    0xe6c(%rip),%r8
mov    %rsp,%r9
mov    $0x14,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r14),%esi
add    $0x64,%esi
mov    $0xffffff9b,%edi
call   1070 <sadd_is_oor@plt>
test   %eax,%eax
je     132a <main+0x1ca>
add    $0x1,%ebp
jmp    1358 <main+0x1f8>
lea    0xd03(%rip),%rdi
lea    0xd19(%rip),%rsi
lea    0xcca(%rip),%rcx
lea    0xe3e(%rip),%r8
mov    %rsp,%r9
mov    $0x15,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r15),%esi
mov    $0x1,%edi
call   1070 <sadd_is_oor@plt>
test   %eax,%eax
je     1374 <main+0x214>
add    $0x1,%ebp
jmp    13a2 <main+0x242>
lea    0xcb9(%rip),%rdi
lea    0xccf(%rip),%rsi
lea    0xc80(%rip),%rcx
lea    0xe1b(%rip),%r8
mov    %rsp,%r9
mov    $0x16,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r15),%esi
add    $0xffffff9c,%esi
mov    $0x65,%edi
call   1070 <sadd_is_oor@plt>
test   %eax,%eax
je     13c1 <main+0x261>
add    $0x1,%ebp
jmp    13ef <main+0x28f>
lea    0xc6c(%rip),%rdi
lea    0xc82(%rip),%rsi
lea    0xc33(%rip),%rcx
lea    0xdec(%rip),%r8
mov    %rsp,%r9
mov    $0x17,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
lea    0xc04(%rip),%rdi
lea    0xdec(%rip),%rsi
xor    %eax,%eax
call   1060 <printf@plt>
mov    (%r14),%edi
mov    $0x1,%esi
call   1050 <ssub_is_oor@plt>
test   %eax,%eax
je     1420 <main+0x2c0>
add    $0x1,%ebp
jmp    144e <main+0x2ee>
lea    0xc0d(%rip),%rdi
lea    0xc23(%rip),%rsi
lea    0xdba(%rip),%rcx
lea    0xdbf(%rip),%r8
mov    %rsp,%r9
mov    $0x1c,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r14),%edi
add    $0x64,%edi
mov    $0x65,%esi
call   1050 <ssub_is_oor@plt>
test   %eax,%eax
je     146d <main+0x30d>
add    $0x1,%ebp
jmp    149b <main+0x33b>
lea    0xbc0(%rip),%rdi
lea    0xbd6(%rip),%rsi
lea    0xd6d(%rip),%rcx
lea    0xd90(%rip),%r8
mov    %rsp,%r9
mov    $0x1d,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r15),%edi
mov    $0xffffffff,%esi
call   1050 <ssub_is_oor@plt>
test   %eax,%eax
je     14b7 <main+0x357>
add    $0x1,%ebp
jmp    14e5 <main+0x385>
lea    0xb76(%rip),%rdi
lea    0xb8c(%rip),%rsi
lea    0xd23(%rip),%rcx
lea    0xd6c(%rip),%r8
mov    %rsp,%r9
mov    $0x1e,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r15),%edi
add    $0xffffff9c,%edi
mov    $0xffffff9b,%esi
call   1050 <ssub_is_oor@plt>
test   %eax,%eax
je     1504 <main+0x3a4>
add    $0x1,%ebp
jmp    1532 <main+0x3d2>
lea    0xb29(%rip),%rdi
lea    0xb3f(%rip),%rsi
lea    0xcd6(%rip),%rcx
lea    0xd3e(%rip),%r8
mov    %rsp,%r9
mov    $0x1f,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r14),%esi
xor    %edi,%edi
call   1050 <ssub_is_oor@plt>
test   %eax,%eax
je     154b <main+0x3eb>
add    $0x1,%ebp
jmp    1579 <main+0x419>
lea    0xae2(%rip),%rdi
lea    0xaf8(%rip),%rsi
lea    0xc8f(%rip),%rcx
lea    0xd1e(%rip),%r8
mov    %rsp,%r9
mov    $0x20,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
lea    0xa7a(%rip),%rdi
lea    0xd16(%rip),%rsi
xor    %eax,%eax
call   1060 <printf@plt>
mov    (%r14),%edi
mov    $0x2,%esi
call   1040 <smul_is_oor@plt>
test   %eax,%eax
je     15aa <main+0x44a>
add    $0x1,%ebp
jmp    15d8 <main+0x478>
lea    0xa83(%rip),%rdi
lea    0xa99(%rip),%rsi
lea    0xce4(%rip),%rcx
lea    0xce9(%rip),%r8
mov    %rsp,%r9
mov    $0x25,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r14),%eax
mov    %eax,%edi
shr    $0x1f,%edi
add    %eax,%edi
sar    %edi
mov    $0x3,%esi
call   1040 <smul_is_oor@plt>
test   %eax,%eax
je     15fd <main+0x49d>
add    $0x1,%ebp
jmp    162b <main+0x4cb>
lea    0xa30(%rip),%rdi
lea    0xa46(%rip),%rsi
lea    0xc91(%rip),%rcx
lea    0xcb4(%rip),%r8
mov    %rsp,%r9
mov    $0x26,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r15),%edi
mov    $0x2,%esi
call   1040 <smul_is_oor@plt>
test   %eax,%eax
je     1647 <main+0x4e7>
add    $0x1,%ebp
jmp    1675 <main+0x515>
lea    0x9e6(%rip),%rdi
lea    0x9fc(%rip),%rsi
lea    0xc47(%rip),%rcx
lea    0xc8c(%rip),%r8
mov    %rsp,%r9
mov    $0x27,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r15),%eax
mov    %eax,%edi
shr    $0x1f,%edi
add    %eax,%edi
sar    %edi
mov    $0x3,%esi
call   1040 <smul_is_oor@plt>
test   %eax,%eax
je     169a <main+0x53a>
add    $0x1,%ebp
jmp    16c8 <main+0x568>
lea    0x993(%rip),%rdi
lea    0x9a9(%rip),%rsi
lea    0xbf4(%rip),%rcx
lea    0xc57(%rip),%r8
mov    %rsp,%r9
mov    $0x28,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
mov    (%r14),%edi
mov    $0xffffffff,%esi
call   1040 <smul_is_oor@plt>
test   %eax,%eax
je     16e4 <main+0x584>
add    $0x1,%ebp
jmp    1712 <main+0x5b2>
lea    0x949(%rip),%rdi
lea    0x95f(%rip),%rsi
lea    0xbaa(%rip),%rcx
lea    0xc2f(%rip),%r8
mov    %rsp,%r9
mov    $0x29,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
lea    0x8e1(%rip),%rdi
lea    0xc28(%rip),%rsi
xor    %eax,%eax
call   1060 <printf@plt>
mov    (%r14),%edi
mov    $0xffffffff,%esi
call   1080 <sdiv_is_oor@plt>
test   %eax,%eax
je     1743 <main+0x5e3>
add    $0x1,%ebp
jmp    1771 <main+0x611>
lea    0x8ea(%rip),%rdi
lea    0x900(%rip),%rsi
lea    0xbf6(%rip),%rcx
lea    0xbfb(%rip),%r8
mov    %rsp,%r9
mov    $0x2e,%edx
xor    %eax,%eax
call   1060 <printf@plt>
add    $0x1,%ebx
movw   $0x20,(%rsp)
lea    0xc28(%rip),%rdi
call   1030 <puts@plt>
lea    0xbef(%rip),%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xbeb(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xbea(%rip),%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1060 <printf@plt>
mov    %ebx,%eax
add    $0x58,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [2 x i8] c" \00"
@.str.1 = [9 x i8] c"> %s...\0A\00"
@.str.2 = [12 x i8] c"sadd_is_oor\00"
@.str.3 = [31 x i8] c"sadd_is_oor(INT_MIN, -1) fails\00"
@INT_MIN = global i32 0
@.str.4 = [29 x i8] c"[FAIL] %s:%d : (%s) : %s %s\0A\00"
@.str.5 = [169 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/unit/test-utils-integer-range-checking.c\00"
@.str.6 = [39 x i8] c"sadd_is_oor(INT_MIN + 100, -101) fails\00"
@.str.7 = [30 x i8] c"sadd_is_oor(INT_MAX, 1) fails\00"
@INT_MAX = global i32 0
@.str.8 = [38 x i8] c"sadd_is_oor(INT_MAX - 100, 101) fails\00"
@.str.9 = [31 x i8] c"sadd_is_oor(-1, INT_MIN) fails\00"
@.str.10 = [39 x i8] c"sadd_is_oor(-101, INT_MIN + 100) fails\00"
@.str.11 = [30 x i8] c"sadd_is_oor(1, INT_MAX) fails\00"
@.str.12 = [38 x i8] c"sadd_is_oor(101, INT_MAX - 100) fails\00"
@.str.13 = [12 x i8] c"ssub_is_oor\00"
@.str.14 = [30 x i8] c"ssub_is_oor(INT_MIN, 1) fails\00"
@.str.15 = [38 x i8] c"ssub_is_oor(INT_MIN + 100, 101) fails\00"
@.str.16 = [31 x i8] c"ssub_is_oor(INT_MAX, -1) fails\00"
@.str.17 = [39 x i8] c"ssub_is_oor(INT_MAX - 100, -101) fails\00"
@.str.18 = [30 x i8] c"ssub_is_oor(0, INT_MIN) fails\00"
@.str.19 = [12 x i8] c"smul_is_oor\00"
@.str.20 = [30 x i8] c"smul_is_oor(INT_MIN, 2) fails\00"
@.str.21 = [34 x i8] c"smul_is_oor(INT_MIN / 2, 3) fails\00"
@.str.22 = [30 x i8] c"smul_is_oor(INT_MAX, 2) fails\00"
@.str.23 = [34 x i8] c"smul_is_oor(INT_MAX / 2, 3) fails\00"
@.str.24 = [31 x i8] c"smul_is_oor(INT_MIN, -1) fails\00"
@.str.25 = [12 x i8] c"sdiv_is_oor\00"
@.str.26 = [31 x i8] c"sdiv_is_oor(INT_MIN, -1) fails\00"
@.str.27 = [18 x i8] c"\0A--- Results ---\0A\00"
@.str.28 = [15 x i8] c"Tests run:%5d\0A\00"
@.str.29 = [15 x i8] c"Passes: %5d\0A\00"
@.str.30 = [15 x i8] c"Failures: %5d\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i32
%3 = alloca i32
%4 = alloca i32
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca [80 x i8]
store i32 0, i32* %1
store i32 0, i32* %2
store i32 0, i32* %3
store i32 0, i32* %4
store i32 0, i32* %5
store i8* null, i8** %7
%9 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%10 = call i32 @sprintf(i8* %9, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %4
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0))
%12 = load i32, i32* %3
%13 = add nsw i32 %12, 1
store i32 %13, i32* %3
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i8** %6
%14 = load i8*, i8** %7
%15 = icmp eq i8* %14, null
br i1 %15, label %16, label %17
16: ; preds = %0
store i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.3, i64 0, i64 0), i8** %7
br label %17
17: ; preds = %16, %0
%18 = load i32, i32* @INT_MIN
%19 = call i32 @sadd_is_oor(i32 %18, i32 -1)
%20 = icmp ne i32 %19, 0
br i1 %20, label %30, label %21
21: ; preds = %17
%22 = load i8*, i8** %6
%23 = load i8*, i8** %7
%24 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 16, i8* %22, i8* %23, i8* %24)
%26 = load i32, i32* %2
%27 = add nsw i32 %26, 1
store i32 %27, i32* %2
%28 = load i32, i32* %4
%29 = add nsw i32 %28, 1
store i32 %29, i32* %4
br label %33
30: ; preds = %17
%31 = load i32, i32* %5
%32 = add nsw i32 %31, 1
store i32 %32, i32* %5
br label %33
33: ; preds = %30, %21
store i8* null, i8** %7
%34 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%35 = call i32 @sprintf(i8* %34, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%36 = load i8*, i8** %7
%37 = icmp eq i8* %36, null
br i1 %37, label %38, label %39
38: ; preds = %33
store i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.6, i64 0, i64 0), i8** %7
br label %39
39: ; preds = %38, %33
%40 = load i32, i32* @INT_MIN
%41 = add nsw i32 %40, 100
%42 = call i32 @sadd_is_oor(i32 %41, i32 -101)
%43 = icmp ne i32 %42, 0
br i1 %43, label %53, label %44
44: ; preds = %39
%45 = load i8*, i8** %6
%46 = load i8*, i8** %7
%47 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%48 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 17, i8* %45, i8* %46, i8* %47)
%49 = load i32, i32* %2
%50 = add nsw i32 %49, 1
store i32 %50, i32* %2
%51 = load i32, i32* %4
%52 = add nsw i32 %51, 1
store i32 %52, i32* %4
br label %56
53: ; preds = %39
%54 = load i32, i32* %5
%55 = add nsw i32 %54, 1
store i32 %55, i32* %5
br label %56
56: ; preds = %53, %44
store i8* null, i8** %7
%57 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%58 = call i32 @sprintf(i8* %57, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%59 = load i8*, i8** %7
%60 = icmp eq i8* %59, null
br i1 %60, label %61, label %62
61: ; preds = %56
store i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.7, i64 0, i64 0), i8** %7
br label %62
62: ; preds = %61, %56
%63 = load i32, i32* @INT_MAX
%64 = call i32 @sadd_is_oor(i32 %63, i32 1)
%65 = icmp ne i32 %64, 0
br i1 %65, label %75, label %66
66: ; preds = %62
%67 = load i8*, i8** %6
%68 = load i8*, i8** %7
%69 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%70 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 18, i8* %67, i8* %68, i8* %69)
%71 = load i32, i32* %2
%72 = add nsw i32 %71, 1
store i32 %72, i32* %2
%73 = load i32, i32* %4
%74 = add nsw i32 %73, 1
store i32 %74, i32* %4
br label %78
75: ; preds = %62
%76 = load i32, i32* %5
%77 = add nsw i32 %76, 1
store i32 %77, i32* %5
br label %78
78: ; preds = %75, %66
store i8* null, i8** %7
%79 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%80 = call i32 @sprintf(i8* %79, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%81 = load i8*, i8** %7
%82 = icmp eq i8* %81, null
br i1 %82, label %83, label %84
83: ; preds = %78
store i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.8, i64 0, i64 0), i8** %7
br label %84
84: ; preds = %83, %78
%85 = load i32, i32* @INT_MAX
%86 = sub nsw i32 %85, 100
%87 = call i32 @sadd_is_oor(i32 %86, i32 101)
%88 = icmp ne i32 %87, 0
br i1 %88, label %98, label %89
89: ; preds = %84
%90 = load i8*, i8** %6
%91 = load i8*, i8** %7
%92 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%93 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 19, i8* %90, i8* %91, i8* %92)
%94 = load i32, i32* %2
%95 = add nsw i32 %94, 1
store i32 %95, i32* %2
%96 = load i32, i32* %4
%97 = add nsw i32 %96, 1
store i32 %97, i32* %4
br label %101
98: ; preds = %84
%99 = load i32, i32* %5
%100 = add nsw i32 %99, 1
store i32 %100, i32* %5
br label %101
101: ; preds = %98, %89
store i8* null, i8** %7
%102 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%103 = call i32 @sprintf(i8* %102, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%104 = load i8*, i8** %7
%105 = icmp eq i8* %104, null
br i1 %105, label %106, label %107
106: ; preds = %101
store i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i8** %7
br label %107
107: ; preds = %106, %101
%108 = load i32, i32* @INT_MIN
%109 = call i32 @sadd_is_oor(i32 -1, i32 %108)
%110 = icmp ne i32 %109, 0
br i1 %110, label %120, label %111
111: ; preds = %107
%112 = load i8*, i8** %6
%113 = load i8*, i8** %7
%114 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%115 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 20, i8* %112, i8* %113, i8* %114)
%116 = load i32, i32* %2
%117 = add nsw i32 %116, 1
store i32 %117, i32* %2
%118 = load i32, i32* %4
%119 = add nsw i32 %118, 1
store i32 %119, i32* %4
br label %123
120: ; preds = %107
%121 = load i32, i32* %5
%122 = add nsw i32 %121, 1
store i32 %122, i32* %5
br label %123
123: ; preds = %120, %111
store i8* null, i8** %7
%124 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%125 = call i32 @sprintf(i8* %124, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%126 = load i8*, i8** %7
%127 = icmp eq i8* %126, null
br i1 %127, label %128, label %129
128: ; preds = %123
store i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.10, i64 0, i64 0), i8** %7
br label %129
129: ; preds = %128, %123
%130 = load i32, i32* @INT_MIN
%131 = add nsw i32 %130, 100
%132 = call i32 @sadd_is_oor(i32 -101, i32 %131)
%133 = icmp ne i32 %132, 0
br i1 %133, label %143, label %134
134: ; preds = %129
%135 = load i8*, i8** %6
%136 = load i8*, i8** %7
%137 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%138 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 21, i8* %135, i8* %136, i8* %137)
%139 = load i32, i32* %2
%140 = add nsw i32 %139, 1
store i32 %140, i32* %2
%141 = load i32, i32* %4
%142 = add nsw i32 %141, 1
store i32 %142, i32* %4
br label %146
143: ; preds = %129
%144 = load i32, i32* %5
%145 = add nsw i32 %144, 1
store i32 %145, i32* %5
br label %146
146: ; preds = %143, %134
store i8* null, i8** %7
%147 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%148 = call i32 @sprintf(i8* %147, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%149 = load i8*, i8** %7
%150 = icmp eq i8* %149, null
br i1 %150, label %151, label %152
151: ; preds = %146
store i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.11, i64 0, i64 0), i8** %7
br label %152
152: ; preds = %151, %146
%153 = load i32, i32* @INT_MAX
%154 = call i32 @sadd_is_oor(i32 1, i32 %153)
%155 = icmp ne i32 %154, 0
br i1 %155, label %165, label %156
156: ; preds = %152
%157 = load i8*, i8** %6
%158 = load i8*, i8** %7
%159 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%160 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 22, i8* %157, i8* %158, i8* %159)
%161 = load i32, i32* %2
%162 = add nsw i32 %161, 1
store i32 %162, i32* %2
%163 = load i32, i32* %4
%164 = add nsw i32 %163, 1
store i32 %164, i32* %4
br label %168
165: ; preds = %152
%166 = load i32, i32* %5
%167 = add nsw i32 %166, 1
store i32 %167, i32* %5
br label %168
168: ; preds = %165, %156
store i8* null, i8** %7
%169 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%170 = call i32 @sprintf(i8* %169, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%171 = load i8*, i8** %7
%172 = icmp eq i8* %171, null
br i1 %172, label %173, label %174
173: ; preds = %168
store i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.12, i64 0, i64 0), i8** %7
br label %174
174: ; preds = %173, %168
%175 = load i32, i32* @INT_MAX
%176 = sub nsw i32 %175, 100
%177 = call i32 @sadd_is_oor(i32 101, i32 %176)
%178 = icmp ne i32 %177, 0
br i1 %178, label %188, label %179
179: ; preds = %174
%180 = load i8*, i8** %6
%181 = load i8*, i8** %7
%182 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%183 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 23, i8* %180, i8* %181, i8* %182)
%184 = load i32, i32* %2
%185 = add nsw i32 %184, 1
store i32 %185, i32* %2
%186 = load i32, i32* %4
%187 = add nsw i32 %186, 1
store i32 %187, i32* %4
br label %191
188: ; preds = %174
%189 = load i32, i32* %5
%190 = add nsw i32 %189, 1
store i32 %190, i32* %5
br label %191
191: ; preds = %188, %179
store i8* null, i8** %7
%192 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%193 = call i32 @sprintf(i8* %192, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %4
%194 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0))
%195 = load i32, i32* %3
%196 = add nsw i32 %195, 1
store i32 %196, i32* %3
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i8** %6
%197 = load i8*, i8** %7
%198 = icmp eq i8* %197, null
br i1 %198, label %199, label %200
199: ; preds = %191
store i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.14, i64 0, i64 0), i8** %7
br label %200
200: ; preds = %199, %191
%201 = load i32, i32* @INT_MIN
%202 = call i32 @ssub_is_oor(i32 %201, i32 1)
%203 = icmp ne i32 %202, 0
br i1 %203, label %213, label %204
204: ; preds = %200
%205 = load i8*, i8** %6
%206 = load i8*, i8** %7
%207 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%208 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 28, i8* %205, i8* %206, i8* %207)
%209 = load i32, i32* %2
%210 = add nsw i32 %209, 1
store i32 %210, i32* %2
%211 = load i32, i32* %4
%212 = add nsw i32 %211, 1
store i32 %212, i32* %4
br label %216
213: ; preds = %200
%214 = load i32, i32* %5
%215 = add nsw i32 %214, 1
store i32 %215, i32* %5
br label %216
216: ; preds = %213, %204
store i8* null, i8** %7
%217 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%218 = call i32 @sprintf(i8* %217, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%219 = load i8*, i8** %7
%220 = icmp eq i8* %219, null
br i1 %220, label %221, label %222
221: ; preds = %216
store i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.15, i64 0, i64 0), i8** %7
br label %222
222: ; preds = %221, %216
%223 = load i32, i32* @INT_MIN
%224 = add nsw i32 %223, 100
%225 = call i32 @ssub_is_oor(i32 %224, i32 101)
%226 = icmp ne i32 %225, 0
br i1 %226, label %236, label %227
227: ; preds = %222
%228 = load i8*, i8** %6
%229 = load i8*, i8** %7
%230 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%231 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 29, i8* %228, i8* %229, i8* %230)
%232 = load i32, i32* %2
%233 = add nsw i32 %232, 1
store i32 %233, i32* %2
%234 = load i32, i32* %4
%235 = add nsw i32 %234, 1
store i32 %235, i32* %4
br label %239
236: ; preds = %222
%237 = load i32, i32* %5
%238 = add nsw i32 %237, 1
store i32 %238, i32* %5
br label %239
239: ; preds = %236, %227
store i8* null, i8** %7
%240 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%241 = call i32 @sprintf(i8* %240, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%242 = load i8*, i8** %7
%243 = icmp eq i8* %242, null
br i1 %243, label %244, label %245
244: ; preds = %239
store i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.16, i64 0, i64 0), i8** %7
br label %245
245: ; preds = %244, %239
%246 = load i32, i32* @INT_MAX
%247 = call i32 @ssub_is_oor(i32 %246, i32 -1)
%248 = icmp ne i32 %247, 0
br i1 %248, label %258, label %249
249: ; preds = %245
%250 = load i8*, i8** %6
%251 = load i8*, i8** %7
%252 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%253 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 30, i8* %250, i8* %251, i8* %252)
%254 = load i32, i32* %2
%255 = add nsw i32 %254, 1
store i32 %255, i32* %2
%256 = load i32, i32* %4
%257 = add nsw i32 %256, 1
store i32 %257, i32* %4
br label %261
258: ; preds = %245
%259 = load i32, i32* %5
%260 = add nsw i32 %259, 1
store i32 %260, i32* %5
br label %261
261: ; preds = %258, %249
store i8* null, i8** %7
%262 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%263 = call i32 @sprintf(i8* %262, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%264 = load i8*, i8** %7
%265 = icmp eq i8* %264, null
br i1 %265, label %266, label %267
266: ; preds = %261
store i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.17, i64 0, i64 0), i8** %7
br label %267
267: ; preds = %266, %261
%268 = load i32, i32* @INT_MAX
%269 = sub nsw i32 %268, 100
%270 = call i32 @ssub_is_oor(i32 %269, i32 -101)
%271 = icmp ne i32 %270, 0
br i1 %271, label %281, label %272
272: ; preds = %267
%273 = load i8*, i8** %6
%274 = load i8*, i8** %7
%275 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%276 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 31, i8* %273, i8* %274, i8* %275)
%277 = load i32, i32* %2
%278 = add nsw i32 %277, 1
store i32 %278, i32* %2
%279 = load i32, i32* %4
%280 = add nsw i32 %279, 1
store i32 %280, i32* %4
br label %284
281: ; preds = %267
%282 = load i32, i32* %5
%283 = add nsw i32 %282, 1
store i32 %283, i32* %5
br label %284
284: ; preds = %281, %272
store i8* null, i8** %7
%285 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%286 = call i32 @sprintf(i8* %285, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%287 = load i8*, i8** %7
%288 = icmp eq i8* %287, null
br i1 %288, label %289, label %290
289: ; preds = %284
store i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.18, i64 0, i64 0), i8** %7
br label %290
290: ; preds = %289, %284
%291 = load i32, i32* @INT_MIN
%292 = call i32 @ssub_is_oor(i32 0, i32 %291)
%293 = icmp ne i32 %292, 0
br i1 %293, label %303, label %294
294: ; preds = %290
%295 = load i8*, i8** %6
%296 = load i8*, i8** %7
%297 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%298 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 32, i8* %295, i8* %296, i8* %297)
%299 = load i32, i32* %2
%300 = add nsw i32 %299, 1
store i32 %300, i32* %2
%301 = load i32, i32* %4
%302 = add nsw i32 %301, 1
store i32 %302, i32* %4
br label %306
303: ; preds = %290
%304 = load i32, i32* %5
%305 = add nsw i32 %304, 1
store i32 %305, i32* %5
br label %306
306: ; preds = %303, %294
store i8* null, i8** %7
%307 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%308 = call i32 @sprintf(i8* %307, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %4
%309 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.19, i64 0, i64 0))
%310 = load i32, i32* %3
%311 = add nsw i32 %310, 1
store i32 %311, i32* %3
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.19, i64 0, i64 0), i8** %6
%312 = load i8*, i8** %7
%313 = icmp eq i8* %312, null
br i1 %313, label %314, label %315
314: ; preds = %306
store i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.20, i64 0, i64 0), i8** %7
br label %315
315: ; preds = %314, %306
%316 = load i32, i32* @INT_MIN
%317 = call i32 @smul_is_oor(i32 %316, i32 2)
%318 = icmp ne i32 %317, 0
br i1 %318, label %328, label %319
319: ; preds = %315
%320 = load i8*, i8** %6
%321 = load i8*, i8** %7
%322 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%323 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 37, i8* %320, i8* %321, i8* %322)
%324 = load i32, i32* %2
%325 = add nsw i32 %324, 1
store i32 %325, i32* %2
%326 = load i32, i32* %4
%327 = add nsw i32 %326, 1
store i32 %327, i32* %4
br label %331
328: ; preds = %315
%329 = load i32, i32* %5
%330 = add nsw i32 %329, 1
store i32 %330, i32* %5
br label %331
331: ; preds = %328, %319
store i8* null, i8** %7
%332 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%333 = call i32 @sprintf(i8* %332, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%334 = load i8*, i8** %7
%335 = icmp eq i8* %334, null
br i1 %335, label %336, label %337
336: ; preds = %331
store i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.21, i64 0, i64 0), i8** %7
br label %337
337: ; preds = %336, %331
%338 = load i32, i32* @INT_MIN
%339 = sdiv i32 %338, 2
%340 = call i32 @smul_is_oor(i32 %339, i32 3)
%341 = icmp ne i32 %340, 0
br i1 %341, label %351, label %342
342: ; preds = %337
%343 = load i8*, i8** %6
%344 = load i8*, i8** %7
%345 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%346 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 38, i8* %343, i8* %344, i8* %345)
%347 = load i32, i32* %2
%348 = add nsw i32 %347, 1
store i32 %348, i32* %2
%349 = load i32, i32* %4
%350 = add nsw i32 %349, 1
store i32 %350, i32* %4
br label %354
351: ; preds = %337
%352 = load i32, i32* %5
%353 = add nsw i32 %352, 1
store i32 %353, i32* %5
br label %354
354: ; preds = %351, %342
store i8* null, i8** %7
%355 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%356 = call i32 @sprintf(i8* %355, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%357 = load i8*, i8** %7
%358 = icmp eq i8* %357, null
br i1 %358, label %359, label %360
359: ; preds = %354
store i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.22, i64 0, i64 0), i8** %7
br label %360
360: ; preds = %359, %354
%361 = load i32, i32* @INT_MAX
%362 = call i32 @smul_is_oor(i32 %361, i32 2)
%363 = icmp ne i32 %362, 0
br i1 %363, label %373, label %364
364: ; preds = %360
%365 = load i8*, i8** %6
%366 = load i8*, i8** %7
%367 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%368 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 39, i8* %365, i8* %366, i8* %367)
%369 = load i32, i32* %2
%370 = add nsw i32 %369, 1
store i32 %370, i32* %2
%371 = load i32, i32* %4
%372 = add nsw i32 %371, 1
store i32 %372, i32* %4
br label %376
373: ; preds = %360
%374 = load i32, i32* %5
%375 = add nsw i32 %374, 1
store i32 %375, i32* %5
br label %376
376: ; preds = %373, %364
store i8* null, i8** %7
%377 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%378 = call i32 @sprintf(i8* %377, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%379 = load i8*, i8** %7
%380 = icmp eq i8* %379, null
br i1 %380, label %381, label %382
381: ; preds = %376
store i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.23, i64 0, i64 0), i8** %7
br label %382
382: ; preds = %381, %376
%383 = load i32, i32* @INT_MAX
%384 = sdiv i32 %383, 2
%385 = call i32 @smul_is_oor(i32 %384, i32 3)
%386 = icmp ne i32 %385, 0
br i1 %386, label %396, label %387
387: ; preds = %382
%388 = load i8*, i8** %6
%389 = load i8*, i8** %7
%390 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%391 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 40, i8* %388, i8* %389, i8* %390)
%392 = load i32, i32* %2
%393 = add nsw i32 %392, 1
store i32 %393, i32* %2
%394 = load i32, i32* %4
%395 = add nsw i32 %394, 1
store i32 %395, i32* %4
br label %399
396: ; preds = %382
%397 = load i32, i32* %5
%398 = add nsw i32 %397, 1
store i32 %398, i32* %5
br label %399
399: ; preds = %396, %387
store i8* null, i8** %7
%400 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%401 = call i32 @sprintf(i8* %400, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%402 = load i8*, i8** %7
%403 = icmp eq i8* %402, null
br i1 %403, label %404, label %405
404: ; preds = %399
store i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.24, i64 0, i64 0), i8** %7
br label %405
405: ; preds = %404, %399
%406 = load i32, i32* @INT_MIN
%407 = call i32 @smul_is_oor(i32 %406, i32 -1)
%408 = icmp ne i32 %407, 0
br i1 %408, label %418, label %409
409: ; preds = %405
%410 = load i8*, i8** %6
%411 = load i8*, i8** %7
%412 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%413 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 41, i8* %410, i8* %411, i8* %412)
%414 = load i32, i32* %2
%415 = add nsw i32 %414, 1
store i32 %415, i32* %2
%416 = load i32, i32* %4
%417 = add nsw i32 %416, 1
store i32 %417, i32* %4
br label %421
418: ; preds = %405
%419 = load i32, i32* %5
%420 = add nsw i32 %419, 1
store i32 %420, i32* %5
br label %421
421: ; preds = %418, %409
store i8* null, i8** %7
%422 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%423 = call i32 @sprintf(i8* %422, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
store i32 0, i32* %4
%424 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.25, i64 0, i64 0))
%425 = load i32, i32* %3
%426 = add nsw i32 %425, 1
store i32 %426, i32* %3
store i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.25, i64 0, i64 0), i8** %6
%427 = load i8*, i8** %7
%428 = icmp eq i8* %427, null
br i1 %428, label %429, label %430
429: ; preds = %421
store i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.26, i64 0, i64 0), i8** %7
br label %430
430: ; preds = %429, %421
%431 = load i32, i32* @INT_MIN
%432 = call i32 @sdiv_is_oor(i32 %431, i32 -1)
%433 = icmp ne i32 %432, 0
br i1 %433, label %443, label %434
434: ; preds = %430
%435 = load i8*, i8** %6
%436 = load i8*, i8** %7
%437 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%438 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 46, i8* %435, i8* %436, i8* %437)
%439 = load i32, i32* %2
%440 = add nsw i32 %439, 1
store i32 %440, i32* %2
%441 = load i32, i32* %4
%442 = add nsw i32 %441, 1
store i32 %442, i32* %4
br label %446
443: ; preds = %430
%444 = load i32, i32* %5
%445 = add nsw i32 %444, 1
store i32 %445, i32* %5
br label %446
446: ; preds = %443, %434
store i8* null, i8** %7
%447 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%448 = call i32 @sprintf(i8* %447, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%449 = load i8*, i8** %6
store i8* %449, i8** %6
%450 = load i8*, i8** %7
store i8* %450, i8** %7
%451 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
%452 = load i8, i8* %451
%453 = getelementptr inbounds [80 x i8], [80 x i8]* %8, i64 0, i64 0
store i8 %452, i8* %453
%454 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.27, i64 0, i64 0))
%455 = load i32, i32* %3
%456 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.28, i64 0, i64 0), i32 %455)
%457 = load i32, i32* %5
%458 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.29, i64 0, i64 0), i32 %457)
%459 = load i32, i32* %2
%460 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.30, i64 0, i64 0), i32 %459)
%461 = load i32, i32* %2
ret i32 %461
}

LLVM IR (-O2):
@.str.1 = [9 x i8] c"> %s...\0A\00"
@.str.2 = [12 x i8] c"sadd_is_oor\00"
@.str.3 = [31 x i8] c"sadd_is_oor(INT_MIN, -1) fails\00"
@INT_MIN = global i32 0
@.str.4 = [29 x i8] c"[FAIL] %s:%d : (%s) : %s %s\0A\00"
@.str.5 = [169 x i8] c"/scratch/repos/new/home/jordi_armengol_estape/c-scraper/outputs/2022-01-22/02-19-57/repos/bfanning/agenda/refs/heads/master/tst/unit/test-utils-integer-range-checking.c\00"
@.str.6 = [39 x i8] c"sadd_is_oor(INT_MIN + 100, -101) fails\00"
@.str.7 = [30 x i8] c"sadd_is_oor(INT_MAX, 1) fails\00"
@INT_MAX = global i32 0
@.str.8 = [38 x i8] c"sadd_is_oor(INT_MAX - 100, 101) fails\00"
@.str.9 = [31 x i8] c"sadd_is_oor(-1, INT_MIN) fails\00"
@.str.10 = [39 x i8] c"sadd_is_oor(-101, INT_MIN + 100) fails\00"
@.str.11 = [30 x i8] c"sadd_is_oor(1, INT_MAX) fails\00"
@.str.12 = [38 x i8] c"sadd_is_oor(101, INT_MAX - 100) fails\00"
@.str.13 = [12 x i8] c"ssub_is_oor\00"
@.str.14 = [30 x i8] c"ssub_is_oor(INT_MIN, 1) fails\00"
@.str.15 = [38 x i8] c"ssub_is_oor(INT_MIN + 100, 101) fails\00"
@.str.16 = [31 x i8] c"ssub_is_oor(INT_MAX, -1) fails\00"
@.str.17 = [39 x i8] c"ssub_is_oor(INT_MAX - 100, -101) fails\00"
@.str.18 = [30 x i8] c"ssub_is_oor(0, INT_MIN) fails\00"
@.str.19 = [12 x i8] c"smul_is_oor\00"
@.str.20 = [30 x i8] c"smul_is_oor(INT_MIN, 2) fails\00"
@.str.21 = [34 x i8] c"smul_is_oor(INT_MIN / 2, 3) fails\00"
@.str.22 = [30 x i8] c"smul_is_oor(INT_MAX, 2) fails\00"
@.str.23 = [34 x i8] c"smul_is_oor(INT_MAX / 2, 3) fails\00"
@.str.24 = [31 x i8] c"smul_is_oor(INT_MIN, -1) fails\00"
@.str.25 = [12 x i8] c"sdiv_is_oor\00"
@.str.26 = [31 x i8] c"sdiv_is_oor(INT_MIN, -1) fails\00"
@.str.28 = [15 x i8] c"Tests run:%5d\0A\00"
@.str.29 = [15 x i8] c"Passes: %5d\0A\00"
@.str.30 = [15 x i8] c"Failures: %5d\0A\00"
@str = [17 x i8] c"\0A--- Results ---\00"
define i32 @main() {
%1 = alloca [80 x i8]
%2 = getelementptr inbounds [80 x i8], [80 x i8]* %1, i64 0, i64 0
%3 = bitcast [80 x i8]* %1 to i16*
store i16 32, i16* %3
%4 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0))
%5 = load i32, i32* @INT_MIN
%6 = tail call i32 @sadd_is_oor(i32 %5, i32 -1)
%7 = icmp eq i32 %6, 0
br i1 %7, label %8, label %10
8: ; preds = %0
%9 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 16, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.3, i64 0, i64 0), i8* %2)
br label %10
10: ; preds = %0, %8
%11 = phi i32 [ 1, %8 ], [ 0, %0 ]
%12 = phi i32 [ 0, %8 ], [ 1, %0 ]
store i16 32, i16* %3
%13 = load i32, i32* @INT_MIN
%14 = add nsw i32 %13, 100
%15 = call i32 @sadd_is_oor(i32 %14, i32 -101)
%16 = icmp eq i32 %15, 0
br i1 %16, label %17, label %20
17: ; preds = %10
%18 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 17, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.6, i64 0, i64 0), i8* %2)
%19 = add nuw nsw i32 %11, 1
br label %22
20: ; preds = %10
%21 = add nuw nsw i32 %12, 1
br label %22
22: ; preds = %20, %17
%23 = phi i32 [ %11, %20 ], [ %19, %17 ]
%24 = phi i32 [ %21, %20 ], [ %12, %17 ]
store i16 32, i16* %3
%25 = load i32, i32* @INT_MAX
%26 = call i32 @sadd_is_oor(i32 %25, i32 1)
%27 = icmp eq i32 %26, 0
br i1 %27, label %28, label %31
28: ; preds = %22
%29 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 18, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.7, i64 0, i64 0), i8* %2)
%30 = add nuw nsw i32 %23, 1
br label %33
31: ; preds = %22
%32 = add nuw nsw i32 %24, 1
br label %33
33: ; preds = %31, %28
%34 = phi i32 [ %23, %31 ], [ %30, %28 ]
%35 = phi i32 [ %32, %31 ], [ %24, %28 ]
store i16 32, i16* %3
%36 = load i32, i32* @INT_MAX
%37 = add nsw i32 %36, -100
%38 = call i32 @sadd_is_oor(i32 %37, i32 101)
%39 = icmp eq i32 %38, 0
br i1 %39, label %40, label %43
40: ; preds = %33
%41 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 19, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.8, i64 0, i64 0), i8* %2)
%42 = add nuw nsw i32 %34, 1
br label %45
43: ; preds = %33
%44 = add nuw nsw i32 %35, 1
br label %45
45: ; preds = %43, %40
%46 = phi i32 [ %34, %43 ], [ %42, %40 ]
%47 = phi i32 [ %44, %43 ], [ %35, %40 ]
store i16 32, i16* %3
%48 = load i32, i32* @INT_MIN
%49 = call i32 @sadd_is_oor(i32 -1, i32 %48)
%50 = icmp eq i32 %49, 0
br i1 %50, label %51, label %54
51: ; preds = %45
%52 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 20, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.9, i64 0, i64 0), i8* %2)
%53 = add nuw nsw i32 %46, 1
br label %56
54: ; preds = %45
%55 = add nuw nsw i32 %47, 1
br label %56
56: ; preds = %54, %51
%57 = phi i32 [ %46, %54 ], [ %53, %51 ]
%58 = phi i32 [ %55, %54 ], [ %47, %51 ]
store i16 32, i16* %3
%59 = load i32, i32* @INT_MIN
%60 = add nsw i32 %59, 100
%61 = call i32 @sadd_is_oor(i32 -101, i32 %60)
%62 = icmp eq i32 %61, 0
br i1 %62, label %63, label %66
63: ; preds = %56
%64 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 21, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.10, i64 0, i64 0), i8* %2)
%65 = add nuw nsw i32 %57, 1
br label %68
66: ; preds = %56
%67 = add nuw nsw i32 %58, 1
br label %68
68: ; preds = %66, %63
%69 = phi i32 [ %57, %66 ], [ %65, %63 ]
%70 = phi i32 [ %67, %66 ], [ %58, %63 ]
store i16 32, i16* %3
%71 = load i32, i32* @INT_MAX
%72 = call i32 @sadd_is_oor(i32 1, i32 %71)
%73 = icmp eq i32 %72, 0
br i1 %73, label %74, label %77
74: ; preds = %68
%75 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 22, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.11, i64 0, i64 0), i8* %2)
%76 = add nuw nsw i32 %69, 1
br label %79
77: ; preds = %68
%78 = add nuw nsw i32 %70, 1
br label %79
79: ; preds = %77, %74
%80 = phi i32 [ %69, %77 ], [ %76, %74 ]
%81 = phi i32 [ %78, %77 ], [ %70, %74 ]
store i16 32, i16* %3
%82 = load i32, i32* @INT_MAX
%83 = add nsw i32 %82, -100
%84 = call i32 @sadd_is_oor(i32 101, i32 %83)
%85 = icmp eq i32 %84, 0
br i1 %85, label %86, label %89
86: ; preds = %79
%87 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 23, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.12, i64 0, i64 0), i8* %2)
%88 = add nuw nsw i32 %80, 1
br label %91
89: ; preds = %79
%90 = add nuw nsw i32 %81, 1
br label %91
91: ; preds = %89, %86
%92 = phi i32 [ %80, %89 ], [ %88, %86 ]
%93 = phi i32 [ %90, %89 ], [ %81, %86 ]
store i16 32, i16* %3
%94 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0))
%95 = load i32, i32* @INT_MIN
%96 = call i32 @ssub_is_oor(i32 %95, i32 1)
%97 = icmp eq i32 %96, 0
br i1 %97, label %98, label %101
98: ; preds = %91
%99 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 28, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.14, i64 0, i64 0), i8* %2)
%100 = add nuw nsw i32 %92, 1
br label %103
101: ; preds = %91
%102 = add nuw nsw i32 %93, 1
br label %103
103: ; preds = %101, %98
%104 = phi i32 [ %92, %101 ], [ %100, %98 ]
%105 = phi i32 [ %102, %101 ], [ %93, %98 ]
store i16 32, i16* %3
%106 = load i32, i32* @INT_MIN
%107 = add nsw i32 %106, 100
%108 = call i32 @ssub_is_oor(i32 %107, i32 101)
%109 = icmp eq i32 %108, 0
br i1 %109, label %110, label %113
110: ; preds = %103
%111 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 29, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.15, i64 0, i64 0), i8* %2)
%112 = add nuw nsw i32 %104, 1
br label %115
113: ; preds = %103
%114 = add nuw nsw i32 %105, 1
br label %115
115: ; preds = %113, %110
%116 = phi i32 [ %104, %113 ], [ %112, %110 ]
%117 = phi i32 [ %114, %113 ], [ %105, %110 ]
store i16 32, i16* %3
%118 = load i32, i32* @INT_MAX
%119 = call i32 @ssub_is_oor(i32 %118, i32 -1)
%120 = icmp eq i32 %119, 0
br i1 %120, label %121, label %124
121: ; preds = %115
%122 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 30, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.16, i64 0, i64 0), i8* %2)
%123 = add nuw nsw i32 %116, 1
br label %126
124: ; preds = %115
%125 = add nuw nsw i32 %117, 1
br label %126
126: ; preds = %124, %121
%127 = phi i32 [ %116, %124 ], [ %123, %121 ]
%128 = phi i32 [ %125, %124 ], [ %117, %121 ]
store i16 32, i16* %3
%129 = load i32, i32* @INT_MAX
%130 = add nsw i32 %129, -100
%131 = call i32 @ssub_is_oor(i32 %130, i32 -101)
%132 = icmp eq i32 %131, 0
br i1 %132, label %133, label %136
133: ; preds = %126
%134 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 31, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.17, i64 0, i64 0), i8* %2)
%135 = add nuw nsw i32 %127, 1
br label %138
136: ; preds = %126
%137 = add nuw nsw i32 %128, 1
br label %138
138: ; preds = %136, %133
%139 = phi i32 [ %127, %136 ], [ %135, %133 ]
%140 = phi i32 [ %137, %136 ], [ %128, %133 ]
store i16 32, i16* %3
%141 = load i32, i32* @INT_MIN
%142 = call i32 @ssub_is_oor(i32 0, i32 %141)
%143 = icmp eq i32 %142, 0
br i1 %143, label %144, label %147
144: ; preds = %138
%145 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 32, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i64 0, i64 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.18, i64 0, i64 0), i8* %2)
%146 = add nuw nsw i32 %139, 1
br label %149
147: ; preds = %138
%148 = add nuw nsw i32 %140, 1
br label %149
149: ; preds = %147, %144
%150 = phi i32 [ %139, %147 ], [ %146, %144 ]
%151 = phi i32 [ %148, %147 ], [ %140, %144 ]
store i16 32, i16* %3
%152 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.19, i64 0, i64 0))
%153 = load i32, i32* @INT_MIN
%154 = call i32 @smul_is_oor(i32 %153, i32 2)
%155 = icmp eq i32 %154, 0
br i1 %155, label %156, label %159
156: ; preds = %149
%157 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 37, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.19, i64 0, i64 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.20, i64 0, i64 0), i8* %2)
%158 = add nuw nsw i32 %150, 1
br label %161
159: ; preds = %149
%160 = add nuw nsw i32 %151, 1
br label %161
161: ; preds = %159, %156
%162 = phi i32 [ %150, %159 ], [ %158, %156 ]
%163 = phi i32 [ %160, %159 ], [ %151, %156 ]
store i16 32, i16* %3
%164 = load i32, i32* @INT_MIN
%165 = sdiv i32 %164, 2
%166 = call i32 @smul_is_oor(i32 %165, i32 3)
%167 = icmp eq i32 %166, 0
br i1 %167, label %168, label %171
168: ; preds = %161
%169 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 38, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.19, i64 0, i64 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.21, i64 0, i64 0), i8* %2)
%170 = add nuw nsw i32 %162, 1
br label %173
171: ; preds = %161
%172 = add nuw nsw i32 %163, 1
br label %173
173: ; preds = %171, %168
%174 = phi i32 [ %162, %171 ], [ %170, %168 ]
%175 = phi i32 [ %172, %171 ], [ %163, %168 ]
store i16 32, i16* %3
%176 = load i32, i32* @INT_MAX
%177 = call i32 @smul_is_oor(i32 %176, i32 2)
%178 = icmp eq i32 %177, 0
br i1 %178, label %179, label %182
179: ; preds = %173
%180 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 39, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.19, i64 0, i64 0), i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.22, i64 0, i64 0), i8* %2)
%181 = add nuw nsw i32 %174, 1
br label %184
182: ; preds = %173
%183 = add nuw nsw i32 %175, 1
br label %184
184: ; preds = %182, %179
%185 = phi i32 [ %174, %182 ], [ %181, %179 ]
%186 = phi i32 [ %183, %182 ], [ %175, %179 ]
store i16 32, i16* %3
%187 = load i32, i32* @INT_MAX
%188 = sdiv i32 %187, 2
%189 = call i32 @smul_is_oor(i32 %188, i32 3)
%190 = icmp eq i32 %189, 0
br i1 %190, label %191, label %194
191: ; preds = %184
%192 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 40, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.19, i64 0, i64 0), i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.23, i64 0, i64 0), i8* %2)
%193 = add nuw nsw i32 %185, 1
br label %196
194: ; preds = %184
%195 = add nuw nsw i32 %186, 1
br label %196
196: ; preds = %194, %191
%197 = phi i32 [ %185, %194 ], [ %193, %191 ]
%198 = phi i32 [ %195, %194 ], [ %186, %191 ]
store i16 32, i16* %3
%199 = load i32, i32* @INT_MIN
%200 = call i32 @smul_is_oor(i32 %199, i32 -1)
%201 = icmp eq i32 %200, 0
br i1 %201, label %202, label %205
202: ; preds = %196
%203 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 41, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.19, i64 0, i64 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.24, i64 0, i64 0), i8* %2)
%204 = add nuw nsw i32 %197, 1
br label %207
205: ; preds = %196
%206 = add nuw nsw i32 %198, 1
br label %207
207: ; preds = %205, %202
%208 = phi i32 [ %197, %205 ], [ %204, %202 ]
%209 = phi i32 [ %206, %205 ], [ %198, %202 ]
store i16 32, i16* %3
%210 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.25, i64 0, i64 0))
%211 = load i32, i32* @INT_MIN
%212 = call i32 @sdiv_is_oor(i32 %211, i32 -1)
%213 = icmp eq i32 %212, 0
br i1 %213, label %214, label %217
214: ; preds = %207
%215 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([169 x i8], [169 x i8]* @.str.5, i64 0, i64 0), i32 46, i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.25, i64 0, i64 0), i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.26, i64 0, i64 0), i8* %2)
%216 = add nuw nsw i32 %208, 1
br label %219
217: ; preds = %207
%218 = add nuw nsw i32 %209, 1
br label %219
219: ; preds = %217, %214
%220 = phi i32 [ %208, %217 ], [ %216, %214 ]
%221 = phi i32 [ %218, %217 ], [ %209, %214 ]
store i16 32, i16* %3
%222 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str, i64 0, i64 0))
%223 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.28, i64 0, i64 0), i32 4)
%224 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.29, i64 0, i64 0), i32 %221)
%225 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @.str.30, i64 0, i64 0), i32 %220)
ret i32 %220
}