#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*/ fclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/ *, char *, ...);
int /*<<< orphan*/ free(int *);
scalar_t__ malloc(int);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ scanf(char *, int *);
int /*<<< orphan*/ system(char *);
int main(int argc, char **argv) {
  int a, b, c, d, e, f, k, n = 0;
  int *mat;
  FILE *magia;
  while (n < 3) {
    printf("  Ingrese el orden del cuadrado (n): ");
    scanf("%i", &n);
    if (n < 3)
      printf("  Error, El orden del cuadrado debe ser >=3\n\n");
  }
  mat = (int *)malloc(sizeof(int) * n * n);
  if (mat) {
    printf("\n  La suma de filas, columnas y diagonales principales es: %i\n\n",
           (n * ((n * n) + 1)) / 2);
    if (n % 2 != 0) {
      b = 1;
      for (a = 3; a < n; a += 2)
        b++;
      for (a = 1; a <= n * n; a++) {
        if (a == 1) {
          c = 0;
          d = n - b - 1;
          *(mat + d + (c * n)) = 1;
        } else {
          if ((a - 1) % n == 0)
            c++;
          else {
            c--;
            d++;
            if (d == n)
              d = 0;
            if (c < 0)
              c = n - 1;
          }
          *(mat + d + (c * n)) = a;
        }
      }
    } else if (n % 4 == 0) {
      c = 1;
      for (a = 0; a < n; a++) {
        for (b = 0; b < n; b++) {
          *(mat + b + (a * n)) = c;
          c++;
        }
      }
      for (d = 0; d < 4; d++) {
        for (c = 0; c < n; c += 4) {
          a = b = 0;
          if (d == 0)
            b = c;
          else if (d == 1)
            a = c;
          else if (d == 2)
            b = -c + n - 1;
          else if (d == 3) {
            a = c;
            b = n - 1;
          }
          while (a < n && b < n && a >= 0 && b >= 0) {
            *(mat + b + (a * n)) = 0;
            a++;
            if (d == 2 || d == 3)
              b--;
            else
              b++;
          }
        }
      }
      c = 1;
      for (a = n - 1; a >= 0; a--) {
        for (b = n - 1; b >= 0; b--) {
          if (*(mat + b + (a * n)) == 0) {
            for (d = 0; d < n; d++) {
              for (e = 0; e < n; e++) {
                if (*(mat + e + (d * n)) == c) {
                  d = 0;
                  e = -1;
                  c++;
                }
              }
            }
            *(mat + b + (a * n)) = c;
          }
        }
      }
    } else {
      k = n / 4;
      for (a = 0; a < n; a++) {
        for (b = 0; b < n; b++) {
          if (a < (k + 1) * 2)
            *(mat + b + (a * n)) = -2;
          else if (a > ((k + 1) * 2) + 1)
            *(mat + b + (a * n)) = 0;
          else
            *(mat + b + (a * n)) = -1;
        }
      }
      for (a = 0; a < 4; a++) {
        for (b = 0; b < 2; b++) {
          *(mat + b + ((k + 1) * 2) - 2 + ((a + ((k + 1) * 2) - 2) * n)) = -1;
          if (a > 1)
            *(mat + b + ((k + 1) * 2) - 2 + ((a + ((k + 1) * 2) - 2) * n)) = -2;
        }
      }
      b = 1;
      for (a = 3; a < n; a += 2)
        b++;
      for (a = 1; a <= n * n; a++) {
        if (a == 1) {
          c = 0;
          d = n - b - 1;
        }
        k = *(mat + d + (c * n));
        for (b = 0; b < 4; b++) {
          e = c;
          f = d;
          if (k == -2) {
            if (b == 0 || b == 2)
              f++;
            if (b == 1 || b == 2)
              e++;
          } else if (k == -1) {
            if (b == 2 || b == 3)
              f++;
            if (b == 1 || b == 2)
              e++;
          } else if (k == 0) {
            if (b == 1 || b == 3)
              f++;
            if (b == 1 || b == 2)
              e++;
          }
          *(mat + f + (e * n)) = a;
          if (b != 3)
            a++;
        }
        if (a % (2 * n) == 0)
          c += 2;
        else {
          c -= 2;
          d += 2;
          if (d == n)
            d = 0;
          if (c < 0)
            c = n - 2;
        }
      }
    }
    magia = fopen("Cuadrado Magico.rtf", "w");
    fprintf(magia, "Cuadrado Magico de orden n = %i\n\n", n);
    fprintf(magia,
            "La suma de filas, columnas y diagonales principales es: %i\n\n",
            (n * ((n * n) + 1)) / 2);
    for (a = 0; a < n; a++) {
      for (b = 0; b < n; b++) {
        fprintf(magia, " %5i", *(mat + b + (a * n)));
        printf(" %3i", *(mat + b + (a * n)));
        if (b == n - 1) {
          fprintf(magia, "\n");
          printf("\n");
        }
      }
    }
    fclose(magia);
    printf("\n  ");
    system("pause");
    free(mat);
  } else
    printf("\n  Imposible reservar memoria para cuadrado de orden %i\n\n", n);
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x30(%rbp)
cmpl   $0x3,-0x30(%rbp)
jge    11e2 <main+0x62>
lea    0xe52(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xe6a(%rip),%rdi
lea    -0x30(%rbp),%rsi
call   1090 <scanf@plt>
cmpl   $0x3,-0x30(%rbp)
jge    11dd <main+0x5d>
lea    0xe53(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    119d <main+0x1d>
movslq -0x30(%rbp),%rax
shl    $0x2,%rax
movslq -0x30(%rbp),%rcx
imul   %rcx,%rax
mov    %eax,%edi
call   1080 <malloc@plt>
mov    %rax,-0x38(%rbp)
cmpq   $0x0,-0x38(%rbp)
je     1bf3 <main+0xa73>
mov    -0x30(%rbp),%eax
mov    -0x30(%rbp),%ecx
imul   -0x30(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%esi
lea    0xe2e(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    -0x30(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
je     1365 <main+0x1e5>
movl   $0x1,-0x18(%rbp)
movl   $0x3,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1275 <main+0xf5>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
jmp    1252 <main+0xd2>
movl   $0x1,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x30(%rbp),%ecx
imul   -0x30(%rbp),%ecx
cmp    %ecx,%eax
jg     1360 <main+0x1e0>
cmpl   $0x1,-0x14(%rbp)
jne    12d0 <main+0x150>
movl   $0x0,-0x1c(%rbp)
mov    -0x30(%rbp),%eax
sub    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x38(%rbp),%rax
movslq -0x20(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
movl   $0x1,(%rax,%rcx,4)
jmp    134d <main+0x1cd>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
cltd
idivl  -0x30(%rbp)
cmp    $0x0,%edx
jne    12f1 <main+0x171>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    132e <main+0x1ae>
mov    -0x1c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    1316 <main+0x196>
movl   $0x0,-0x20(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jge    1329 <main+0x1a9>
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    132e <main+0x1ae>
mov    -0x14(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x20(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    1352 <main+0x1d2>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    127c <main+0xfc>
jmp    1a95 <main+0x915>
mov    -0x30(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1681 <main+0x501>
movl   $0x1,-0x1c(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    13ef <main+0x26f>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    13dc <main+0x25c>
mov    -0x1c(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    139a <main+0x21a>
jmp    13e1 <main+0x261>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1387 <main+0x207>
movl   $0x0,-0x20(%rbp)
cmpl   $0x4,-0x20(%rbp)
jge    155f <main+0x3df>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    154c <main+0x3cc>
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x0,-0x20(%rbp)
jne    1436 <main+0x2b6>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x18(%rbp)
jmp    1490 <main+0x310>
cmpl   $0x1,-0x20(%rbp)
jne    144b <main+0x2cb>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x14(%rbp)
jmp    148b <main+0x30b>
cmpl   $0x2,-0x20(%rbp)
jne    1468 <main+0x2e8>
xor    %eax,%eax
sub    -0x1c(%rbp),%eax
add    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1486 <main+0x306>
cmpl   $0x3,-0x20(%rbp)
jne    1481 <main+0x301>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x14(%rbp)
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1486 <main+0x306>
jmp    148b <main+0x30b>
jmp    1490 <main+0x310>
jmp    1495 <main+0x315>
mov    -0x14(%rbp),%ecx
xor    %eax,%eax
cmp    -0x30(%rbp),%ecx
mov    %al,-0x41(%rbp)
jge    14d0 <main+0x350>
mov    -0x18(%rbp),%ecx
xor    %eax,%eax
cmp    -0x30(%rbp),%ecx
mov    %al,-0x41(%rbp)
jge    14d0 <main+0x350>
xor    %eax,%eax
cmpl   $0x0,-0x14(%rbp)
mov    %al,-0x41(%rbp)
jl     14d0 <main+0x350>
cmpl   $0x0,-0x18(%rbp)
setge  %al
mov    %al,-0x41(%rbp)
mov    -0x41(%rbp),%al
test   $0x1,%al
jne    14e0 <main+0x360>
jmp    1539 <main+0x3b9>
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x2,-0x20(%rbp)
je     151d <main+0x39d>
cmpl   $0x3,-0x20(%rbp)
jne    152b <main+0x3ab>
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
jmp    1534 <main+0x3b4>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1495 <main+0x315>
jmp    153e <main+0x3be>
mov    -0x1c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x1c(%rbp)
jmp    1407 <main+0x287>
jmp    1551 <main+0x3d1>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    13f6 <main+0x276>
movl   $0x1,-0x1c(%rbp)
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x14(%rbp)
cmpl   $0x0,-0x14(%rbp)
jl     167c <main+0x4fc>
mov    -0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x18(%rbp)
cmpl   $0x0,-0x18(%rbp)
jl     1669 <main+0x4e9>
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
cmpl   $0x0,(%rax,%rcx,4)
jne    1656 <main+0x4d6>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1637 <main+0x4b7>
movl   $0x0,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1624 <main+0x4a4>
mov    -0x38(%rbp),%rax
movslq -0x24(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x20(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
cmp    -0x1c(%rbp),%eax
jne    1611 <main+0x491>
movl   $0x0,-0x20(%rbp)
movl   $0xffffffff,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1616 <main+0x496>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    15c9 <main+0x449>
jmp    1629 <main+0x4a9>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    15b6 <main+0x436>
mov    -0x1c(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
jmp    165b <main+0x4db>
mov    -0x18(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x18(%rbp)
jmp    1582 <main+0x402>
jmp    166e <main+0x4ee>
mov    -0x14(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x14(%rbp)
jmp    156f <main+0x3ef>
jmp    1a90 <main+0x910>
mov    -0x30(%rbp),%eax
mov    $0x4,%ecx
cltd
idiv   %ecx
mov    %eax,-0x2c(%rbp)
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1775 <main+0x5f5>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1762 <main+0x5e2>
mov    -0x14(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
cmp    %ecx,%eax
jge    16ee <main+0x56e>
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
movl   $0xfffffffe,(%rax,%rcx,4)
jmp    174f <main+0x5cf>
mov    -0x14(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
cmp    %ecx,%eax
jle    172a <main+0x5aa>
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
movl   $0x0,(%rax,%rcx,4)
jmp    174a <main+0x5ca>
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
movl   $0xffffffff,(%rax,%rcx,4)
jmp    174f <main+0x5cf>
jmp    1754 <main+0x5d4>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    16a9 <main+0x529>
jmp    1767 <main+0x5e7>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1696 <main+0x516>
movl   $0x0,-0x14(%rbp)
cmpl   $0x4,-0x14(%rbp)
jge    184b <main+0x6cb>
movl   $0x0,-0x18(%rbp)
cmpl   $0x2,-0x18(%rbp)
jge    1838 <main+0x6b8>
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
mov    -0x2c(%rbp),%edx
add    $0x1,%edx
shl    $0x1,%edx
add    %edx,%ecx
sub    $0x2,%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
movl   $0xffffffff,-0x8(%rax,%rcx,4)
ff
cmpl   $0x1,-0x14(%rbp)
jle    1825 <main+0x6a5>
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
mov    -0x2c(%rbp),%edx
add    $0x1,%edx
shl    $0x1,%edx
add    %edx,%ecx
sub    $0x2,%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
movl   $0xfffffffe,-0x8(%rax,%rcx,4)
ff
jmp    182a <main+0x6aa>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    178d <main+0x60d>
jmp    183d <main+0x6bd>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    177c <main+0x5fc>
movl   $0x1,-0x18(%rbp)
movl   $0x3,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    187c <main+0x6fc>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x14(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x14(%rbp)
jmp    1859 <main+0x6d9>
movl   $0x1,-0x14(%rbp)
mov    -0x14(%rbp),%eax
mov    -0x30(%rbp),%ecx
imul   -0x30(%rbp),%ecx
cmp    %ecx,%eax
jg     1a8b <main+0x90b>
cmpl   $0x1,-0x14(%rbp)
jne    18b2 <main+0x732>
movl   $0x0,-0x1c(%rbp)
mov    -0x30(%rbp),%eax
sub    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x38(%rbp),%rax
movslq -0x20(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x1c(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x2c(%rbp)
movl   $0x0,-0x18(%rbp)
cmpl   $0x4,-0x18(%rbp)
jge    1a18 <main+0x898>
mov    -0x1c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x28(%rbp)
cmpl   $0xfffffffe,-0x2c(%rbp)
jne    1937 <main+0x7b7>
cmpl   $0x0,-0x18(%rbp)
je     190c <main+0x78c>
cmpl   $0x2,-0x18(%rbp)
jne    1915 <main+0x795>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x1,-0x18(%rbp)
je     1929 <main+0x7a9>
cmpl   $0x2,-0x18(%rbp)
jne    1932 <main+0x7b2>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    19d3 <main+0x853>
cmpl   $0xffffffff,-0x2c(%rbp)
jne    1980 <main+0x800>
cmpl   $0x2,-0x18(%rbp)
je     1955 <main+0x7d5>
cmpl   $0x3,-0x18(%rbp)
jne    195e <main+0x7de>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x1,-0x18(%rbp)
je     1972 <main+0x7f2>
cmpl   $0x2,-0x18(%rbp)
jne    197b <main+0x7fb>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    19ce <main+0x84e>
cmpl   $0x0,-0x2c(%rbp)
jne    19c9 <main+0x849>
cmpl   $0x1,-0x18(%rbp)
je     199e <main+0x81e>
cmpl   $0x3,-0x18(%rbp)
jne    19a7 <main+0x827>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x1,-0x18(%rbp)
je     19bb <main+0x83b>
cmpl   $0x2,-0x18(%rbp)
jne    19c4 <main+0x844>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    19c9 <main+0x849>
jmp    19ce <main+0x84e>
jmp    19d3 <main+0x853>
mov    -0x14(%rbp),%edx
mov    -0x38(%rbp),%rax
movslq -0x28(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x24(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
mov    %edx,(%rax,%rcx,4)
cmpl   $0x3,-0x18(%rbp)
je     1a05 <main+0x885>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1a0a <main+0x88a>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    18d8 <main+0x758>
mov    -0x14(%rbp),%eax
mov    -0x30(%rbp),%ecx
shl    $0x1,%ecx
cltd
idiv   %ecx
cmp    $0x0,%edx
jne    1a3b <main+0x8bb>
mov    -0x1c(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    1a78 <main+0x8f8>
mov    -0x1c(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x20(%rbp),%eax
add    $0x2,%eax
mov    %eax,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x30(%rbp),%eax
jne    1a60 <main+0x8e0>
movl   $0x0,-0x20(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jge    1a73 <main+0x8f3>
mov    -0x30(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x1c(%rbp)
jmp    1a78 <main+0x8f8>
jmp    1a7d <main+0x8fd>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1883 <main+0x703>
jmp    1a90 <main+0x910>
jmp    1a95 <main+0x915>
lea    0x5fb(%rip),%rdi
lea    0x608(%rip),%rsi
call   10a0 <fopen@plt>
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rdi
mov    -0x30(%rbp),%edx
lea    0x5f3(%rip),%rsi
mov    $0x0,%al
call   1070 <fprintf@plt>
mov    -0x40(%rbp),%rdi
mov    -0x30(%rbp),%eax
mov    -0x30(%rbp),%ecx
imul   -0x30(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%edx
lea    0x574(%rip),%rsi
mov    $0x0,%al
call   1070 <fprintf@plt>
movl   $0x0,-0x14(%rbp)
mov    -0x14(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1bc2 <main+0xa42>
movl   $0x0,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    1baf <main+0xa2f>
mov    -0x40(%rbp),%rdi
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%edx
lea    0x595(%rip),%rsi
mov    $0x0,%al
call   1070 <fprintf@plt>
mov    -0x38(%rbp),%rax
movslq -0x18(%rbp),%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    -0x14(%rbp),%ecx
imul   -0x30(%rbp),%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%esi
lea    0x570(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    -0x18(%rbp),%eax
mov    -0x30(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1b9c <main+0xa1c>
mov    -0x40(%rbp),%rdi
lea    0x4ce(%rip),%rsi
mov    $0x0,%al
call   1070 <fprintf@plt>
lea    0x4c0(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
jmp    1ba1 <main+0xa21>
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1b07 <main+0x987>
jmp    1bb4 <main+0xa34>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1af4 <main+0x974>
mov    -0x40(%rbp),%rdi
call   1040 <fclose@plt>
lea    0x507(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x4fd(%rip),%rdi
call   1050 <system@plt>
mov    -0x38(%rbp),%rdi
call   1030 <free@plt>
jmp    1c04 <main+0xa84>
mov    -0x30(%rbp),%esi
lea    0x4e6(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
xor    %eax,%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
movl   $0x0,0xc(%rsp)
lea    0xe43(%rip),%r14
lea    0xe62(%rip),%r15
lea    0xc(%rsp),%rbx
lea    0xf1f(%rip),%r12
mov    %r14,%rdi
xor    %eax,%eax
call   1080 <printf@plt>
mov    %r15,%rdi
mov    %rbx,%rsi
call   10c0 <scanf@plt>
mov    0xc(%rsp),%edi
cmp    $0x2,%edi
jg     120f <main+0x5f>
mov    %r12,%rdi
call   1050 <puts@plt>
mov    0xc(%rsp),%edi
cmp    $0x3,%edi
jl     11e0 <main+0x30>
imul   %edi,%edi
shl    $0x2,%edi
call   10b0 <malloc@plt>
mov    0xc(%rsp),%esi
test   %rax,%rax
je     12ee <main+0x13e>
mov    %rax,%r14
mov    %esi,%eax
imul   %esi,%eax
add    $0x1,%eax
imul   %esi,%eax
mov    %eax,%esi
shr    $0x1f,%esi
add    %eax,%esi
sar    %esi
lea    0xdf4(%rip),%rdi
xor    %eax,%eax
call   1080 <printf@plt>
mov    0xc(%rsp),%r13d
test   $0x1,%r13b
jne    1301 <main+0x151>
test   $0x3,%r13b
je     15da <main+0x42a>
lea    0x3(%r13),%eax
test   %r13d,%r13d
cmovns %r13d,%eax
sar    $0x2,%eax
cltq
lea    (%rax,%rax,1),%r8
lea    (%rax,%rax,1),%rcx
add    $0x2,%rcx
test   %r13d,%r13d
jle    13a2 <main+0x1f2>
lea    0x3(%r8),%esi
xor    %edi,%edi
mov    $0xfffffffe,%ebp
jmp    12ac <main+0xfc>
nopw   0x0(%rax,%rax,1)
add    $0x1,%edi
cmp    %r13d,%edi
jge    13a2 <main+0x1f2>
test   %r13d,%r13d
jle    12a0 <main+0xf0>
xor    %ebx,%ebx
cmp    %esi,%edi
setle  %bl
neg    %ebx
cmp    %ecx,%edi
cmovl  %ebp,%ebx
xor    %edx,%edx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
imul   %edi,%r13d
movslq %r13d,%rax
lea    (%r14,%rax,4),%rax
mov    %ebx,(%rax,%rdx,4)
add    $0x1,%rdx
movslq 0xc(%rsp),%r13
cmp    %r13,%rdx
jl     12d0 <main+0x120>
jmp    12a0 <main+0xf0>
lea    0xdd0(%rip),%rdi
xor    %eax,%eax
call   1080 <printf@plt>
jmp    1915 <main+0x765>
mov    %r13d,%eax
imul   %r13d,%eax
test   %eax,%eax
je     17f7 <main+0x647>
lea    -0x4(%r13),%eax
shr    %eax
mov    $0xfffffffd,%edx
sub    %eax,%edx
cmp    $0x4,%r13d
mov    $0xfffffffe,%ecx
cmovge %edx,%ecx
add    %r13d,%ecx
movslq %ecx,%rax
movl   $0x1,(%r14,%rax,4)
mov    0xc(%rsp),%esi
mov    %esi,%eax
imul   %esi,%eax
cmp    $0x2,%eax
jb     17f7 <main+0x647>
xor    %edi,%edi
mov    $0x1,%ebp
xor    %ebx,%ebx
jmp    1391 <main+0x1e1>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0x1,%ecx
cmp    %esi,%ecx
cmove  %edi,%ecx
test   %ebx,%ebx
cmovle %esi,%ebx
add    $0xffffffff,%ebx
movslq %ecx,%rax
lea    (%r14,%rax,4),%rax
imul   %ebx,%esi
movslq %esi,%rdx
mov    %ebp,(%rax,%rdx,4)
mov    0xc(%rsp),%esi
mov    %esi,%eax
imul   %esi,%eax
cmp    %eax,%ebp
jae    17f7 <main+0x647>
mov    %ebp,%eax
lea    0x1(%rax),%ebp
cltd
idiv   %esi
test   %edx,%edx
jne    1360 <main+0x1b0>
add    $0x1,%ebx
jmp    1370 <main+0x1c0>
movslq %ecx,%rdi
lea    (%r14,%rdi,4),%rsi
imul   %r8d,%r13d
movslq %r13d,%rax
movl   $0xffffffff,-0x8(%rsi,%rax,4)
ff
movslq 0xc(%rsp),%rax
imul   %r8,%rax
movl   $0xffffffff,-0x4(%rsi,%rax,4)
ff
movslq 0xc(%rsp),%rdx
movslq %r8d,%rbp
mov    %rbp,%rax
or     $0x1,%rax
imul   %rax,%rdx
movl   $0xffffffff,-0x8(%rsi,%rdx,4)
ff
movslq 0xc(%rsp),%rdx
imul   %rax,%rdx
movl   $0xffffffff,-0x4(%rsi,%rdx,4)
ff
movslq 0xc(%rsp),%rax
imul   %rcx,%rax
movl   $0xffffffff,-0x8(%rsi,%rax,4)
ff
movslq 0xc(%rsp),%rax
imul   %rdi,%rax
movl   $0xfffffffe,-0x8(%rsi,%rax,4)
ff
movslq 0xc(%rsp),%rax
imul   %rdi,%rax
movl   $0xffffffff,-0x4(%rsi,%rax,4)
ff
movslq 0xc(%rsp),%rax
imul   %rdi,%rax
movl   $0xfffffffe,-0x4(%rsi,%rax,4)
ff
add    $0x3,%rbp
movslq 0xc(%rsp),%rax
imul   %rbp,%rax
movl   $0xffffffff,-0x8(%rsi,%rax,4)
ff
movslq 0xc(%rsp),%rax
imul   %rbp,%rax
movl   $0xfffffffe,-0x8(%rsi,%rax,4)
ff
movslq 0xc(%rsp),%rax
imul   %rbp,%rax
movl   $0xffffffff,-0x4(%rsi,%rax,4)
ff
movslq 0xc(%rsp),%rax
imul   %rbp,%rax
movl   $0xfffffffe,-0x4(%rsi,%rax,4)
ff
mov    0xc(%rsp),%esi
mov    %esi,%eax
imul   %esi,%eax
test   %eax,%eax
je     17f7 <main+0x647>
lea    -0x4(%rsi),%eax
shr    %eax
mov    $0xfffffffd,%ecx
sub    %eax,%ecx
cmp    $0x4,%esi
mov    $0xfffffffe,%edi
cmovge %ecx,%edi
xor    %r8d,%r8d
xor    %ecx,%ecx
jmp    14d6 <main+0x326>
add    $0x2,%edi
cmp    %esi,%edi
cmove  %r8d,%edi
cmp    $0x2,%ebx
cmovl  %esi,%ebx
add    $0xfffffffe,%ebx
mov    %edi,%eax
mov    %esi,%edx
imul   %esi,%edx
mov    $0xfffffffb,%edi
cmp    %edx,%ecx
jae    17f7 <main+0x647>
add    %esi,%edi
test   %ecx,%ecx
cmove  %ecx,%ebx
cmovne %eax,%edi
lea    0x1(%rcx),%ebp
movslq %edi,%rax
lea    (%r14,%rax,4),%rdx
imul   %ebx,%esi
movslq %esi,%rax
mov    (%rdx,%rax,4),%esi
movslq %ebx,%r9
cmp    $0xfffffffe,%esi
jne    1530 <main+0x380>
mov    %ebp,0x4(%rdx,%rax,4)
lea    0x2(%rcx),%eax
lea    0x1(%r9),%rsi
movslq 0xc(%rsp),%rbp
imul   %rsi,%rbp
mov    %eax,(%rdx,%rbp,4)
lea    0x3(%rcx),%eax
movslq 0xc(%rsp),%rbp
imul   %rsi,%rbp
mov    %eax,0x4(%rdx,%rbp,4)
jmp    15a6 <main+0x3f6>
nopw   0x0(%rax,%rax,1)
mov    %ebp,(%rdx,%rax,4)
lea    0x2(%rcx),%ebp
cmp    $0xffffffff,%esi
je     1564 <main+0x3b4>
test   %esi,%esi
jne    158b <main+0x3db>
lea    0x1(%rdi),%esi
lea    0x1(%r9),%r10
movslq 0xc(%rsp),%rax
imul   %r10,%rax
mov    %ebp,0x4(%rdx,%rax,4)
lea    0x3(%rcx),%eax
movslq 0xc(%rsp),%rbp
imul   %r10,%rbp
mov    %eax,(%rdx,%rbp,4)
jmp    15a8 <main+0x3f8>
lea    0x1(%r9),%rax
movslq 0xc(%rsp),%rsi
imul   %rax,%rsi
mov    %ebp,(%rdx,%rsi,4)
lea    0x3(%rcx),%r10d
lea    0x1(%rdi),%esi
movslq 0xc(%rsp),%rbp
imul   %rax,%rbp
mov    %r10d,0x4(%rdx,%rbp,4)
jmp    15a8 <main+0x3f8>
movslq 0xc(%rsp),%rax
imul   %r9,%rax
mov    %ebp,(%rdx,%rax,4)
lea    0x3(%rcx),%eax
movslq 0xc(%rsp),%rsi
imul   %r9,%rsi
mov    %eax,(%rdx,%rsi,4)
mov    %edi,%esi
add    $0x4,%ecx
movslq %esi,%rax
lea    (%r14,%rax,4),%rax
movslq 0xc(%rsp),%rdx
imul   %r9,%rdx
mov    %ecx,(%rax,%rdx,4)
mov    0xc(%rsp),%esi
lea    (%rsi,%rsi,1),%ebp
mov    %ecx,%eax
cltd
idiv   %ebp
test   %edx,%edx
jne    14b0 <main+0x300>
add    $0x2,%ebx
jmp    14c2 <main+0x312>
test   %r13d,%r13d
jle    1634 <main+0x484>
mov    $0x1,%ecx
xor    %edx,%edx
jmp    15f8 <main+0x448>
nopl   0x0(%rax,%rax,1)
add    $0x1,%edx
cmp    %r13d,%edx
jge    1634 <main+0x484>
test   %r13d,%r13d
jle    15f0 <main+0x440>
mov    %ecx,%edi
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
lea    (%rdi,%rsi,1),%eax
imul   %edx,%r13d
movslq %r13d,%rbp
lea    (%r14,%rbp,4),%rbp
mov    %eax,0x0(%rbp,%rsi,4)
add    $0x1,%rsi
movslq 0xc(%rsp),%r13
cmp    %r13,%rsi
jl     1610 <main+0x460>
add    %esi,%ecx
jmp    15f0 <main+0x440>
xor    %edx,%edx
lea    0x9c3(%rip),%r8
mov    %r13d,%esi
jmp    1660 <main+0x4b0>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    %esi,%ecx
add    $0x1,%edx
mov    %ecx,%esi
cmp    $0x4,%edx
je     171a <main+0x56a>
test   %esi,%esi
jle    1650 <main+0x4a0>
mov    %edx,%eax
and    $0x7ffffffe,%eax
xor    %ecx,%ecx
cmp    $0x2,%eax
setne  %cl
lea    (%rcx,%rcx,1),%edi
add    $0xffffffff,%edi
xor    %ebp,%ebp
jmp    168e <main+0x4de>
mov    %esi,%r13d
add    $0x4,%ebp
mov    %r13d,%esi
mov    %r13d,%ecx
cmp    %r13d,%ebp
jge    1652 <main+0x4a2>
cmp    $0x3,%edx
ja     16b0 <main+0x500>
mov    %edx,%eax
movslq (%r8,%rax,4),%rax
add    %r8,%rax
mov    %ebp,%ebx
mov    %edx,%ecx
jmp    *%rax
xor    %ebx,%ebx
jmp    16d3 <main+0x523>
cs nopw 0x0(%rax,%rax,1)
xor    %ebx,%ebx
jmp    16c6 <main+0x516>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %ebp,%ebx
not    %ebx
add    %esi,%ebx
xor    %ecx,%ecx
cmp    %esi,%ecx
jge    1680 <main+0x4d0>
jmp    16d9 <main+0x529>
xchg   %ax,%ax
lea    -0x1(%rsi),%ebx
mov    %ebp,%ecx
cmp    %esi,%ecx
jge    1680 <main+0x4d0>
test   %ebx,%ebx
js     1680 <main+0x4d0>
nopl   (%rax)
cmp    %esi,%ebx
jge    1680 <main+0x4d0>
mov    %ebx,%eax
lea    (%r14,%rax,4),%rax
imul   %ecx,%esi
movslq %esi,%rsi
movl   $0x0,(%rax,%rsi,4)
add    $0x1,%ecx
mov    0xc(%rsp),%esi
cmp    %esi,%ecx
jge    167d <main+0x4cd>
add    %edi,%ebx
js     167d <main+0x4cd>
mov    %esi,%r13d
cmp    %esi,%ebx
jl     16e4 <main+0x534>
jmp    1680 <main+0x4d0>
test   %r13d,%r13d
jle    17f7 <main+0x647>
mov    $0x1,%ecx
mov    %r13d,%eax
nopl   0x0(%rax,%rax,1)
lea    -0x1(%rax),%r9d
test   %r13d,%r13d
jle    17e5 <main+0x635>
mov    %rax,0x10(%rsp)
mov    %r13d,%r11d
cs nopw 0x0(%rax,%rax,1)
nop
lea    -0x1(%r11),%r12
mov    %r12d,%eax
lea    (%r14,%rax,4),%r10
mov    %r13d,%eax
imul   %r9d,%eax
movslq %eax,%r15
cmpl   $0x0,(%r10,%r15,4)
jne    17cc <main+0x61c>
test   %r13d,%r13d
jle    17c8 <main+0x618>
xor    %edi,%edi
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nop
movslq %edi,%rax
lea    (%r14,%rax,4),%rax
mov    %ebp,%edx
imul   %r13d,%edx
movslq %edx,%r8
xor    %edx,%edx
mov    $0x0,%ebx
mov    $0x0,%esi
cmp    %ecx,(%rax,%r8,4)
sete   %al
je     17ac <main+0x5fc>
add    $0x1,%edi
mov    %ebp,%ebx
mov    %edi,%esi
mov    %al,%dl
add    %edx,%ecx
mov    %esi,%edi
mov    %ebx,%ebp
cmp    %r13d,%esi
jl     1780 <main+0x5d0>
add    $0x1,%ebx
mov    $0x0,%edi
mov    %ebx,%ebp
cmp    %r13d,%ebx
jl     1780 <main+0x5d0>
mov    %ecx,(%r10,%r15,4)
cmp    $0x2,%r11
jl     17e0 <main+0x630>
mov    0xc(%rsp),%r13d
mov    %r12,%r11
jmp    1750 <main+0x5a0>
nop
mov    0x10(%rsp),%rax
cmp    $0x2,%eax
jl     17f7 <main+0x647>
mov    0xc(%rsp),%r13d
mov    %r9d,%eax
jmp    1730 <main+0x580>
lea    0x87b(%rip),%rdi
lea    0x888(%rip),%rsi
call   10d0 <fopen@plt>
mov    %rax,%r13
mov    0xc(%rsp),%edx
lea    0x877(%rip),%rsi
mov    %rax,%rdi
xor    %eax,%eax
call   10a0 <fprintf@plt>
mov    0xc(%rsp),%eax
mov    %eax,%ecx
imul   %eax,%ecx
add    $0x1,%ecx
imul   %eax,%ecx
mov    %ecx,%edx
shr    $0x1f,%edx
add    %ecx,%edx
sar    %edx
lea    0x7fb(%rip),%rsi
mov    %r13,%rdi
xor    %eax,%eax
call   10a0 <fprintf@plt>
mov    0xc(%rsp),%eax
test   %eax,%eax
jle    18eb <main+0x73b>
lea    0x853(%rip),%r15
lea    0x851(%rip),%r12
xor    %ebp,%ebp
jmp    1877 <main+0x6c7>
nopl   0x0(%rax)
add    $0x1,%ebp
cmp    %eax,%ebp
jge    18eb <main+0x73b>
test   %eax,%eax
jle    1870 <main+0x6c0>
xor    %ebx,%ebx
jmp    188c <main+0x6dc>
nop
add    $0x1,%rbx
movslq %eax,%rcx
cmp    %rcx,%rbx
jge    1870 <main+0x6c0>
imul   %ebp,%eax
cltq
lea    (%r14,%rax,4),%rax
mov    (%rax,%rbx,4),%edx
mov    %r13,%rdi
mov    %r15,%rsi
xor    %eax,%eax
call   10a0 <fprintf@plt>
movslq 0xc(%rsp),%rax
movslq %ebp,%rcx
imul   %rax,%rcx
lea    (%r14,%rcx,4),%rax
mov    (%rax,%rbx,4),%esi
mov    %r12,%rdi
xor    %eax,%eax
call   1080 <printf@plt>
mov    0xc(%rsp),%eax
lea    -0x1(%rax),%ecx
cmp    %rcx,%rbx
jne    1880 <main+0x6d0>
mov    $0xa,%edi
mov    %r13,%rsi
call   1090 <fputc@plt>
mov    $0xa,%edi
call   1040 <putchar@plt>
mov    0xc(%rsp),%eax
jmp    1880 <main+0x6d0>
mov    %r13,%rdi
call   1060 <fclose@plt>
lea    0x7c1(%rip),%rdi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x7b7(%rip),%rdi
call   1070 <system@plt>
mov    %r14,%rdi
call   1030 <free@plt>
xor    %eax,%eax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [38 x i8] c" Ingrese el orden del cuadrado (n): \00"
@.str.1 = [3 x i8] c"%i\00"
@.str.2 = [46 x i8] c" Error, El orden del cuadrado debe ser >=3\0A\0A\00"
@.str.3 = [64 x i8] c"\0A La suma de filas, columnas y diagonales principales es: %i\0A\0A\00"
@.str.4 = [20 x i8] c"Cuadrado Magico.rtf\00"
@.str.5 = [2 x i8] c"w\00"
@.str.6 = [34 x i8] c"Cuadrado Magico de orden n = %i\0A\0A\00"
@.str.7 = [61 x i8] c"La suma de filas, columnas y diagonales principales es: %i\0A\0A\00"
@.str.8 = [5 x i8] c" %5i\00"
@.str.9 = [5 x i8] c" %3i\00"
@.str.10 = [2 x i8] c"\0A\00"
@.str.11 = [4 x i8] c"\0A \00"
@.str.12 = [6 x i8] c"pause\00"
@.str.13 = [58 x i8] c"\0A Imposible reservar memoria para cuadrado de orden %i\0A\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32*
%15 = alloca i32*
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store i32 0, i32* %13
br label %16
16: ; preds = %26, %2
%17 = load i32, i32* %13
%18 = icmp slt i32 %17, 3
br i1 %18, label %19, label %27
19: ; preds = %16
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0))
%21 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %13)
%22 = load i32, i32* %13
%23 = icmp slt i32 %22, 3
br i1 %23, label %24, label %26
24: ; preds = %19
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.2, i64 0, i64 0))
br label %26
26: ; preds = %24, %19
br label %16
27: ; preds = %16
%28 = load i32, i32* %13
%29 = sext i32 %28 to i64
%30 = mul i64 4, %29
%31 = load i32, i32* %13
%32 = sext i32 %31 to i64
%33 = mul i64 %30, %32
%34 = trunc i64 %33 to i32
%35 = call i64 @malloc(i32 %34)
%36 = inttoptr i64 %35 to i32*
store i32* %36, i32** %14
%37 = load i32*, i32** %14
%38 = icmp ne i32* %37, null
br i1 %38, label %39, label %681
39: ; preds = %27
%40 = load i32, i32* %13
%41 = load i32, i32* %13
%42 = load i32, i32* %13
%43 = mul nsw i32 %41, %42
%44 = add nsw i32 %43, 1
%45 = mul nsw i32 %40, %44
%46 = sdiv i32 %45, 2
%47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.3, i64 0, i64 0), i32 %46)
%48 = load i32, i32* %13
%49 = srem i32 %48, 2
%50 = icmp ne i32 %49, 0
br i1 %50, label %51, label %127
51: ; preds = %39
store i32 1, i32* %7
store i32 3, i32* %6
br label %52
52: ; preds = %59, %51
%53 = load i32, i32* %6
%54 = load i32, i32* %13
%55 = icmp slt i32 %53, %54
br i1 %55, label %56, label %62
56: ; preds = %52
%57 = load i32, i32* %7
%58 = add nsw i32 %57, 1
store i32 %58, i32* %7
br label %59
59: ; preds = %56
%60 = load i32, i32* %6
%61 = add nsw i32 %60, 2
store i32 %61, i32* %6
br label %52
62: ; preds = %52
store i32 1, i32* %6
br label %63
63: ; preds = %123, %62
%64 = load i32, i32* %6
%65 = load i32, i32* %13
%66 = load i32, i32* %13
%67 = mul nsw i32 %65, %66
%68 = icmp sle i32 %64, %67
br i1 %68, label %69, label %126
69: ; preds = %63
%70 = load i32, i32* %6
%71 = icmp eq i32 %70, 1
br i1 %71, label %72, label %86
72: ; preds = %69
store i32 0, i32* %8
%73 = load i32, i32* %13
%74 = load i32, i32* %7
%75 = sub nsw i32 %73, %74
%76 = sub nsw i32 %75, 1
store i32 %76, i32* %9
%77 = load i32*, i32** %14
%78 = load i32, i32* %9
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds i32, i32* %77, i64 %79
%81 = load i32, i32* %8
%82 = load i32, i32* %13
%83 = mul nsw i32 %81, %82
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds i32, i32* %80, i64 %84
store i32 1, i32* %85
br label %122
86: ; preds = %69
%87 = load i32, i32* %6
%88 = sub nsw i32 %87, 1
%89 = load i32, i32* %13
%90 = srem i32 %88, %89
%91 = icmp eq i32 %90, 0
br i1 %91, label %92, label %95
92: ; preds = %86
%93 = load i32, i32* %8
%94 = add nsw i32 %93, 1
store i32 %94, i32* %8
br label %111
95: ; preds = %86
%96 = load i32, i32* %8
%97 = add nsw i32 %96, -1
store i32 %97, i32* %8
%98 = load i32, i32* %9
%99 = add nsw i32 %98, 1
store i32 %99, i32* %9
%100 = load i32, i32* %9
%101 = load i32, i32* %13
%102 = icmp eq i32 %100, %101
br i1 %102, label %103, label %104
103: ; preds = %95
store i32 0, i32* %9
br label %104
104: ; preds = %103, %95
%105 = load i32, i32* %8
%106 = icmp slt i32 %105, 0
br i1 %106, label %107, label %110
107: ; preds = %104
%108 = load i32, i32* %13
%109 = sub nsw i32 %108, 1
store i32 %109, i32* %8
br label %110
110: ; preds = %107, %104
br label %111
111: ; preds = %110, %92
%112 = load i32, i32* %6
%113 = load i32*, i32** %14
%114 = load i32, i32* %9
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds i32, i32* %113, i64 %115
%117 = load i32, i32* %8
%118 = load i32, i32* %13
%119 = mul nsw i32 %117, %118
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds i32, i32* %116, i64 %120
store i32 %112, i32* %121
br label %122
122: ; preds = %111, %72
br label %123
123: ; preds = %122
%124 = load i32, i32* %6
%125 = add nsw i32 %124, 1
store i32 %125, i32* %6
br label %63
126: ; preds = %63
br label %611
127: ; preds = %39
%128 = load i32, i32* %13
%129 = srem i32 %128, 4
%130 = icmp eq i32 %129, 0
br i1 %130, label %131, label %326
131: ; preds = %127
store i32 1, i32* %8
store i32 0, i32* %6
br label %132
132: ; preds = %158, %131
%133 = load i32, i32* %6
%134 = load i32, i32* %13
%135 = icmp slt i32 %133, %134
br i1 %135, label %136, label %161
136: ; preds = %132
store i32 0, i32* %7
br label %137
137: ; preds = %154, %136
%138 = load i32, i32* %7
%139 = load i32, i32* %13
%140 = icmp slt i32 %138, %139
br i1 %140, label %141, label %157
141: ; preds = %137
%142 = load i32, i32* %8
%143 = load i32*, i32** %14
%144 = load i32, i32* %7
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds i32, i32* %143, i64 %145
%147 = load i32, i32* %6
%148 = load i32, i32* %13
%149 = mul nsw i32 %147, %148
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds i32, i32* %146, i64 %150
store i32 %142, i32* %151
%152 = load i32, i32* %8
%153 = add nsw i32 %152, 1
store i32 %153, i32* %8
br label %154
154: ; preds = %141
%155 = load i32, i32* %7
%156 = add nsw i32 %155, 1
store i32 %156, i32* %7
br label %137
157: ; preds = %137
br label %158
158: ; preds = %157
%159 = load i32, i32* %6
%160 = add nsw i32 %159, 1
store i32 %160, i32* %6
br label %132
161: ; preds = %132
store i32 0, i32* %9
br label %162
162: ; preds = %245, %161
%163 = load i32, i32* %9
%164 = icmp slt i32 %163, 4
br i1 %164, label %165, label %248
165: ; preds = %162
store i32 0, i32* %8
br label %166
166: ; preds = %241, %165
%167 = load i32, i32* %8
%168 = load i32, i32* %13
%169 = icmp slt i32 %167, %168
br i1 %169, label %170, label %244
170: ; preds = %166
store i32 0, i32* %7
store i32 0, i32* %6
%171 = load i32, i32* %9
%172 = icmp eq i32 %171, 0
br i1 %172, label %173, label %175
173: ; preds = %170
%174 = load i32, i32* %8
store i32 %174, i32* %7
br label %199
175: ; preds = %170
%176 = load i32, i32* %9
%177 = icmp eq i32 %176, 1
br i1 %177, label %178, label %180
178: ; preds = %175
%179 = load i32, i32* %8
store i32 %179, i32* %6
br label %198
180: ; preds = %175
%181 = load i32, i32* %9
%182 = icmp eq i32 %181, 2
br i1 %182, label %183, label %189
183: ; preds = %180
%184 = load i32, i32* %8
%185 = sub nsw i32 0, %184
%186 = load i32, i32* %13
%187 = add nsw i32 %185, %186
%188 = sub nsw i32 %187, 1
store i32 %188, i32* %7
br label %197
189: ; preds = %180
%190 = load i32, i32* %9
%191 = icmp eq i32 %190, 3
br i1 %191, label %192, label %196
192: ; preds = %189
%193 = load i32, i32* %8
store i32 %193, i32* %6
%194 = load i32, i32* %13
%195 = sub nsw i32 %194, 1
store i32 %195, i32* %7
br label %196
196: ; preds = %192, %189
br label %197
197: ; preds = %196, %183
br label %198
198: ; preds = %197, %178
br label %199
199: ; preds = %198, %173
br label %200
200: ; preds = %239, %199
%201 = load i32, i32* %6
%202 = load i32, i32* %13
%203 = icmp slt i32 %201, %202
br i1 %203, label %204, label %214
204: ; preds = %200
%205 = load i32, i32* %7
%206 = load i32, i32* %13
%207 = icmp slt i32 %205, %206
br i1 %207, label %208, label %214
208: ; preds = %204
%209 = load i32, i32* %6
%210 = icmp sge i32 %209, 0
br i1 %210, label %211, label %214
211: ; preds = %208
%212 = load i32, i32* %7
%213 = icmp sge i32 %212, 0
br label %214
214: ; preds = %211, %208, %204, %200
%215 = phi i1 [ false, %208 ], [ false, %204 ], [ false, %200 ], [ %213, %211 ]
br i1 %215, label %216, label %240
216: ; preds = %214
%217 = load i32*, i32** %14
%218 = load i32, i32* %7
%219 = sext i32 %218 to i64
%220 = getelementptr inbounds i32, i32* %217, i64 %219
%221 = load i32, i32* %6
%222 = load i32, i32* %13
%223 = mul nsw i32 %221, %222
%224 = sext i32 %223 to i64
%225 = getelementptr inbounds i32, i32* %220, i64 %224
store i32 0, i32* %225
%226 = load i32, i32* %6
%227 = add nsw i32 %226, 1
store i32 %227, i32* %6
%228 = load i32, i32* %9
%229 = icmp eq i32 %228, 2
br i1 %229, label %233, label %230
230: ; preds = %216
%231 = load i32, i32* %9
%232 = icmp eq i32 %231, 3
br i1 %232, label %233, label %236
233: ; preds = %230, %216
%234 = load i32, i32* %7
%235 = add nsw i32 %234, -1
store i32 %235, i32* %7
br label %239
236: ; preds = %230
%237 = load i32, i32* %7
%238 = add nsw i32 %237, 1
store i32 %238, i32* %7
br label %239
239: ; preds = %236, %233
br label %200
240: ; preds = %214
br label %241
241: ; preds = %240
%242 = load i32, i32* %8
%243 = add nsw i32 %242, 4
store i32 %243, i32* %8
br label %166
244: ; preds = %166
br label %245
245: ; preds = %244
%246 = load i32, i32* %9
%247 = add nsw i32 %246, 1
store i32 %247, i32* %9
br label %162
248: ; preds = %162
store i32 1, i32* %8
%249 = load i32, i32* %13
%250 = sub nsw i32 %249, 1
store i32 %250, i32* %6
br label %251
251: ; preds = %322, %248
%252 = load i32, i32* %6
%253 = icmp sge i32 %252, 0
br i1 %253, label %254, label %325
254: ; preds = %251
%255 = load i32, i32* %13
%256 = sub nsw i32 %255, 1
store i32 %256, i32* %7
br label %257
257: ; preds = %318, %254
%258 = load i32, i32* %7
%259 = icmp sge i32 %258, 0
br i1 %259, label %260, label %321
260: ; preds = %257
%261 = load i32*, i32** %14
%262 = load i32, i32* %7
%263 = sext i32 %262 to i64
%264 = getelementptr inbounds i32, i32* %261, i64 %263
%265 = load i32, i32* %6
%266 = load i32, i32* %13
%267 = mul nsw i32 %265, %266
%268 = sext i32 %267 to i64
%269 = getelementptr inbounds i32, i32* %264, i64 %268
%270 = load i32, i32* %269
%271 = icmp eq i32 %270, 0
br i1 %271, label %272, label %317
272: ; preds = %260
store i32 0, i32* %9
br label %273
273: ; preds = %303, %272
%274 = load i32, i32* %9
%275 = load i32, i32* %13
%276 = icmp slt i32 %274, %275
br i1 %276, label %277, label %306
277: ; preds = %273
store i32 0, i32* %10
br label %278
278: ; preds = %299, %277
%279 = load i32, i32* %10
%280 = load i32, i32* %13
%281 = icmp slt i32 %279, %280
br i1 %281, label %282, label %302
282: ; preds = %278
%283 = load i32*, i32** %14
%284 = load i32, i32* %10
%285 = sext i32 %284 to i64
%286 = getelementptr inbounds i32, i32* %283, i64 %285
%287 = load i32, i32* %9
%288 = load i32, i32* %13
%289 = mul nsw i32 %287, %288
%290 = sext i32 %289 to i64
%291 = getelementptr inbounds i32, i32* %286, i64 %290
%292 = load i32, i32* %291
%293 = load i32, i32* %8
%294 = icmp eq i32 %292, %293
br i1 %294, label %295, label %298
295: ; preds = %282
store i32 0, i32* %9
store i32 -1, i32* %10
%296 = load i32, i32* %8
%297 = add nsw i32 %296, 1
store i32 %297, i32* %8
br label %298
298: ; preds = %295, %282
br label %299
299: ; preds = %298
%300 = load i32, i32* %10
%301 = add nsw i32 %300, 1
store i32 %301, i32* %10
br label %278
302: ; preds = %278
br label %303
303: ; preds = %302
%304 = load i32, i32* %9
%305 = add nsw i32 %304, 1
store i32 %305, i32* %9
br label %273
306: ; preds = %273
%307 = load i32, i32* %8
%308 = load i32*, i32** %14
%309 = load i32, i32* %7
%310 = sext i32 %309 to i64
%311 = getelementptr inbounds i32, i32* %308, i64 %310
%312 = load i32, i32* %6
%313 = load i32, i32* %13
%314 = mul nsw i32 %312, %313
%315 = sext i32 %314 to i64
%316 = getelementptr inbounds i32, i32* %311, i64 %315
store i32 %307, i32* %316
br label %317
317: ; preds = %306, %260
br label %318
318: ; preds = %317
%319 = load i32, i32* %7
%320 = add nsw i32 %319, -1
store i32 %320, i32* %7
br label %257
321: ; preds = %257
br label %322
322: ; preds = %321
%323 = load i32, i32* %6
%324 = add nsw i32 %323, -1
store i32 %324, i32* %6
br label %251
325: ; preds = %251
br label %610
326: ; preds = %127
%327 = load i32, i32* %13
%328 = sdiv i32 %327, 4
store i32 %328, i32* %12
store i32 0, i32* %6
br label %329
329: ; preds = %387, %326
%330 = load i32, i32* %6
%331 = load i32, i32* %13
%332 = icmp slt i32 %330, %331
br i1 %332, label %333, label %390
333: ; preds = %329
store i32 0, i32* %7
br label %334
334: ; preds = %383, %333
%335 = load i32, i32* %7
%336 = load i32, i32* %13
%337 = icmp slt i32 %335, %336
br i1 %337, label %338, label %386
338: ; preds = %334
%339 = load i32, i32* %6
%340 = load i32, i32* %12
%341 = add nsw i32 %340, 1
%342 = mul nsw i32 %341, 2
%343 = icmp slt i32 %339, %342
br i1 %343, label %344, label %354
344: ; preds = %338
%345 = load i32*, i32** %14
%346 = load i32, i32* %7
%347 = sext i32 %346 to i64
%348 = getelementptr inbounds i32, i32* %345, i64 %347
%349 = load i32, i32* %6
%350 = load i32, i32* %13
%351 = mul nsw i32 %349, %350
%352 = sext i32 %351 to i64
%353 = getelementptr inbounds i32, i32* %348, i64 %352
store i32 -2, i32* %353
br label %382
354: ; preds = %338
%355 = load i32, i32* %6
%356 = load i32, i32* %12
%357 = add nsw i32 %356, 1
%358 = mul nsw i32 %357, 2
%359 = add nsw i32 %358, 1
%360 = icmp sgt i32 %355, %359
br i1 %360, label %361, label %371
361: ; preds = %354
%362 = load i32*, i32** %14
%363 = load i32, i32* %7
%364 = sext i32 %363 to i64
%365 = getelementptr inbounds i32, i32* %362, i64 %364
%366 = load i32, i32* %6
%367 = load i32, i32* %13
%368 = mul nsw i32 %366, %367
%369 = sext i32 %368 to i64
%370 = getelementptr inbounds i32, i32* %365, i64 %369
store i32 0, i32* %370
br label %381
371: ; preds = %354
%372 = load i32*, i32** %14
%373 = load i32, i32* %7
%374 = sext i32 %373 to i64
%375 = getelementptr inbounds i32, i32* %372, i64 %374
%376 = load i32, i32* %6
%377 = load i32, i32* %13
%378 = mul nsw i32 %376, %377
%379 = sext i32 %378 to i64
%380 = getelementptr inbounds i32, i32* %375, i64 %379
store i32 -1, i32* %380
br label %381
381: ; preds = %371, %361
br label %382
382: ; preds = %381, %344
br label %383
383: ; preds = %382
%384 = load i32, i32* %7
%385 = add nsw i32 %384, 1
store i32 %385, i32* %7
br label %334
386: ; preds = %334
br label %387
387: ; preds = %386
%388 = load i32, i32* %6
%389 = add nsw i32 %388, 1
store i32 %389, i32* %6
br label %329
390: ; preds = %329
store i32 0, i32* %6
br label %391
391: ; preds = %447, %390
%392 = load i32, i32* %6
%393 = icmp slt i32 %392, 4
br i1 %393, label %394, label %450
394: ; preds = %391
store i32 0, i32* %7
br label %395
395: ; preds = %443, %394
%396 = load i32, i32* %7
%397 = icmp slt i32 %396, 2
br i1 %397, label %398, label %446
398: ; preds = %395
%399 = load i32*, i32** %14
%400 = load i32, i32* %7
%401 = sext i32 %400 to i64
%402 = getelementptr inbounds i32, i32* %399, i64 %401
%403 = load i32, i32* %12
%404 = add nsw i32 %403, 1
%405 = mul nsw i32 %404, 2
%406 = sext i32 %405 to i64
%407 = getelementptr inbounds i32, i32* %402, i64 %406
%408 = getelementptr inbounds i32, i32* %407, i64 -2
%409 = load i32, i32* %6
%410 = load i32, i32* %12
%411 = add nsw i32 %410, 1
%412 = mul nsw i32 %411, 2
%413 = add nsw i32 %409, %412
%414 = sub nsw i32 %413, 2
%415 = load i32, i32* %13
%416 = mul nsw i32 %414, %415
%417 = sext i32 %416 to i64
%418 = getelementptr inbounds i32, i32* %408, i64 %417
store i32 -1, i32* %418
%419 = load i32, i32* %6
%420 = icmp sgt i32 %419, 1
br i1 %420, label %421, label %442
421: ; preds = %398
%422 = load i32*, i32** %14
%423 = load i32, i32* %7
%424 = sext i32 %423 to i64
%425 = getelementptr inbounds i32, i32* %422, i64 %424
%426 = load i32, i32* %12
%427 = add nsw i32 %426, 1
%428 = mul nsw i32 %427, 2
%429 = sext i32 %428 to i64
%430 = getelementptr inbounds i32, i32* %425, i64 %429
%431 = getelementptr inbounds i32, i32* %430, i64 -2
%432 = load i32, i32* %6
%433 = load i32, i32* %12
%434 = add nsw i32 %433, 1
%435 = mul nsw i32 %434, 2
%436 = add nsw i32 %432, %435
%437 = sub nsw i32 %436, 2
%438 = load i32, i32* %13
%439 = mul nsw i32 %437, %438
%440 = sext i32 %439 to i64
%441 = getelementptr inbounds i32, i32* %431, i64 %440
store i32 -2, i32* %441
br label %442
442: ; preds = %421, %398
br label %443
443: ; preds = %442
%444 = load i32, i32* %7
%445 = add nsw i32 %444, 1
store i32 %445, i32* %7
br label %395
446: ; preds = %395
br label %447
447: ; preds = %446
%448 = load i32, i32* %6
%449 = add nsw i32 %448, 1
store i32 %449, i32* %6
br label %391
450: ; preds = %391
store i32 1, i32* %7
store i32 3, i32* %6
br label %451
451: ; preds = %458, %450
%452 = load i32, i32* %6
%453 = load i32, i32* %13
%454 = icmp slt i32 %452, %453
br i1 %454, label %455, label %461
455: ; preds = %451
%456 = load i32, i32* %7
%457 = add nsw i32 %456, 1
store i32 %457, i32* %7
br label %458
458: ; preds = %455
%459 = load i32, i32* %6
%460 = add nsw i32 %459, 2
store i32 %460, i32* %6
br label %451
461: ; preds = %451
store i32 1, i32* %6
br label %462
462: ; preds = %606, %461
%463 = load i32, i32* %6
%464 = load i32, i32* %13
%465 = load i32, i32* %13
%466 = mul nsw i32 %464, %465
%467 = icmp sle i32 %463, %466
br i1 %467, label %468, label %609
468: ; preds = %462
%469 = load i32, i32* %6
%470 = icmp eq i32 %469, 1
br i1 %470, label %471, label %476
471: ; preds = %468
store i32 0, i32* %8
%472 = load i32, i32* %13
%473 = load i32, i32* %7
%474 = sub nsw i32 %472, %473
%475 = sub nsw i32 %474, 1
store i32 %475, i32* %9
br label %476
476: ; preds = %471, %468
%477 = load i32*, i32** %14
%478 = load i32, i32* %9
%479 = sext i32 %478 to i64
%480 = getelementptr inbounds i32, i32* %477, i64 %479
%481 = load i32, i32* %8
%482 = load i32, i32* %13
%483 = mul nsw i32 %481, %482
%484 = sext i32 %483 to i64
%485 = getelementptr inbounds i32, i32* %480, i64 %484
%486 = load i32, i32* %485
store i32 %486, i32* %12
store i32 0, i32* %7
br label %487
487: ; preds = %577, %476
%488 = load i32, i32* %7
%489 = icmp slt i32 %488, 4
br i1 %489, label %490, label %580
490: ; preds = %487
%491 = load i32, i32* %8
store i32 %491, i32* %10
%492 = load i32, i32* %9
store i32 %492, i32* %11
%493 = load i32, i32* %12
%494 = icmp eq i32 %493, -2
br i1 %494, label %495, label %514
495: ; preds = %490
%496 = load i32, i32* %7
%497 = icmp eq i32 %496, 0
br i1 %497, label %501, label %498
498: ; preds = %495
%499 = load i32, i32* %7
%500 = icmp eq i32 %499, 2
br i1 %500, label %501, label %504
501: ; preds = %498, %495
%502 = load i32, i32* %11
%503 = add nsw i32 %502, 1
store i32 %503, i32* %11
br label %504
504: ; preds = %501, %498
%505 = load i32, i32* %7
%506 = icmp eq i32 %505, 1
br i1 %506, label %510, label %507
507: ; preds = %504
%508 = load i32, i32* %7
%509 = icmp eq i32 %508, 2
br i1 %509, label %510, label %513
510: ; preds = %507, %504
%511 = load i32, i32* %10
%512 = add nsw i32 %511, 1
store i32 %512, i32* %10
br label %513
513: ; preds = %510, %507
br label %560
514: ; preds = %490
%515 = load i32, i32* %12
%516 = icmp eq i32 %515, -1
br i1 %516, label %517, label %536
517: ; preds = %514
%518 = load i32, i32* %7
%519 = icmp eq i32 %518, 2
br i1 %519, label %523, label %520
520: ; preds = %517
%521 = load i32, i32* %7
%522 = icmp eq i32 %521, 3
br i1 %522, label %523, label %526
523: ; preds = %520, %517
%524 = load i32, i32* %11
%525 = add nsw i32 %524, 1
store i32 %525, i32* %11
br label %526
526: ; preds = %523, %520
%527 = load i32, i32* %7
%528 = icmp eq i32 %527, 1
br i1 %528, label %532, label %529
529: ; preds = %526
%530 = load i32, i32* %7
%531 = icmp eq i32 %530, 2
br i1 %531, label %532, label %535
532: ; preds = %529, %526
%533 = load i32, i32* %10
%534 = add nsw i32 %533, 1
store i32 %534, i32* %10
br label %535
535: ; preds = %532, %529
br label %559
536: ; preds = %514
%537 = load i32, i32* %12
%538 = icmp eq i32 %537, 0
br i1 %538, label %539, label %558
539: ; preds = %536
%540 = load i32, i32* %7
%541 = icmp eq i32 %540, 1
br i1 %541, label %545, label %542
542: ; preds = %539
%543 = load i32, i32* %7
%544 = icmp eq i32 %543, 3
br i1 %544, label %545, label %548
545: ; preds = %542, %539
%546 = load i32, i32* %11
%547 = add nsw i32 %546, 1
store i32 %547, i32* %11
br label %548
548: ; preds = %545, %542
%549 = load i32, i32* %7
%550 = icmp eq i32 %549, 1
br i1 %550, label %554, label %551
551: ; preds = %548
%552 = load i32, i32* %7
%553 = icmp eq i32 %552, 2
br i1 %553, label %554, label %557
554: ; preds = %551, %548
%555 = load i32, i32* %10
%556 = add nsw i32 %555, 1
store i32 %556, i32* %10
br label %557
557: ; preds = %554, %551
br label %558
558: ; preds = %557, %536
br label %559
559: ; preds = %558, %535
br label %560
560: ; preds = %559, %513
%561 = load i32, i32* %6
%562 = load i32*, i32** %14
%563 = load i32, i32* %11
%564 = sext i32 %563 to i64
%565 = getelementptr inbounds i32, i32* %562, i64 %564
%566 = load i32, i32* %10
%567 = load i32, i32* %13
%568 = mul nsw i32 %566, %567
%569 = sext i32 %568 to i64
%570 = getelementptr inbounds i32, i32* %565, i64 %569
store i32 %561, i32* %570
%571 = load i32, i32* %7
%572 = icmp ne i32 %571, 3
br i1 %572, label %573, label %576
573: ; preds = %560
%574 = load i32, i32* %6
%575 = add nsw i32 %574, 1
store i32 %575, i32* %6
br label %576
576: ; preds = %573, %560
br label %577
577: ; preds = %576
%578 = load i32, i32* %7
%579 = add nsw i32 %578, 1
store i32 %579, i32* %7
br label %487
580: ; preds = %487
%581 = load i32, i32* %6
%582 = load i32, i32* %13
%583 = mul nsw i32 2, %582
%584 = srem i32 %581, %583
%585 = icmp eq i32 %584, 0
br i1 %585, label %586, label %589
586: ; preds = %580
%587 = load i32, i32* %8
%588 = add nsw i32 %587, 2
store i32 %588, i32* %8
br label %605
589: ; preds = %580
%590 = load i32, i32* %8
%591 = sub nsw i32 %590, 2
store i32 %591, i32* %8
%592 = load i32, i32* %9
%593 = add nsw i32 %592, 2
store i32 %593, i32* %9
%594 = load i32, i32* %9
%595 = load i32, i32* %13
%596 = icmp eq i32 %594, %595
br i1 %596, label %597, label %598
597: ; preds = %589
store i32 0, i32* %9
br label %598
598: ; preds = %597, %589
%599 = load i32, i32* %8
%600 = icmp slt i32 %599, 0
br i1 %600, label %601, label %604
601: ; preds = %598
%602 = load i32, i32* %13
%603 = sub nsw i32 %602, 2
store i32 %603, i32* %8
br label %604
604: ; preds = %601, %598
br label %605
605: ; preds = %604, %586
br label %606
606: ; preds = %605
%607 = load i32, i32* %6
%608 = add nsw i32 %607, 1
store i32 %608, i32* %6
br label %462
609: ; preds = %462
br label %610
610: ; preds = %609, %325
br label %611
611: ; preds = %610, %126
%612 = call i32* @fopen(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
store i32* %612, i32** %15
%613 = load i32*, i32** %15
%614 = load i32, i32* %13
%615 = call i32 (i32*, i8*, ...) @fprintf(i32* %613, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.6, i64 0, i64 0), i32 %614)
%616 = load i32*, i32** %15
%617 = load i32, i32* %13
%618 = load i32, i32* %13
%619 = load i32, i32* %13
%620 = mul nsw i32 %618, %619
%621 = add nsw i32 %620, 1
%622 = mul nsw i32 %617, %621
%623 = sdiv i32 %622, 2
%624 = call i32 (i32*, i8*, ...) @fprintf(i32* %616, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.7, i64 0, i64 0), i32 %623)
store i32 0, i32* %6
br label %625
625: ; preds = %671, %611
%626 = load i32, i32* %6
%627 = load i32, i32* %13
%628 = icmp slt i32 %626, %627
br i1 %628, label %629, label %674
629: ; preds = %625
store i32 0, i32* %7
br label %630
630: ; preds = %667, %629
%631 = load i32, i32* %7
%632 = load i32, i32* %13
%633 = icmp slt i32 %631, %632
br i1 %633, label %634, label %670
634: ; preds = %630
%635 = load i32*, i32** %15
%636 = load i32*, i32** %14
%637 = load i32, i32* %7
%638 = sext i32 %637 to i64
%639 = getelementptr inbounds i32, i32* %636, i64 %638
%640 = load i32, i32* %6
%641 = load i32, i32* %13
%642 = mul nsw i32 %640, %641
%643 = sext i32 %642 to i64
%644 = getelementptr inbounds i32, i32* %639, i64 %643
%645 = load i32, i32* %644
%646 = call i32 (i32*, i8*, ...) @fprintf(i32* %635, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0), i32 %645)
%647 = load i32*, i32** %14
%648 = load i32, i32* %7
%649 = sext i32 %648 to i64
%650 = getelementptr inbounds i32, i32* %647, i64 %649
%651 = load i32, i32* %6
%652 = load i32, i32* %13
%653 = mul nsw i32 %651, %652
%654 = sext i32 %653 to i64
%655 = getelementptr inbounds i32, i32* %650, i64 %654
%656 = load i32, i32* %655
%657 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0), i32 %656)
%658 = load i32, i32* %7
%659 = load i32, i32* %13
%660 = sub nsw i32 %659, 1
%661 = icmp eq i32 %658, %660
br i1 %661, label %662, label %666
662: ; preds = %634
%663 = load i32*, i32** %15
%664 = call i32 (i32*, i8*, ...) @fprintf(i32* %663, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%665 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
br label %666
666: ; preds = %662, %634
br label %667
667: ; preds = %666
%668 = load i32, i32* %7
%669 = add nsw i32 %668, 1
store i32 %669, i32* %7
br label %630
670: ; preds = %630
br label %671
671: ; preds = %670
%672 = load i32, i32* %6
%673 = add nsw i32 %672, 1
store i32 %673, i32* %6
br label %625
674: ; preds = %625
%675 = load i32*, i32** %15
%676 = call i32 @fclose(i32* %675)
%677 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i64 0, i64 0))
%678 = call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0))
%679 = load i32*, i32** %14
%680 = call i32 @free(i32* %679)
br label %684
681: ; preds = %27
%682 = load i32, i32* %13
%683 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.13, i64 0, i64 0), i32 %682)
br label %684
684: ; preds = %681, %674
ret i32 0
}

LLVM IR (-O2):
@.str = [38 x i8] c" Ingrese el orden del cuadrado (n): \00"
@.str.1 = [3 x i8] c"%i\00"
@.str.3 = [64 x i8] c"\0A La suma de filas, columnas y diagonales principales es: %i\0A\0A\00"
@.str.4 = [20 x i8] c"Cuadrado Magico.rtf\00"
@.str.5 = [2 x i8] c"w\00"
@.str.6 = [34 x i8] c"Cuadrado Magico de orden n = %i\0A\0A\00"
@.str.7 = [61 x i8] c"La suma de filas, columnas y diagonales principales es: %i\0A\0A\00"
@.str.8 = [5 x i8] c" %5i\00"
@.str.9 = [5 x i8] c" %3i\00"
@.str.11 = [4 x i8] c"\0A \00"
@.str.12 = [6 x i8] c"pause\00"
@.str.13 = [58 x i8] c"\0A Imposible reservar memoria para cuadrado de orden %i\0A\0A\00"
@str = [45 x i8] c" Error, El orden del cuadrado debe ser >=3\0A\00"
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = alloca i32
%4 = bitcast i32* %3 to i8*
store i32 0, i32* %3
br label %5
5: ; preds = %2, %10
%6 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @.str, i64 0, i64 0))
%7 = call i32 @scanf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32* %3)
%8 = load i32, i32* %3
%9 = icmp slt i32 %8, 3
br i1 %9, label %10, label %14
10: ; preds = %5
%11 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @str, i64 0, i64 0))
%12 = load i32, i32* %3
%13 = icmp slt i32 %12, 3
br i1 %13, label %5, label %14
14: ; preds = %5, %10
%15 = phi i32 [ %12, %10 ], [ %8, %5 ]
%16 = shl i32 %15, 2
%17 = mul i32 %16, %15
%18 = call i64 @malloc(i32 %17)
%19 = inttoptr i64 %18 to i32*
%20 = icmp eq i64 %18, 0
%21 = load i32, i32* %3
br i1 %20, label %486, label %22
22: ; preds = %14
%23 = mul nsw i32 %21, %21
%24 = add nuw nsw i32 %23, 1
%25 = mul nsw i32 %24, %21
%26 = sdiv i32 %25, 2
%27 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @.str.3, i64 0, i64 0), i32 %26)
%28 = load i32, i32* %3
%29 = and i32 %28, 1
%30 = icmp eq i32 %29, 0
br i1 %30, label %75, label %31
31: ; preds = %22
%32 = mul nsw i32 %28, %28
%33 = icmp eq i32 %32, 0
br i1 %33, label %433, label %34
34: ; preds = %31
%35 = icmp sgt i32 %28, 3
%36 = add nsw i32 %28, -4
%37 = lshr i32 %36, 1
%38 = sub nuw nsw i32 -3, %37
%39 = select i1 %35, i32 %38, i32 -2
%40 = add i32 %28, %39
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i32, i32* %19, i64 %41
store i32 1, i32* %42
%43 = load i32, i32* %3
%44 = mul nsw i32 %43, %43
%45 = icmp ugt i32 %44, 1
br i1 %45, label %46, label %433
46: ; preds = %34, %63
%47 = phi i32 [ %71, %63 ], [ %43, %34 ]
%48 = phi i32 [ %72, %63 ], [ 2, %34 ]
%49 = phi i32 [ %65, %63 ], [ %40, %34 ]
%50 = phi i32 [ %64, %63 ], [ 0, %34 ]
%51 = add nsw i32 %48, -1
%52 = srem i32 %51, %47
%53 = icmp eq i32 %52, 0
br i1 %53, label %54, label %56
54: ; preds = %46
%55 = add nsw i32 %50, 1
br label %63
56: ; preds = %46
%57 = add nsw i32 %49, 1
%58 = icmp eq i32 %57, %47
%59 = select i1 %58, i32 0, i32 %57
%60 = icmp slt i32 %50, 1
%61 = select i1 %60, i32 %47, i32 %50
%62 = add nsw i32 %61, -1
br label %63
63: ; preds = %54, %56
%64 = phi i32 [ %55, %54 ], [ %62, %56 ]
%65 = phi i32 [ %49, %54 ], [ %59, %56 ]
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds i32, i32* %19, i64 %66
%68 = mul nsw i32 %64, %47
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i32, i32* %67, i64 %69
store i32 %48, i32* %70
%71 = load i32, i32* %3
%72 = add nuw nsw i32 %48, 1
%73 = mul nsw i32 %71, %71
%74 = icmp ult i32 %48, %73
br i1 %74, label %46, label %433
75: ; preds = %22
%76 = and i32 %28, 3
%77 = icmp eq i32 %76, 0
br i1 %77, label %78, label %218
78: ; preds = %75
%79 = icmp sgt i32 %28, 0
br i1 %79, label %80, label %103
80: ; preds = %78, %98
%81 = phi i32 [ %99, %98 ], [ %28, %78 ]
%82 = phi i32 [ %101, %98 ], [ 0, %78 ]
%83 = phi i32 [ %100, %98 ], [ 1, %78 ]
%84 = icmp sgt i32 %81, 0
br i1 %84, label %85, label %98
85: ; preds = %80, %85
%86 = phi i64 [ %94, %85 ], [ 0, %80 ]
%87 = phi i32 [ %95, %85 ], [ %81, %80 ]
%88 = phi i32 [ %93, %85 ], [ %83, %80 ]
%89 = getelementptr inbounds i32, i32* %19, i64 %86
%90 = mul nsw i32 %87, %82
%91 = sext i32 %90 to i64
%92 = getelementptr inbounds i32, i32* %89, i64 %91
store i32 %88, i32* %92
%93 = add nsw i32 %88, 1
%94 = add nuw nsw i64 %86, 1
%95 = load i32, i32* %3
%96 = sext i32 %95 to i64
%97 = icmp slt i64 %94, %96
br i1 %97, label %85, label %98
98: ; preds = %85, %80
%99 = phi i32 [ %81, %80 ], [ %95, %85 ]
%100 = phi i32 [ %83, %80 ], [ %93, %85 ]
%101 = add nuw nsw i32 %82, 1
%102 = icmp slt i32 %101, %99
br i1 %102, label %80, label %103
103: ; preds = %98, %78
%104 = phi i32 [ %28, %78 ], [ %99, %98 ]
br label %105
105: ; preds = %103, %154
%106 = phi i32 [ %155, %154 ], [ %104, %103 ]
%107 = phi i32 [ %156, %154 ], [ %104, %103 ]
%108 = phi i32 [ %157, %154 ], [ 0, %103 ]
%109 = icmp sgt i32 %107, 0
br i1 %109, label %110, label %154
110: ; preds = %105
%111 = and i32 %108, 2147483646
%112 = icmp eq i32 %111, 2
%113 = select i1 %112, i32 -1, i32 1
br label %114
114: ; preds = %110, %150
%115 = phi i32 [ %106, %110 ], [ %151, %150 ]
%116 = phi i32 [ %107, %110 ], [ %151, %150 ]
%117 = phi i32 [ 0, %110 ], [ %152, %150 ]
switch i32 %108, label %124 [
i32 0, label %125
i32 1, label %118
i32 2, label %119
i32 3, label %122
]
118: ; preds = %114
br label %125
119: ; preds = %114
%120 = xor i32 %117, -1
%121 = add i32 %116, %120
br label %125
122: ; preds = %114
%123 = add nsw i32 %116, -1
br label %125
124: ; preds = %114
br label %125
125: ; preds = %114, %124, %118, %122, %119
%126 = phi i32 [ 0, %118 ], [ %121, %119 ], [ %123, %122 ], [ %117, %114 ], [ 0, %124 ]
%127 = phi i32 [ %117, %118 ], [ 0, %119 ], [ %117, %122 ], [ %108, %114 ], [ 0, %124 ]
%128 = icmp slt i32 %127, %116
br i1 %128, label %129, label %150
129: ; preds = %125
%130 = icmp slt i32 %126, %116
%131 = icmp sgt i32 %126, -1
%132 = and i1 %131, %130
br i1 %132, label %137, label %150
133: ; preds = %137
%134 = icmp slt i32 %147, %148
%135 = icmp sgt i32 %147, -1
%136 = and i1 %135, %134
br i1 %136, label %137, label %150
137: ; preds = %129, %133
%138 = phi i32 [ %147, %133 ], [ %126, %129 ]
%139 = phi i32 [ %146, %133 ], [ %127, %129 ]
%140 = phi i32 [ %148, %133 ], [ %116, %129 ]
%141 = zext i32 %138 to i64
%142 = getelementptr inbounds i32, i32* %19, i64 %141
%143 = mul nsw i32 %140, %139
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds i32, i32* %142, i64 %144
store i32 0, i32* %145
%146 = add nuw nsw i32 %139, 1
%147 = add nsw i32 %138, %113
%148 = load i32, i32* %3
%149 = icmp slt i32 %146, %148
br i1 %149, label %133, label %150
150: ; preds = %133, %137, %129, %125
%151 = phi i32 [ %115, %125 ], [ %115, %129 ], [ %148, %137 ], [ %148, %133 ]
%152 = add nuw nsw i32 %117, 4
%153 = icmp slt i32 %152, %151
br i1 %153, label %114, label %154
154: ; preds = %150, %105
%155 = phi i32 [ %106, %105 ], [ %151, %150 ]
%156 = phi i32 [ %107, %105 ], [ %151, %150 ]
%157 = add nuw nsw i32 %108, 1
%158 = icmp eq i32 %157, 4
br i1 %158, label %159, label %105
159: ; preds = %154
%160 = icmp sgt i32 %155, 0
br i1 %160, label %166, label %433
161: ; preds = %213, %166
%162 = phi i32 [ %169, %166 ], [ %214, %213 ]
%163 = icmp sgt i32 %168, 1
br i1 %163, label %164, label %433
164: ; preds = %161
%165 = load i32, i32* %3
br label %166
166: ; preds = %159, %164
%167 = phi i32 [ %165, %164 ], [ %155, %159 ]
%168 = phi i32 [ %170, %164 ], [ %155, %159 ]
%169 = phi i32 [ %162, %164 ], [ 1, %159 ]
%170 = add nsw i32 %168, -1
%171 = icmp sgt i32 %167, 0
br i1 %171, label %172, label %161
172: ; preds = %166
%173 = zext i32 %167 to i64
br label %174
174: ; preds = %216, %172
%175 = phi i32 [ %167, %172 ], [ %217, %216 ]
%176 = phi i64 [ %173, %172 ], [ %178, %216 ]
%177 = phi i32 [ %169, %172 ], [ %214, %216 ]
%178 = add nsw i64 %176, -1
%179 = and i64 %178, 4294967295
%180 = getelementptr inbounds i32, i32* %19, i64 %179
%181 = mul nsw i32 %175, %170
%182 = sext i32 %181 to i64
%183 = getelementptr inbounds i32, i32* %180, i64 %182
%184 = load i32, i32* %183
%185 = icmp eq i32 %184, 0
br i1 %185, label %186, label %213
186: ; preds = %174
%187 = icmp sgt i32 %175, 0
br i1 %187, label %188, label %211
188: ; preds = %186, %205
%189 = phi i32 [ %206, %205 ], [ 0, %186 ]
%190 = phi i32 [ %207, %205 ], [ 0, %186 ]
%191 = phi i32 [ %200, %205 ], [ %177, %186 ]
%192 = sext i32 %189 to i64
%193 = getelementptr inbounds i32, i32* %19, i64 %192
%194 = mul nsw i32 %190, %175
%195 = sext i32 %194 to i64
%196 = getelementptr inbounds i32, i32* %193, i64 %195
%197 = load i32, i32* %196
%198 = icmp eq i32 %197, %191
%199 = zext i1 %198 to i32
%200 = add nsw i32 %191, %199
%201 = select i1 %198, i32 0, i32 %190
%202 = add nsw i32 %189, 1
%203 = select i1 %198, i32 0, i32 %202
%204 = icmp slt i32 %203, %175
br i1 %204, label %205, label %208
205: ; preds = %188, %208
%206 = phi i32 [ %203, %188 ], [ 0, %208 ]
%207 = phi i32 [ %201, %188 ], [ %209, %208 ]
br label %188
208: ; preds = %188
%209 = add nsw i32 %201, 1
%210 = icmp slt i32 %209, %175
br i1 %210, label %205, label %211
211: ; preds = %208, %186
%212 = phi i32 [ %177, %186 ], [ %200, %208 ]
store i32 %212, i32* %183
br label %213
213: ; preds = %174, %211
%214 = phi i32 [ %212, %211 ], [ %177, %174 ]
%215 = icmp sgt i64 %176, 1
br i1 %215, label %216, label %161
216: ; preds = %213
%217 = load i32, i32* %3
br label %174
218: ; preds = %75
%219 = sdiv i32 %28, 4
%220 = icmp sgt i32 %28, 0
%221 = shl nsw i32 %219, 1
%222 = add nsw i32 %221, 2
br i1 %220, label %223, label %249
223: ; preds = %218
%224 = add nsw i32 %221, 3
br label %225
225: ; preds = %223, %245
%226 = phi i32 [ %28, %223 ], [ %246, %245 ]
%227 = phi i32 [ 0, %223 ], [ %247, %245 ]
%228 = icmp sgt i32 %226, 0
br i1 %228, label %229, label %245
229: ; preds = %225
%230 = icmp slt i32 %227, %222
%231 = icmp sle i32 %227, %224
%232 = sext i1 %231 to i32
%233 = select i1 %230, i32 -2, i32 %232
br label %234
234: ; preds = %229, %234
%235 = phi i64 [ 0, %229 ], [ %241, %234 ]
%236 = phi i32 [ %226, %229 ], [ %242, %234 ]
%237 = getelementptr inbounds i32, i32* %19, i64 %235
%238 = mul nsw i32 %236, %227
%239 = sext i32 %238 to i64
%240 = getelementptr inbounds i32, i32* %237, i64 %239
store i32 %233, i32* %240
%241 = add nuw nsw i64 %235, 1
%242 = load i32, i32* %3
%243 = sext i32 %242 to i64
%244 = icmp slt i64 %241, %243
br i1 %244, label %234, label %245
245: ; preds = %234, %225
%246 = phi i32 [ %226, %225 ], [ %242, %234 ]
%247 = add nuw nsw i32 %227, 1
%248 = icmp slt i32 %247, %246
br i1 %248, label %225, label %249
249: ; preds = %245, %218
%250 = phi i32 [ %28, %218 ], [ %246, %245 ]
%251 = sext i32 %222 to i64
%252 = getelementptr inbounds i32, i32* %19, i64 %251
%253 = getelementptr inbounds i32, i32* %252, i64 -2
%254 = mul nsw i32 %250, %221
%255 = sext i32 %254 to i64
%256 = getelementptr inbounds i32, i32* %253, i64 %255
store i32 -1, i32* %256
%257 = load i32, i32* %3
%258 = getelementptr inbounds i32, i32* %19, i64 1
%259 = getelementptr inbounds i32, i32* %258, i64 %251
%260 = getelementptr inbounds i32, i32* %259, i64 -2
%261 = mul nsw i32 %257, %221
%262 = sext i32 %261 to i64
%263 = getelementptr inbounds i32, i32* %260, i64 %262
store i32 -1, i32* %263
%264 = load i32, i32* %3
%265 = or i32 %221, 1
%266 = mul nsw i32 %264, %265
%267 = sext i32 %266 to i64
%268 = getelementptr inbounds i32, i32* %253, i64 %267
store i32 -1, i32* %268
%269 = load i32, i32* %3
%270 = mul nsw i32 %269, %265
%271 = sext i32 %270 to i64
%272 = getelementptr inbounds i32, i32* %260, i64 %271
store i32 -1, i32* %272
%273 = load i32, i32* %3
%274 = mul nsw i32 %273, %222
%275 = sext i32 %274 to i64
%276 = getelementptr inbounds i32, i32* %253, i64 %275
store i32 -1, i32* %276
%277 = load i32, i32* %3
%278 = mul nsw i32 %277, %222
%279 = sext i32 %278 to i64
%280 = getelementptr inbounds i32, i32* %253, i64 %279
store i32 -2, i32* %280
%281 = load i32, i32* %3
%282 = mul nsw i32 %281, %222
%283 = sext i32 %282 to i64
%284 = getelementptr inbounds i32, i32* %260, i64 %283
store i32 -1, i32* %284
%285 = load i32, i32* %3
%286 = mul nsw i32 %285, %222
%287 = sext i32 %286 to i64
%288 = getelementptr inbounds i32, i32* %260, i64 %287
store i32 -2, i32* %288
%289 = add nsw i32 %221, 3
%290 = load i32, i32* %3
%291 = mul nsw i32 %290, %289
%292 = sext i32 %291 to i64
%293 = getelementptr inbounds i32, i32* %253, i64 %292
store i32 -1, i32* %293
%294 = load i32, i32* %3
%295 = mul nsw i32 %294, %289
%296 = sext i32 %295 to i64
%297 = getelementptr inbounds i32, i32* %253, i64 %296
store i32 -2, i32* %297
%298 = load i32, i32* %3
%299 = mul nsw i32 %298, %289
%300 = sext i32 %299 to i64
%301 = getelementptr inbounds i32, i32* %260, i64 %300
store i32 -1, i32* %301
%302 = load i32, i32* %3
%303 = mul nsw i32 %302, %289
%304 = sext i32 %303 to i64
%305 = getelementptr inbounds i32, i32* %260, i64 %304
store i32 -2, i32* %305
%306 = load i32, i32* %3
%307 = mul nsw i32 %306, %306
%308 = icmp eq i32 %307, 0
br i1 %308, label %433, label %309
309: ; preds = %249
%310 = icmp sgt i32 %306, 3
%311 = add nsw i32 %306, -4
%312 = lshr i32 %311, 1
%313 = sub nuw i32 -3, %312
%314 = select i1 %310, i32 %313, i32 -2
br label %315
315: ; preds = %309, %427
%316 = phi i32 [ %414, %427 ], [ %306, %309 ]
%317 = phi i32 [ %430, %427 ], [ 1, %309 ]
%318 = phi i32 [ -5, %427 ], [ %314, %309 ]
%319 = phi i32 [ %429, %427 ], [ undef, %309 ]
%320 = phi i32 [ %428, %427 ], [ undef, %309 ]
%321 = icmp eq i32 %317, 1
%322 = add i32 %316, %318
%323 = select i1 %321, i32 0, i32 %320
%324 = select i1 %321, i32 %322, i32 %319
%325 = sext i32 %324 to i64
%326 = getelementptr inbounds i32, i32* %19, i64 %325
%327 = mul nsw i32 %323, %316
%328 = sext i32 %327 to i64
%329 = getelementptr inbounds i32, i32* %326, i64 %328
%330 = load i32, i32* %329
%331 = icmp eq i32 %330, -2
br i1 %331, label %332, label %353
332: ; preds = %315
%333 = add nsw i32 %324, 1
%334 = sext i32 %333 to i64
%335 = getelementptr inbounds i32, i32* %19, i64 %334
%336 = getelementptr inbounds i32, i32* %335, i64 %328
store i32 %317, i32* %336
%337 = add nuw nsw i32 %317, 1
%338 = add nsw i32 %323, 1
%339 = getelementptr inbounds i32, i32* %19, i64 %325
%340 = load i32, i32* %3
%341 = mul nsw i32 %340, %338
%342 = sext i32 %341 to i64
%343 = getelementptr inbounds i32, i32* %339, i64 %342
store i32 %337, i32* %343
%344 = add nuw nsw i32 %317, 2
%345 = add nsw i32 %324, 1
%346 = add nsw i32 %323, 1
%347 = sext i32 %345 to i64
%348 = getelementptr inbounds i32, i32* %19, i64 %347
%349 = load i32, i32* %3
%350 = mul nsw i32 %349, %346
%351 = sext i32 %350 to i64
%352 = getelementptr inbounds i32, i32* %348, i64 %351
store i32 %344, i32* %352
br label %405
353: ; preds = %315
%354 = getelementptr inbounds i32, i32* %19, i64 %325
%355 = getelementptr inbounds i32, i32* %354, i64 %328
store i32 %317, i32* %355
%356 = add nuw nsw i32 %317, 1
switch i32 %330, label %392 [
i32 0, label %357
i32 -1, label %375
]
357: ; preds = %353
%358 = add nsw i32 %324, 1
%359 = add nsw i32 %323, 1
%360 = sext i32 %358 to i64
%361 = getelementptr inbounds i32, i32* %19, i64 %360
%362 = load i32, i32* %3
%363 = mul nsw i32 %362, %359
%364 = sext i32 %363 to i64
%365 = getelementptr inbounds i32, i32* %361, i64 %364
store i32 %356, i32* %365
%366 = add nuw nsw i32 %317, 2
%367 = add nsw i32 %323, 1
%368 = sext i32 %324 to i64
%369 = getelementptr inbounds i32, i32* %19, i64 %368
%370 = load i32, i32* %3
%371 = mul nsw i32 %370, %367
%372 = sext i32 %371 to i64
%373 = getelementptr inbounds i32, i32* %369, i64 %372
store i32 %366, i32* %373
%374 = add nsw i32 %324, 1
br label %405
375: ; preds = %353
%376 = add nsw i32 %323, 1
%377 = getelementptr inbounds i32, i32* %19, i64 %325
%378 = load i32, i32* %3
%379 = mul nsw i32 %378, %376
%380 = sext i32 %379 to i64
%381 = getelementptr inbounds i32, i32* %377, i64 %380
store i32 %356, i32* %381
%382 = add nuw nsw i32 %317, 2
%383 = add nsw i32 %324, 1
%384 = add nsw i32 %323, 1
%385 = sext i32 %383 to i64
%386 = getelementptr inbounds i32, i32* %19, i64 %385
%387 = load i32, i32* %3
%388 = mul nsw i32 %387, %384
%389 = sext i32 %388 to i64
%390 = getelementptr inbounds i32, i32* %386, i64 %389
store i32 %382, i32* %390
%391 = add nsw i32 %324, 1
br label %405
392: ; preds = %353
%393 = getelementptr inbounds i32, i32* %19, i64 %325
%394 = load i32, i32* %3
%395 = mul nsw i32 %394, %323
%396 = sext i32 %395 to i64
%397 = getelementptr inbounds i32, i32* %393, i64 %396
store i32 %356, i32* %397
%398 = add nuw nsw i32 %317, 2
%399 = sext i32 %324 to i64
%400 = getelementptr inbounds i32, i32* %19, i64 %399
%401 = load i32, i32* %3
%402 = mul nsw i32 %401, %323
%403 = sext i32 %402 to i64
%404 = getelementptr inbounds i32, i32* %400, i64 %403
store i32 %398, i32* %404
br label %405
405: ; preds = %392, %332, %375, %357
%406 = phi i32 [ %391, %375 ], [ %374, %357 ], [ %324, %332 ], [ %324, %392 ]
%407 = add nuw nsw i32 %317, 3
%408 = sext i32 %406 to i64
%409 = getelementptr inbounds i32, i32* %19, i64 %408
%410 = load i32, i32* %3
%411 = mul nsw i32 %410, %323
%412 = sext i32 %411 to i64
%413 = getelementptr inbounds i32, i32* %409, i64 %412
store i32 %407, i32* %413
%414 = load i32, i32* %3
%415 = shl nsw i32 %414, 1
%416 = srem i32 %407, %415
%417 = icmp eq i32 %416, 0
br i1 %417, label %418, label %420
418: ; preds = %405
%419 = add nsw i32 %323, 2
br label %427
420: ; preds = %405
%421 = add nsw i32 %324, 2
%422 = icmp eq i32 %421, %414
%423 = select i1 %422, i32 0, i32 %421
%424 = icmp slt i32 %323, 2
%425 = select i1 %424, i32 %414, i32 %323
%426 = add nsw i32 %425, -2
br label %427
427: ; preds = %420, %418
%428 = phi i32 [ %419, %418 ], [ %426, %420 ]
%429 = phi i32 [ %324, %418 ], [ %423, %420 ]
%430 = add nuw nsw i32 %317, 4
%431 = mul nsw i32 %414, %414
%432 = icmp ult i32 %407, %431
br i1 %432, label %315, label %433
433: ; preds = %63, %427, %161, %34, %31, %249, %159
%434 = call i32* @fopen(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.4, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.5, i64 0, i64 0))
%435 = load i32, i32* %3
%436 = call i32 (i32*, i8*, ...) @fprintf(i32* %434, i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.6, i64 0, i64 0), i32 %435)
%437 = load i32, i32* %3
%438 = mul nsw i32 %437, %437
%439 = add nuw nsw i32 %438, 1
%440 = mul nsw i32 %439, %437
%441 = sdiv i32 %440, 2
%442 = call i32 (i32*, i8*, ...) @fprintf(i32* %434, i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.7, i64 0, i64 0), i32 %441)
%443 = load i32, i32* %3
%444 = icmp sgt i32 %443, 0
br i1 %444, label %445, label %481
445: ; preds = %433, %477
%446 = phi i32 [ %478, %477 ], [ %443, %433 ]
%447 = phi i32 [ %479, %477 ], [ 0, %433 ]
%448 = icmp sgt i32 %446, 0
br i1 %448, label %449, label %477
449: ; preds = %445, %472
%450 = phi i64 [ %474, %472 ], [ 0, %445 ]
%451 = phi i32 [ %473, %472 ], [ %446, %445 ]
%452 = getelementptr inbounds i32, i32* %19, i64 %450
%453 = mul nsw i32 %451, %447
%454 = sext i32 %453 to i64
%455 = getelementptr inbounds i32, i32* %452, i64 %454
%456 = load i32, i32* %455
%457 = call i32 (i32*, i8*, ...) @fprintf(i32* %434, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0), i32 %456)
%458 = load i32, i32* %3
%459 = mul nsw i32 %458, %447
%460 = sext i32 %459 to i64
%461 = getelementptr inbounds i32, i32* %452, i64 %460
%462 = load i32, i32* %461
%463 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0), i32 %462)
%464 = load i32, i32* %3
%465 = add nsw i32 %464, -1
%466 = zext i32 %465 to i64
%467 = icmp eq i64 %450, %466
br i1 %467, label %468, label %472
468: ; preds = %449
%469 = call i32 @fputc(i32 10, i32* %434)
%470 = call i32 @putchar(i32 10)
%471 = load i32, i32* %3
br label %472
472: ; preds = %449, %468
%473 = phi i32 [ %464, %449 ], [ %471, %468 ]
%474 = add nuw nsw i64 %450, 1
%475 = sext i32 %473 to i64
%476 = icmp slt i64 %474, %475
br i1 %476, label %449, label %477
477: ; preds = %472, %445
%478 = phi i32 [ %446, %445 ], [ %473, %472 ]
%479 = add nuw nsw i32 %447, 1
%480 = icmp slt i32 %479, %478
br i1 %480, label %445, label %481
481: ; preds = %477, %433
%482 = call i32 @fclose(i32* %434)
%483 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i64 0, i64 0))
%484 = call i32 @system(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0))
%485 = call i32 @free(i32* %19)
br label %488
486: ; preds = %14
%487 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @.str.13, i64 0, i64 0), i32 %21)
br label %488
488: ; preds = %486, %481
ret i32 0
}