#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 /*<<< orphan*/ errno;
int fs_append_file(char *, char *, ...);
int fs_create_file(char *, char *);
int fs_read_file(char *, char **);
int /*<<< orphan*/ log_debug(char *, char *, ...);
scalar_t__ malloc(int);
int /*<<< orphan*/ memcpy(char *, char *, int);
scalar_t__ strcmp(char *, char *);
char *strerror(int /*<<< orphan*/);
int strlen(char *);
scalar_t__ strncmp(char *, char *, int);
int create_autoload(char *files[], int length, char *cwd) {
  int found_namespace;
  int found_class;
  char *namespace;
  char *class;
  char *buffer = 0;
  int size;
  int start;
  int result = 0;
  int i;
  int j;
  log_debug("Creating file %s/%s\n", cwd, "autoload.php");
  result |= fs_create_file(
      "autoload.php",
      "<?php\n/*\n * Copyright (c) 2018 Siloft\n *\n * Permission is hereby "
      "granted, free of charge, to any person obtaining a copy\n * of this "
      "software and associated documentation files (the \"Software\"), to "
      "deal\n * in the Software without restriction, including without "
      "limitation the rights\n * to use, copy, modify, merge, publish, "
      "distribute, sublicense, and/or sell\n * copies of the Software, and to "
      "permit persons to whom the Software is\n * furnished to do so, subject "
      "to the following conditions:\n *\n * The above copyright notice and "
      "this permission notice shall be included in all\n * copies or "
      "substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED "
      "\"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, "
      "INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * "
      "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL "
      "THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES "
      "OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR "
      "OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE "
      "OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n "
      "*/\n\nspl_autoload_register(\n  function($class)\n  {\n    static "
      "$classes = null;\n    if ($classes === null)\n    {\n      $classes = "
      "array(\n");
  for (i = 0; i < length; i++) {
    found_namespace = 0;
    found_class = 0;
    if ((strlen(files[i]) >= 4 &&
         strcmp(files[i] + strlen(files[i]) - 4, ".php") != 0) &&
        (strlen(files[i]) >= 5 &&
         strcmp(files[i] + strlen(files[i]) - 5, ".php3") != 0) &&
        (strlen(files[i]) >= 5 &&
         strcmp(files[i] + strlen(files[i]) - 5, ".php4") != 0) &&
        (strlen(files[i]) >= 5 &&
         strcmp(files[i] + strlen(files[i]) - 5, ".php5") != 0) &&
        (strlen(files[i]) >= 6 &&
         strcmp(files[i] + strlen(files[i]) - 6, ".phtml") != 0)) {
      continue;
    }
    log_debug("Reading file: %s\n", files[i]);
    if ((size = fs_read_file(files[i], &buffer)) == -1) {
      log_debug("Failed opening %s: %s\n", files[i], strerror(errno));
      return -1;
    }
    for (j = 0; j < size; j++) {
      if (strncmp(&buffer[j], "<?php", 5) == 0) {
        j += 4;
      } else if (strncmp(&buffer[j], "//", 2) == 0) {
        for (; j < size && buffer[j] != '\r' && buffer[j] != '\n'; j++)
          ;
      } else if (strncmp(&buffer[j], "/*", 2) == 0) {
        for (; j < size && strncmp(&buffer[j], "*/", 2) != 0; j++)
          ;
        j++;
      } else if (strncmp(&buffer[j], "declare(", 8) == 0) {
        for (; j < size && strncmp(&buffer[j], ");", 2) != 0; j++)
          ;
        j++;
      } else if (buffer[j] == ' ' || buffer[j] == '\t' || buffer[j] == '\n' ||
                 buffer[j] == '\r' || buffer[j] == '\v' || buffer[j] == '\f') {
      } else if (strncmp(&buffer[j], "namespace", 9) == 0) {
        j += 10;
        start = j;
        for (; j < size && buffer[j] != ' ' && buffer[j] != '\t' &&
               buffer[j] != '\n' && buffer[j] != '\r' && buffer[j] != '\v' &&
               buffer[j] != '\f' && buffer[j] != ';' && buffer[j] != '{';
             j++)
          ;
        namespace = (char *)malloc(j - start + 1);
        memcpy(namespace, &buffer[start], j - start);
        namespace[j - start] = '\0';
        found_namespace = 1;
      } else if (strncmp(&buffer[j], "class", 5) == 0) {
        j += 6;
        start = j;
        for (; j < size && buffer[j] != ' ' && buffer[j] != '\t' &&
               buffer[j] != '\n' && buffer[j] != '\r' && buffer[j] != '\v' &&
               buffer[j] != '\f' && buffer[j] != ';' && buffer[j] != '{';
             j++)
          ;
        class = (char *)malloc(j - start + 1);
        memcpy(class, &buffer[start], j - start);
        class[j - start] = '\0';
        found_class = 1;
      }
    }
    if (found_namespace == 1 && found_class == 1) {
      result |= fs_append_file("autoload.php", "        '%s\\%s' => '/%s',\n",
                               namespace, class, files[i]);
    }
  }
  result |= fs_append_file(
      "autoload.php",
      "      );\n    }\n    if (isset($classes[$class]))\n    {\n      require "
      "__DIR__ . $classes[$class];\n    }\n  },\n  true,\n  false\n);\n");
  if (-1 == result) {
    log_debug("Failed creating autoload file: %s\n", strerror(errno));
  }
  return result;
}


x86 assembly (clang, -O0):
<create_autoload>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
movq   $0x0,-0x40(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x20(%rbp),%rsi
lea    0xe30(%rip),%rdi
lea    0xe3e(%rip),%rdx
mov    $0x0,%al
call   1060 <log_debug@plt>
lea    0xe30(%rip),%rdi
lea    0xe36(%rip),%rsi
call   10a0 <fs_create_file@plt>
or     -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1acc <create_autoload+0x92c>
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <strlen@plt>
cmp    $0x4,%eax
jl     13f3 <create_autoload+0x253>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x60(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <strlen@plt>
mov    -0x60(%rbp),%rdi
cltq
add    %rax,%rdi
add    $0xfffffffffffffffc,%rdi
lea    0xdb6(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%rax
je     13f3 <create_autoload+0x253>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <strlen@plt>
cmp    $0x5,%eax
jl     13f3 <create_autoload+0x253>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x68(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <strlen@plt>
mov    -0x68(%rbp),%rdi
cltq
add    %rax,%rdi
add    $0xfffffffffffffffb,%rdi
lea    0x123f(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%rax
je     13f3 <create_autoload+0x253>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <strlen@plt>
cmp    $0x5,%eax
jl     13f3 <create_autoload+0x253>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x70(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <strlen@plt>
mov    -0x70(%rbp),%rdi
cltq
add    %rax,%rdi
add    $0xfffffffffffffffb,%rdi
lea    0x11e7(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%rax
je     13f3 <create_autoload+0x253>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <strlen@plt>
cmp    $0x5,%eax
jl     13f3 <create_autoload+0x253>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x78(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <strlen@plt>
mov    -0x78(%rbp),%rdi
cltq
add    %rax,%rdi
add    $0xfffffffffffffffb,%rdi
lea    0x118f(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%rax
je     13f3 <create_autoload+0x253>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <strlen@plt>
cmp    $0x6,%eax
jl     13f3 <create_autoload+0x253>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x80(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
call   1050 <strlen@plt>
mov    -0x80(%rbp),%rdi
cltq
add    %rax,%rdi
add    $0xfffffffffffffffa,%rdi
lea    0x1137(%rip),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%rax
je     13f3 <create_autoload+0x253>
jmp    1abe <create_autoload+0x91e>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
lea    0x1117(%rip),%rdi
mov    $0x0,%al
call   1060 <log_debug@plt>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rdi
lea    -0x40(%rbp),%rsi
call   10b0 <fs_read_file@plt>
mov    %eax,-0x44(%rbp)
cmp    $0xffffffff,%eax
jne    1473 <create_autoload+0x2d3>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %rax,-0x88(%rbp)
mov    0x2b98(%rip),%rax
mov    (%rax),%edi
call   10c0 <strerror@plt>
mov    -0x88(%rbp),%rsi
mov    %rax,%rdx
lea    0x10cf(%rip),%rdi
mov    $0x0,%al
call   1060 <log_debug@plt>
movl   $0xffffffff,-0x4(%rbp)
jmp    1b1a <create_autoload+0x97a>
movl   $0x0,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    1a76 <create_autoload+0x8d6>
mov    -0x40(%rbp),%rdi
movslq -0x54(%rbp),%rax
add    %rax,%rdi
lea    0x10ae(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    14ba <create_autoload+0x31a>
mov    -0x54(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x54(%rbp)
jmp    1a63 <create_autoload+0x8c3>
mov    -0x40(%rbp),%rdi
movslq -0x54(%rbp),%rax
add    %rax,%rdi
lea    0x1080(%rip),%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1559 <create_autoload+0x3b9>
jmp    14e5 <create_autoload+0x345>
mov    -0x54(%rbp),%ecx
xor    %eax,%eax
cmp    -0x44(%rbp),%ecx
mov    %al,-0x89(%rbp)
jge    152e <create_autoload+0x38e>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xd,%ecx
mov    %al,-0x89(%rbp)
je     152e <create_autoload+0x38e>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
setne  %al
mov    %al,-0x89(%rbp)
mov    -0x89(%rbp),%al
test   $0x1,%al
jne    1541 <create_autoload+0x3a1>
jmp    1554 <create_autoload+0x3b4>
jmp    1546 <create_autoload+0x3a6>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    14e5 <create_autoload+0x345>
jmp    1a5e <create_autoload+0x8be>
mov    -0x40(%rbp),%rdi
movslq -0x54(%rbp),%rax
add    %rax,%rdi
lea    0xfe4(%rip),%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    15f5 <create_autoload+0x455>
jmp    1584 <create_autoload+0x3e4>
mov    -0x54(%rbp),%ecx
xor    %eax,%eax
cmp    -0x44(%rbp),%ecx
mov    %al,-0x8a(%rbp)
jge    15c1 <create_autoload+0x421>
mov    -0x40(%rbp),%rdi
movslq -0x54(%rbp),%rax
add    %rax,%rdi
lea    0xfa8(%rip),%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x8a(%rbp)
mov    -0x8a(%rbp),%al
test   $0x1,%al
jne    15d4 <create_autoload+0x434>
jmp    15e7 <create_autoload+0x447>
jmp    15d9 <create_autoload+0x439>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1584 <create_autoload+0x3e4>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1a59 <create_autoload+0x8b9>
mov    -0x40(%rbp),%rdi
movslq -0x54(%rbp),%rax
add    %rax,%rdi
lea    0xf4e(%rip),%rsi
mov    $0x8,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1691 <create_autoload+0x4f1>
jmp    1620 <create_autoload+0x480>
mov    -0x54(%rbp),%ecx
xor    %eax,%eax
cmp    -0x44(%rbp),%ecx
mov    %al,-0x8b(%rbp)
jge    165d <create_autoload+0x4bd>
mov    -0x40(%rbp),%rdi
movslq -0x54(%rbp),%rax
add    %rax,%rdi
lea    0xf18(%rip),%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
setne  %al
mov    %al,-0x8b(%rbp)
mov    -0x8b(%rbp),%al
test   $0x1,%al
jne    1670 <create_autoload+0x4d0>
jmp    1683 <create_autoload+0x4e3>
jmp    1675 <create_autoload+0x4d5>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1620 <create_autoload+0x480>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1a54 <create_autoload+0x8b4>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
je     170f <create_autoload+0x56f>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x9,%eax
je     170f <create_autoload+0x56f>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
je     170f <create_autoload+0x56f>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xd,%eax
je     170f <create_autoload+0x56f>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xb,%eax
je     170f <create_autoload+0x56f>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xc,%eax
jne    1714 <create_autoload+0x574>
jmp    1a4f <create_autoload+0x8af>
mov    -0x40(%rbp),%rdi
movslq -0x54(%rbp),%rax
add    %rax,%rdi
lea    0xe3b(%rip),%rsi
mov    $0x9,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    18af <create_autoload+0x70f>
mov    -0x54(%rbp),%eax
add    $0xa,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x54(%rbp),%ecx
xor    %eax,%eax
cmp    -0x44(%rbp),%ecx
mov    %al,-0x8c(%rbp)
jge    1840 <create_autoload+0x6a0>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x20,%ecx
mov    %al,-0x8c(%rbp)
je     1840 <create_autoload+0x6a0>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x9,%ecx
mov    %al,-0x8c(%rbp)
je     1840 <create_autoload+0x6a0>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x8c(%rbp)
je     1840 <create_autoload+0x6a0>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xd,%ecx
mov    %al,-0x8c(%rbp)
je     1840 <create_autoload+0x6a0>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xb,%ecx
mov    %al,-0x8c(%rbp)
je     1840 <create_autoload+0x6a0>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xc,%ecx
mov    %al,-0x8c(%rbp)
je     1840 <create_autoload+0x6a0>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x3b,%ecx
mov    %al,-0x8c(%rbp)
je     1840 <create_autoload+0x6a0>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7b,%eax
setne  %al
mov    %al,-0x8c(%rbp)
mov    -0x8c(%rbp),%al
test   $0x1,%al
jne    1853 <create_autoload+0x6b3>
jmp    1866 <create_autoload+0x6c6>
jmp    1858 <create_autoload+0x6b8>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1749 <create_autoload+0x5a9>
mov    -0x54(%rbp),%edi
sub    -0x48(%rbp),%edi
add    $0x1,%edi
call   1090 <malloc@plt>
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rdi
mov    -0x40(%rbp),%rsi
movslq -0x48(%rbp),%rax
add    %rax,%rsi
mov    -0x54(%rbp),%edx
sub    -0x48(%rbp),%edx
call   1080 <memcpy@plt>
mov    -0x30(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
movl   $0x1,-0x24(%rbp)
jmp    1a4a <create_autoload+0x8aa>
mov    -0x40(%rbp),%rdi
movslq -0x54(%rbp),%rax
add    %rax,%rdi
lea    0xcaa(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1a45 <create_autoload+0x8a5>
mov    -0x54(%rbp),%eax
add    $0x6,%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x54(%rbp),%ecx
xor    %eax,%eax
cmp    -0x44(%rbp),%ecx
mov    %al,-0x8d(%rbp)
jge    19db <create_autoload+0x83b>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x20,%ecx
mov    %al,-0x8d(%rbp)
je     19db <create_autoload+0x83b>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x9,%ecx
mov    %al,-0x8d(%rbp)
je     19db <create_autoload+0x83b>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xa,%ecx
mov    %al,-0x8d(%rbp)
je     19db <create_autoload+0x83b>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xd,%ecx
mov    %al,-0x8d(%rbp)
je     19db <create_autoload+0x83b>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xb,%ecx
mov    %al,-0x8d(%rbp)
je     19db <create_autoload+0x83b>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0xc,%ecx
mov    %al,-0x8d(%rbp)
je     19db <create_autoload+0x83b>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%ecx
xor    %eax,%eax
cmp    $0x3b,%ecx
mov    %al,-0x8d(%rbp)
je     19db <create_autoload+0x83b>
mov    -0x40(%rbp),%rax
movslq -0x54(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7b,%eax
setne  %al
mov    %al,-0x8d(%rbp)
mov    -0x8d(%rbp),%al
test   $0x1,%al
jne    19ee <create_autoload+0x84e>
jmp    1a01 <create_autoload+0x861>
jmp    19f3 <create_autoload+0x853>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    18e4 <create_autoload+0x744>
mov    -0x54(%rbp),%edi
sub    -0x48(%rbp),%edi
add    $0x1,%edi
call   1090 <malloc@plt>
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rdi
mov    -0x40(%rbp),%rsi
movslq -0x48(%rbp),%rax
add    %rax,%rsi
mov    -0x54(%rbp),%edx
sub    -0x48(%rbp),%edx
call   1080 <memcpy@plt>
mov    -0x38(%rbp),%rax
mov    -0x54(%rbp),%ecx
sub    -0x48(%rbp),%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
movl   $0x1,-0x28(%rbp)
jmp    1a4a <create_autoload+0x8aa>
jmp    1a4f <create_autoload+0x8af>
jmp    1a54 <create_autoload+0x8b4>
jmp    1a59 <create_autoload+0x8b9>
jmp    1a5e <create_autoload+0x8be>
jmp    1a63 <create_autoload+0x8c3>
jmp    1a68 <create_autoload+0x8c8>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    147a <create_autoload+0x2da>
cmpl   $0x1,-0x24(%rbp)
jne    1ab9 <create_autoload+0x919>
cmpl   $0x1,-0x28(%rbp)
jne    1ab9 <create_autoload+0x919>
mov    -0x30(%rbp),%rdx
mov    -0x38(%rbp),%rcx
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rsi
mov    (%rax,%rsi,8),%r8
lea    0x570(%rip),%rdi
lea    0xac5(%rip),%rsi
mov    $0x0,%al
call   1040 <fs_append_file@plt>
or     -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    1abe <create_autoload+0x91e>
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    11fe <create_autoload+0x5e>
lea    0x542(%rip),%rdi
lea    0xab2(%rip),%rsi
mov    $0x0,%al
call   1040 <fs_append_file@plt>
or     -0x4c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
mov    $0xffffffff,%eax
cmp    -0x4c(%rbp),%eax
jne    1b14 <create_autoload+0x974>
mov    0x24e4(%rip),%rax
mov    (%rax),%edi
call   10c0 <strerror@plt>
mov    %rax,%rsi
lea    0xafe(%rip),%rdi
mov    $0x0,%al
call   1060 <log_debug@plt>
mov    -0x4c(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<create_autoload>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %esi,%ebx
mov    %rdi,%r15
movq   $0x0,(%rsp)
lea    0xe3e(%rip),%rdi
lea    0xe4c(%rip),%rbp
mov    %rdx,%rsi
mov    %rbp,%rdx
xor    %eax,%eax
call   1060 <log_debug@plt>
lea    0xe45(%rip),%rsi
mov    %rbp,%rdi
call   10a0 <fs_create_file@plt>
test   %ebx,%ebx
mov    %eax,0x1c(%rsp)
jle    16dc <create_autoload+0x53c>
mov    %ebx,%eax
mov    %rax,0x40(%rsp)
lea    0x1353(%rip),%r12
xor    %ebp,%ebp
mov    %r15,0x38(%rsp)
jmp    1224 <create_autoload+0x84>
nopl   0x0(%rax,%rax,1)
mov    0x20(%rsp),%rbp
add    $0x1,%rbp
cmp    0x40(%rsp),%rbp
je     16dc <create_autoload+0x53c>
mov    (%r15,%rbp,8),%rdi
call   1050 <strlen@plt>
cmp    $0x4,%eax
jl     1350 <create_autoload+0x1b0>
mov    (%r15,%rbp,8),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
cltq
lea    (%rbx,%rax,1),%rdi
add    $0xfffffffffffffffc,%rdi
lea    0xdca(%rip),%rsi
call   1070 <strcmp@plt>
test   %rax,%rax
je     1350 <create_autoload+0x1b0>
mov    (%r15,%rbp,8),%rdi
call   1050 <strlen@plt>
cmp    $0x5,%eax
jl     1350 <create_autoload+0x1b0>
mov    (%r15,%rbp,8),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
cltq
lea    (%rbx,%rax,1),%rdi
add    $0xfffffffffffffffb,%rdi
lea    0x1274(%rip),%rsi
call   1070 <strcmp@plt>
test   %rax,%rax
je     1350 <create_autoload+0x1b0>
mov    (%r15,%rbp,8),%rdi
call   1050 <strlen@plt>
cmp    $0x5,%eax
jl     1350 <create_autoload+0x1b0>
mov    (%r15,%rbp,8),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
cltq
lea    (%rbx,%rax,1),%rdi
add    $0xfffffffffffffffb,%rdi
lea    0x123d(%rip),%rsi
call   1070 <strcmp@plt>
test   %rax,%rax
je     1350 <create_autoload+0x1b0>
mov    (%r15,%rbp,8),%rdi
call   1050 <strlen@plt>
cmp    $0x5,%eax
jl     1350 <create_autoload+0x1b0>
mov    (%r15,%rbp,8),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
cltq
lea    (%rbx,%rax,1),%rdi
add    $0xfffffffffffffffb,%rdi
lea    0x120e(%rip),%rsi
call   1070 <strcmp@plt>
test   %rax,%rax
je     1350 <create_autoload+0x1b0>
mov    (%r15,%rbp,8),%rdi
call   1050 <strlen@plt>
cmp    $0x6,%eax
jl     1350 <create_autoload+0x1b0>
mov    (%r15,%rbp,8),%rbx
mov    %rbx,%rdi
call   1050 <strlen@plt>
cltq
lea    (%rbx,%rax,1),%rdi
add    $0xfffffffffffffffa,%rdi
lea    0x11df(%rip),%rsi
call   1070 <strcmp@plt>
test   %rax,%rax
jne    1215 <create_autoload+0x75>
cs nopw 0x0(%rax,%rax,1)
nop
mov    (%r15,%rbp,8),%rsi
lea    0x11c2(%rip),%rdi
xor    %eax,%eax
call   1060 <log_debug@plt>
mov    (%r15,%rbp,8),%rdi
mov    %rsp,%rsi
call   10b0 <fs_read_file@plt>
cmp    $0xffffffff,%eax
je     171b <create_autoload+0x57b>
mov    %rbp,0x20(%rsp)
mov    %eax,%ebp
test   %ebp,%ebp
lea    0x11bf(%rip),%r14
jle    1210 <create_autoload+0x70>
xor    %r15d,%r15d
movl   $0x0,0x8(%rsp)
movl   $0x0,0x10(%rsp)
jmp    13c1 <create_autoload+0x221>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
add    $0x4,%r15d
add    $0x1,%r15d
cmp    %ebp,%r15d
jge    1690 <create_autoload+0x4f0>
movslq %r15d,%r13
mov    (%rsp),%rdi
add    %r13,%rdi
mov    %r14,%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     13b0 <create_autoload+0x210>
mov    (%rsp),%rdi
add    %r13,%rdi
lea    0x1161(%rip),%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     14f0 <create_autoload+0x350>
mov    (%rsp),%rdi
add    %r13,%rdi
lea    0x1143(%rip),%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1524 <create_autoload+0x384>
mov    (%rsp),%rdi
add    %r13,%rdi
lea    0x1128(%rip),%rsi
mov    $0x8,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1554 <create_autoload+0x3b4>
mov    (%rsp),%rdi
mov    (%rdi,%r13,1),%al
lea    -0x9(%rax),%ecx
cmp    $0x5,%cl
jb     13b4 <create_autoload+0x214>
cmp    $0x20,%al
je     13b4 <create_autoload+0x214>
add    %r13,%rdi
lea    0x10fb(%rip),%rsi
mov    $0x9,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     15a2 <create_autoload+0x402>
add    (%rsp),%r13
mov    %r13,%rdi
lea    0x10e4(%rip),%rsi
mov    $0x5,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
jne    13b4 <create_autoload+0x214>
add    $0x6,%r15d
cmp    %ebp,%r15d
jge    162e <create_autoload+0x48e>
mov    (%rsp),%rax
movslq %r15d,%rsi
mov    %rsi,%rbx
mov    %rsi,0x8(%rsp)
movzbl (%rax,%rbx,1),%ecx
cmp    $0x3b,%rcx
ja     14d4 <create_autoload+0x334>
movabs $0x800000100003e00,%rdx
bt     %rcx,%rdx
jb     1639 <create_autoload+0x499>
cmp    $0x7b,%cl
je     1639 <create_autoload+0x499>
add    $0x1,%rbx
cmp    %rbx,%rbp
jne    14b6 <create_autoload+0x316>
mov    %ebp,%ebx
jmp    1639 <create_autoload+0x499>
nopl   (%rax)
cmp    %ebp,%r15d
jge    13b4 <create_autoload+0x214>
mov    (%rsp),%rax
nopl   (%rax)
movzbl (%rax,%r13,1),%ecx
cmp    $0xa,%cl
je     158e <create_autoload+0x3ee>
cmp    $0xd,%cl
je     158e <create_autoload+0x3ee>
add    $0x1,%r13
cmp    %r13,%rbp
jne    1500 <create_autoload+0x360>
mov    %ebp,%r15d
jmp    13b4 <create_autoload+0x214>
cmp    %ebp,%r15d
jge    1585 <create_autoload+0x3e5>
nopl   0x0(%rax)
mov    (%rsp),%rdi
add    %r13,%rdi
mov    %r12,%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1596 <create_autoload+0x3f6>
add    $0x1,%r13
cmp    %r13,%rbp
jne    1530 <create_autoload+0x390>
jmp    1582 <create_autoload+0x3e2>
cmp    %ebp,%r15d
jge    1585 <create_autoload+0x3e5>
lea    0xffe(%rip),%rbx
mov    (%rsp),%rdi
add    %r13,%rdi
mov    %rbx,%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1596 <create_autoload+0x3f6>
add    $0x1,%r13
cmp    %r13,%rbp
jne    1560 <create_autoload+0x3c0>
mov    %ebp,%r15d
add    $0x1,%r15d
jmp    13b4 <create_autoload+0x214>
mov    %r13d,%r15d
jmp    13b4 <create_autoload+0x214>
mov    %r13d,%r15d
add    $0x1,%r15d
jmp    13b4 <create_autoload+0x214>
add    $0xa,%r15d
cmp    %ebp,%r15d
jge    15e6 <create_autoload+0x446>
mov    (%rsp),%rax
movslq %r15d,%rsi
mov    %rsi,%rbx
mov    %rsi,0x10(%rsp)
movzbl (%rax,%rbx,1),%ecx
cmp    $0x3b,%rcx
ja     15d4 <create_autoload+0x434>
movabs $0x800000100003e00,%rdx
bt     %rcx,%rdx
jb     15f1 <create_autoload+0x451>
cmp    $0x7b,%cl
je     15f1 <create_autoload+0x451>
add    $0x1,%rbx
cmp    %rbx,%rbp
jne    15ba <create_autoload+0x41a>
mov    %ebp,%ebx
jmp    15f1 <create_autoload+0x451>
movslq %r15d,%rax
mov    %rax,0x10(%rsp)
mov    %r15d,%ebx
mov    %ebx,%r13d
sub    %r15d,%r13d
lea    0x1(%r13),%edi
call   1090 <malloc@plt>
mov    %rax,%r14
mov    0x10(%rsp),%rsi
add    (%rsp),%rsi
mov    %rax,%rdi
mov    %r13d,%edx
call   1080 <memcpy@plt>
movslq %r13d,%rax
mov    %r14,0x30(%rsp)
movb   $0x0,(%r14,%rax,1)
movl   $0x1,0x10(%rsp)
jmp    1674 <create_autoload+0x4d4>
movslq %r15d,%rax
mov    %rax,0x8(%rsp)
mov    %r15d,%ebx
mov    %ebx,%r13d
sub    %r15d,%r13d
lea    0x1(%r13),%edi
call   1090 <malloc@plt>
mov    %rax,%r14
mov    0x8(%rsp),%rsi
add    (%rsp),%rsi
mov    %rax,%rdi
mov    %r13d,%edx
call   1080 <memcpy@plt>
movslq %r13d,%rax
mov    %r14,0x28(%rsp)
movb   $0x0,(%r14,%rax,1)
movl   $0x1,0x8(%rsp)
mov    %ebx,%r15d
lea    0xec8(%rip),%r14
jmp    13b4 <create_autoload+0x214>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmpl   $0x1,0x10(%rsp)
mov    0x38(%rsp),%r15
jne    1210 <create_autoload+0x70>
cmpl   $0x1,0x8(%rsp)
mov    0x20(%rsp),%rbp
jne    1215 <create_autoload+0x75>
mov    (%r15,%rbp,8),%r8
lea    0x95a(%rip),%rdi
lea    0xeaf(%rip),%rsi
mov    0x30(%rsp),%rdx
mov    0x28(%rsp),%rcx
xor    %eax,%eax
call   1040 <fs_append_file@plt>
or     %eax,0x1c(%rsp)
jmp    1215 <create_autoload+0x75>
lea    0x932(%rip),%rdi
lea    0xea2(%rip),%rsi
xor    %eax,%eax
call   1040 <fs_append_file@plt>
or     0x1c(%rsp),%eax
cmp    $0xffffffff,%eax
jne    1746 <create_autoload+0x5a6>
mov    0x28df(%rip),%rax
mov    (%rax),%edi
call   10c0 <strerror@plt>
lea    0xefc(%rip),%rdi
mov    %rax,%rsi
xor    %eax,%eax
call   1060 <log_debug@plt>
jmp    1741 <create_autoload+0x5a1>
mov    (%r15,%rbp,8),%rbx
mov    0x28ba(%rip),%rax
mov    (%rax),%edi
call   10c0 <strerror@plt>
lea    0xdfb(%rip),%rdi
mov    %rbx,%rsi
mov    %rax,%rdx
xor    %eax,%eax
call   1060 <log_debug@plt>
mov    $0xffffffff,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [21 x i8] c"Creating file %s/%s\0A\00"
@.str.1 = [13 x i8] c"autoload.php\00"
@.str.2 = [1250 x i8] c"<?php\0A/*\0A * Copyright (c) 2018 Siloft\0A *\0A * Permission is hereby granted, free of charge, to any person obtaining a copy\0A * of this software and associated documentation files (the \22Software\22), to deal\0A * in the Software without restriction, including without limitation the rights\0A * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\0A * copies of the Software, and to permit persons to whom the Software is\0A * furnished to do so, subject to the following conditions:\0A *\0A * The above copyright notice and this permission notice shall be included in all\0A * copies or substantial portions of the Software.\0A *\0A * THE SOFTWARE IS PROVIDED \22AS IS\22, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\0A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\0A * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\0A * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\0A * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\0A * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\0A * SOFTWARE.\0A */\0A\0Aspl_autoload_register(\0A function($class)\0A {\0A static $classes = null;\0A if ($classes === null)\0A {\0A $classes = array(\0A\00"
@.str.3 = [5 x i8] c".php\00"
@.str.4 = [6 x i8] c".php3\00"
@.str.5 = [6 x i8] c".php4\00"
@.str.6 = [6 x i8] c".php5\00"
@.str.7 = [7 x i8] c".phtml\00"
@.str.8 = [18 x i8] c"Reading file: %s\0A\00"
@.str.9 = [23 x i8] c"Failed opening %s: %s\0A\00"
@errno = global i32 0
@.str.10 = [6 x i8] c"<?php\00"
@.str.11 = [3 x i8] c"//\00"
@.str.12 = [3 x i8] c"/*\00"
@.str.13 = [3 x i8] c"*/\00"
@.str.14 = [9 x i8] c"declare(\00"
@.str.15 = [3 x i8] c");\00"
@.str.16 = [10 x i8] c"namespace\00"
@.str.17 = [6 x i8] c"class\00"
@.str.18 = [27 x i8] c" '%s\\%s' => '/%s',\0A\00"
@.str.19 = [127 x i8] c" );\0A }\0A if (isset($classes[$class]))\0A {\0A require __DIR__ . $classes[$class];\0A }\0A },\0A true,\0A false\0A);\0A\00"
@.str.20 = [35 x i8] c"Failed creating autoload file: %s\0A\00"
define i32 @create_autoload(i8** %0, i32 %1, i8* %2) {
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i32
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca i8*
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
store i8** %0, i8*** %5
store i32 %1, i32* %6
store i8* %2, i8** %7
store i8* null, i8** %12
store i32 0, i32* %15
%18 = load i8*, i8** %7
%19 = call i32 (i8*, i8*, ...) @log_debug(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8* %18, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
%20 = call i32 @fs_create_file(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([1250 x i8], [1250 x i8]* @.str.2, i64 0, i64 0))
%21 = load i32, i32* %15
%22 = or i32 %21, %20
store i32 %22, i32* %15
store i32 0, i32* %16
br label %23
23: ; preds = %573, %3
%24 = load i32, i32* %16
%25 = load i32, i32* %6
%26 = icmp slt i32 %24, %25
br i1 %26, label %27, label %576
27: ; preds = %23
store i32 0, i32* %8
store i32 0, i32* %9
%28 = load i8**, i8*** %5
%29 = load i32, i32* %16
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds i8*, i8** %28, i64 %30
%32 = load i8*, i8** %31
%33 = call i32 @strlen(i8* %32)
%34 = icmp sge i32 %33, 4
br i1 %34, label %35, label %153
35: ; preds = %27
%36 = load i8**, i8*** %5
%37 = load i32, i32* %16
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i8*, i8** %36, i64 %38
%40 = load i8*, i8** %39
%41 = load i8**, i8*** %5
%42 = load i32, i32* %16
%43 = sext i32 %42 to i64
%44 = getelementptr inbounds i8*, i8** %41, i64 %43
%45 = load i8*, i8** %44
%46 = call i32 @strlen(i8* %45)
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %40, i64 %47
%49 = getelementptr inbounds i8, i8* %48, i64 -4
%50 = call i64 @strcmp(i8* %49, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%51 = icmp ne i64 %50, 0
br i1 %51, label %52, label %153
52: ; preds = %35
%53 = load i8**, i8*** %5
%54 = load i32, i32* %16
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i8*, i8** %53, i64 %55
%57 = load i8*, i8** %56
%58 = call i32 @strlen(i8* %57)
%59 = icmp sge i32 %58, 5
br i1 %59, label %60, label %153
60: ; preds = %52
%61 = load i8**, i8*** %5
%62 = load i32, i32* %16
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds i8*, i8** %61, i64 %63
%65 = load i8*, i8** %64
%66 = load i8**, i8*** %5
%67 = load i32, i32* %16
%68 = sext i32 %67 to i64
%69 = getelementptr inbounds i8*, i8** %66, i64 %68
%70 = load i8*, i8** %69
%71 = call i32 @strlen(i8* %70)
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds i8, i8* %65, i64 %72
%74 = getelementptr inbounds i8, i8* %73, i64 -5
%75 = call i64 @strcmp(i8* %74, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
%76 = icmp ne i64 %75, 0
br i1 %76, label %77, label %153
77: ; preds = %60
%78 = load i8**, i8*** %5
%79 = load i32, i32* %16
%80 = sext i32 %79 to i64
%81 = getelementptr inbounds i8*, i8** %78, i64 %80
%82 = load i8*, i8** %81
%83 = call i32 @strlen(i8* %82)
%84 = icmp sge i32 %83, 5
br i1 %84, label %85, label %153
85: ; preds = %77
%86 = load i8**, i8*** %5
%87 = load i32, i32* %16
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i8*, i8** %86, i64 %88
%90 = load i8*, i8** %89
%91 = load i8**, i8*** %5
%92 = load i32, i32* %16
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i8*, i8** %91, i64 %93
%95 = load i8*, i8** %94
%96 = call i32 @strlen(i8* %95)
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds i8, i8* %90, i64 %97
%99 = getelementptr inbounds i8, i8* %98, i64 -5
%100 = call i64 @strcmp(i8* %99, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%101 = icmp ne i64 %100, 0
br i1 %101, label %102, label %153
102: ; preds = %85
%103 = load i8**, i8*** %5
%104 = load i32, i32* %16
%105 = sext i32 %104 to i64
%106 = getelementptr inbounds i8*, i8** %103, i64 %105
%107 = load i8*, i8** %106
%108 = call i32 @strlen(i8* %107)
%109 = icmp sge i32 %108, 5
br i1 %109, label %110, label %153
110: ; preds = %102
%111 = load i8**, i8*** %5
%112 = load i32, i32* %16
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i8*, i8** %111, i64 %113
%115 = load i8*, i8** %114
%116 = load i8**, i8*** %5
%117 = load i32, i32* %16
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds i8*, i8** %116, i64 %118
%120 = load i8*, i8** %119
%121 = call i32 @strlen(i8* %120)
%122 = sext i32 %121 to i64
%123 = getelementptr inbounds i8, i8* %115, i64 %122
%124 = getelementptr inbounds i8, i8* %123, i64 -5
%125 = call i64 @strcmp(i8* %124, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%126 = icmp ne i64 %125, 0
br i1 %126, label %127, label %153
127: ; preds = %110
%128 = load i8**, i8*** %5
%129 = load i32, i32* %16
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds i8*, i8** %128, i64 %130
%132 = load i8*, i8** %131
%133 = call i32 @strlen(i8* %132)
%134 = icmp sge i32 %133, 6
br i1 %134, label %135, label %153
135: ; preds = %127
%136 = load i8**, i8*** %5
%137 = load i32, i32* %16
%138 = sext i32 %137 to i64
%139 = getelementptr inbounds i8*, i8** %136, i64 %138
%140 = load i8*, i8** %139
%141 = load i8**, i8*** %5
%142 = load i32, i32* %16
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds i8*, i8** %141, i64 %143
%145 = load i8*, i8** %144
%146 = call i32 @strlen(i8* %145)
%147 = sext i32 %146 to i64
%148 = getelementptr inbounds i8, i8* %140, i64 %147
%149 = getelementptr inbounds i8, i8* %148, i64 -6
%150 = call i64 @strcmp(i8* %149, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
%151 = icmp ne i64 %150, 0
br i1 %151, label %152, label %153
152: ; preds = %135
br label %573
153: ; preds = %135, %127, %110, %102, %85, %77, %60, %52, %35, %27
%154 = load i8**, i8*** %5
%155 = load i32, i32* %16
%156 = sext i32 %155 to i64
%157 = getelementptr inbounds i8*, i8** %154, i64 %156
%158 = load i8*, i8** %157
%159 = call i32 (i8*, i8*, ...) @log_debug(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.8, i64 0, i64 0), i8* %158)
%160 = load i8**, i8*** %5
%161 = load i32, i32* %16
%162 = sext i32 %161 to i64
%163 = getelementptr inbounds i8*, i8** %160, i64 %162
%164 = load i8*, i8** %163
%165 = call i32 @fs_read_file(i8* %164, i8** %12)
store i32 %165, i32* %13
%166 = icmp eq i32 %165, -1
br i1 %166, label %167, label %176
167: ; preds = %153
%168 = load i8**, i8*** %5
%169 = load i32, i32* %16
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds i8*, i8** %168, i64 %170
%172 = load i8*, i8** %171
%173 = load i32, i32* @errno
%174 = call i8* @strerror(i32 %173)
%175 = call i32 (i8*, i8*, ...) @log_debug(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.9, i64 0, i64 0), i8* %172, i8* %174)
store i32 -1, i32* %4
br label %588
176: ; preds = %153
store i32 0, i32* %17
br label %177
177: ; preds = %552, %176
%178 = load i32, i32* %17
%179 = load i32, i32* %13
%180 = icmp slt i32 %178, %179
br i1 %180, label %181, label %555
181: ; preds = %177
%182 = load i8*, i8** %12
%183 = load i32, i32* %17
%184 = sext i32 %183 to i64
%185 = getelementptr inbounds i8, i8* %182, i64 %184
%186 = call i64 @strncmp(i8* %185, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0), i32 5)
%187 = icmp eq i64 %186, 0
br i1 %187, label %188, label %191
188: ; preds = %181
%189 = load i32, i32* %17
%190 = add nsw i32 %189, 4
store i32 %190, i32* %17
br label %551
191: ; preds = %181
%192 = load i8*, i8** %12
%193 = load i32, i32* %17
%194 = sext i32 %193 to i64
%195 = getelementptr inbounds i8, i8* %192, i64 %194
%196 = call i64 @strncmp(i8* %195, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0), i32 2)
%197 = icmp eq i64 %196, 0
br i1 %197, label %198, label %226
198: ; preds = %191
br label %199
199: ; preds = %222, %198
%200 = load i32, i32* %17
%201 = load i32, i32* %13
%202 = icmp slt i32 %200, %201
br i1 %202, label %203, label %219
203: ; preds = %199
%204 = load i8*, i8** %12
%205 = load i32, i32* %17
%206 = sext i32 %205 to i64
%207 = getelementptr inbounds i8, i8* %204, i64 %206
%208 = load i8, i8* %207
%209 = sext i8 %208 to i32
%210 = icmp ne i32 %209, 13
br i1 %210, label %211, label %219
211: ; preds = %203
%212 = load i8*, i8** %12
%213 = load i32, i32* %17
%214 = sext i32 %213 to i64
%215 = getelementptr inbounds i8, i8* %212, i64 %214
%216 = load i8, i8* %215
%217 = sext i8 %216 to i32
%218 = icmp ne i32 %217, 10
br label %219
219: ; preds = %211, %203, %199
%220 = phi i1 [ false, %203 ], [ false, %199 ], [ %218, %211 ]
br i1 %220, label %221, label %225
221: ; preds = %219
br label %222
222: ; preds = %221
%223 = load i32, i32* %17
%224 = add nsw i32 %223, 1
store i32 %224, i32* %17
br label %199
225: ; preds = %219
br label %550
226: ; preds = %191
%227 = load i8*, i8** %12
%228 = load i32, i32* %17
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds i8, i8* %227, i64 %229
%231 = call i64 @strncmp(i8* %230, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0), i32 2)
%232 = icmp eq i64 %231, 0
br i1 %232, label %233, label %254
233: ; preds = %226
br label %234
234: ; preds = %248, %233
%235 = load i32, i32* %17
%236 = load i32, i32* %13
%237 = icmp slt i32 %235, %236
br i1 %237, label %238, label %245
238: ; preds = %234
%239 = load i8*, i8** %12
%240 = load i32, i32* %17
%241 = sext i32 %240 to i64
%242 = getelementptr inbounds i8, i8* %239, i64 %241
%243 = call i64 @strncmp(i8* %242, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i64 0, i64 0), i32 2)
%244 = icmp ne i64 %243, 0
br label %245
245: ; preds = %238, %234
%246 = phi i1 [ false, %234 ], [ %244, %238 ]
br i1 %246, label %247, label %251
247: ; preds = %245
br label %248
248: ; preds = %247
%249 = load i32, i32* %17
%250 = add nsw i32 %249, 1
store i32 %250, i32* %17
br label %234
251: ; preds = %245
%252 = load i32, i32* %17
%253 = add nsw i32 %252, 1
store i32 %253, i32* %17
br label %549
254: ; preds = %226
%255 = load i8*, i8** %12
%256 = load i32, i32* %17
%257 = sext i32 %256 to i64
%258 = getelementptr inbounds i8, i8* %255, i64 %257
%259 = call i64 @strncmp(i8* %258, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.14, i64 0, i64 0), i32 8)
%260 = icmp eq i64 %259, 0
br i1 %260, label %261, label %282
261: ; preds = %254
br label %262
262: ; preds = %276, %261
%263 = load i32, i32* %17
%264 = load i32, i32* %13
%265 = icmp slt i32 %263, %264
br i1 %265, label %266, label %273
266: ; preds = %262
%267 = load i8*, i8** %12
%268 = load i32, i32* %17
%269 = sext i32 %268 to i64
%270 = getelementptr inbounds i8, i8* %267, i64 %269
%271 = call i64 @strncmp(i8* %270, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0), i32 2)
%272 = icmp ne i64 %271, 0
br label %273
273: ; preds = %266, %262
%274 = phi i1 [ false, %262 ], [ %272, %266 ]
br i1 %274, label %275, label %279
275: ; preds = %273
br label %276
276: ; preds = %275
%277 = load i32, i32* %17
%278 = add nsw i32 %277, 1
store i32 %278, i32* %17
br label %262
279: ; preds = %273
%280 = load i32, i32* %17
%281 = add nsw i32 %280, 1
store i32 %281, i32* %17
br label %548
282: ; preds = %254
%283 = load i8*, i8** %12
%284 = load i32, i32* %17
%285 = sext i32 %284 to i64
%286 = getelementptr inbounds i8, i8* %283, i64 %285
%287 = load i8, i8* %286
%288 = sext i8 %287 to i32
%289 = icmp eq i32 %288, 32
br i1 %289, label %330, label %290
290: ; preds = %282
%291 = load i8*, i8** %12
%292 = load i32, i32* %17
%293 = sext i32 %292 to i64
%294 = getelementptr inbounds i8, i8* %291, i64 %293
%295 = load i8, i8* %294
%296 = sext i8 %295 to i32
%297 = icmp eq i32 %296, 9
br i1 %297, label %330, label %298
298: ; preds = %290
%299 = load i8*, i8** %12
%300 = load i32, i32* %17
%301 = sext i32 %300 to i64
%302 = getelementptr inbounds i8, i8* %299, i64 %301
%303 = load i8, i8* %302
%304 = sext i8 %303 to i32
%305 = icmp eq i32 %304, 10
br i1 %305, label %330, label %306
306: ; preds = %298
%307 = load i8*, i8** %12
%308 = load i32, i32* %17
%309 = sext i32 %308 to i64
%310 = getelementptr inbounds i8, i8* %307, i64 %309
%311 = load i8, i8* %310
%312 = sext i8 %311 to i32
%313 = icmp eq i32 %312, 13
br i1 %313, label %330, label %314
314: ; preds = %306
%315 = load i8*, i8** %12
%316 = load i32, i32* %17
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds i8, i8* %315, i64 %317
%319 = load i8, i8* %318
%320 = sext i8 %319 to i32
%321 = icmp eq i32 %320, 11
br i1 %321, label %330, label %322
322: ; preds = %314
%323 = load i8*, i8** %12
%324 = load i32, i32* %17
%325 = sext i32 %324 to i64
%326 = getelementptr inbounds i8, i8* %323, i64 %325
%327 = load i8, i8* %326
%328 = sext i8 %327 to i32
%329 = icmp eq i32 %328, 12
br i1 %329, label %330, label %331
330: ; preds = %322, %314, %306, %298, %290, %282
br label %547
331: ; preds = %322
%332 = load i8*, i8** %12
%333 = load i32, i32* %17
%334 = sext i32 %333 to i64
%335 = getelementptr inbounds i8, i8* %332, i64 %334
%336 = call i64 @strncmp(i8* %335, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), i32 9)
%337 = icmp eq i64 %336, 0
br i1 %337, label %338, label %438
338: ; preds = %331
%339 = load i32, i32* %17
%340 = add nsw i32 %339, 10
store i32 %340, i32* %17
%341 = load i32, i32* %17
store i32 %341, i32* %14
br label %342
342: ; preds = %413, %338
%343 = load i32, i32* %17
%344 = load i32, i32* %13
%345 = icmp slt i32 %343, %344
br i1 %345, label %346, label %410
346: ; preds = %342
%347 = load i8*, i8** %12
%348 = load i32, i32* %17
%349 = sext i32 %348 to i64
%350 = getelementptr inbounds i8, i8* %347, i64 %349
%351 = load i8, i8* %350
%352 = sext i8 %351 to i32
%353 = icmp ne i32 %352, 32
br i1 %353, label %354, label %410
354: ; preds = %346
%355 = load i8*, i8** %12
%356 = load i32, i32* %17
%357 = sext i32 %356 to i64
%358 = getelementptr inbounds i8, i8* %355, i64 %357
%359 = load i8, i8* %358
%360 = sext i8 %359 to i32
%361 = icmp ne i32 %360, 9
br i1 %361, label %362, label %410
362: ; preds = %354
%363 = load i8*, i8** %12
%364 = load i32, i32* %17
%365 = sext i32 %364 to i64
%366 = getelementptr inbounds i8, i8* %363, i64 %365
%367 = load i8, i8* %366
%368 = sext i8 %367 to i32
%369 = icmp ne i32 %368, 10
br i1 %369, label %370, label %410
370: ; preds = %362
%371 = load i8*, i8** %12
%372 = load i32, i32* %17
%373 = sext i32 %372 to i64
%374 = getelementptr inbounds i8, i8* %371, i64 %373
%375 = load i8, i8* %374
%376 = sext i8 %375 to i32
%377 = icmp ne i32 %376, 13
br i1 %377, label %378, label %410
378: ; preds = %370
%379 = load i8*, i8** %12
%380 = load i32, i32* %17
%381 = sext i32 %380 to i64
%382 = getelementptr inbounds i8, i8* %379, i64 %381
%383 = load i8, i8* %382
%384 = sext i8 %383 to i32
%385 = icmp ne i32 %384, 11
br i1 %385, label %386, label %410
386: ; preds = %378
%387 = load i8*, i8** %12
%388 = load i32, i32* %17
%389 = sext i32 %388 to i64
%390 = getelementptr inbounds i8, i8* %387, i64 %389
%391 = load i8, i8* %390
%392 = sext i8 %391 to i32
%393 = icmp ne i32 %392, 12
br i1 %393, label %394, label %410
394: ; preds = %386
%395 = load i8*, i8** %12
%396 = load i32, i32* %17
%397 = sext i32 %396 to i64
%398 = getelementptr inbounds i8, i8* %395, i64 %397
%399 = load i8, i8* %398
%400 = sext i8 %399 to i32
%401 = icmp ne i32 %400, 59
br i1 %401, label %402, label %410
402: ; preds = %394
%403 = load i8*, i8** %12
%404 = load i32, i32* %17
%405 = sext i32 %404 to i64
%406 = getelementptr inbounds i8, i8* %403, i64 %405
%407 = load i8, i8* %406
%408 = sext i8 %407 to i32
%409 = icmp ne i32 %408, 123
br label %410
410: ; preds = %402, %394, %386, %378, %370, %362, %354, %346, %342
%411 = phi i1 [ false, %394 ], [ false, %386 ], [ false, %378 ], [ false, %370 ], [ false, %362 ], [ false, %354 ], [ false, %346 ], [ false, %342 ], [ %409, %402 ]
br i1 %411, label %412, label %416
412: ; preds = %410
br label %413
413: ; preds = %412
%414 = load i32, i32* %17
%415 = add nsw i32 %414, 1
store i32 %415, i32* %17
br label %342
416: ; preds = %410
%417 = load i32, i32* %17
%418 = load i32, i32* %14
%419 = sub nsw i32 %417, %418
%420 = add nsw i32 %419, 1
%421 = call i64 @malloc(i32 %420)
%422 = inttoptr i64 %421 to i8*
store i8* %422, i8** %10
%423 = load i8*, i8** %10
%424 = load i8*, i8** %12
%425 = load i32, i32* %14
%426 = sext i32 %425 to i64
%427 = getelementptr inbounds i8, i8* %424, i64 %426
%428 = load i32, i32* %17
%429 = load i32, i32* %14
%430 = sub nsw i32 %428, %429
%431 = call i32 @memcpy(i8* %423, i8* %427, i32 %430)
%432 = load i8*, i8** %10
%433 = load i32, i32* %17
%434 = load i32, i32* %14
%435 = sub nsw i32 %433, %434
%436 = sext i32 %435 to i64
%437 = getelementptr inbounds i8, i8* %432, i64 %436
store i8 0, i8* %437
store i32 1, i32* %8
br label %546
438: ; preds = %331
%439 = load i8*, i8** %12
%440 = load i32, i32* %17
%441 = sext i32 %440 to i64
%442 = getelementptr inbounds i8, i8* %439, i64 %441
%443 = call i64 @strncmp(i8* %442, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.17, i64 0, i64 0), i32 5)
%444 = icmp eq i64 %443, 0
br i1 %444, label %445, label %545
445: ; preds = %438
%446 = load i32, i32* %17
%447 = add nsw i32 %446, 6
store i32 %447, i32* %17
%448 = load i32, i32* %17
store i32 %448, i32* %14
br label %449
449: ; preds = %520, %445
%450 = load i32, i32* %17
%451 = load i32, i32* %13
%452 = icmp slt i32 %450, %451
br i1 %452, label %453, label %517
453: ; preds = %449
%454 = load i8*, i8** %12
%455 = load i32, i32* %17
%456 = sext i32 %455 to i64
%457 = getelementptr inbounds i8, i8* %454, i64 %456
%458 = load i8, i8* %457
%459 = sext i8 %458 to i32
%460 = icmp ne i32 %459, 32
br i1 %460, label %461, label %517
461: ; preds = %453
%462 = load i8*, i8** %12
%463 = load i32, i32* %17
%464 = sext i32 %463 to i64
%465 = getelementptr inbounds i8, i8* %462, i64 %464
%466 = load i8, i8* %465
%467 = sext i8 %466 to i32
%468 = icmp ne i32 %467, 9
br i1 %468, label %469, label %517
469: ; preds = %461
%470 = load i8*, i8** %12
%471 = load i32, i32* %17
%472 = sext i32 %471 to i64
%473 = getelementptr inbounds i8, i8* %470, i64 %472
%474 = load i8, i8* %473
%475 = sext i8 %474 to i32
%476 = icmp ne i32 %475, 10
br i1 %476, label %477, label %517
477: ; preds = %469
%478 = load i8*, i8** %12
%479 = load i32, i32* %17
%480 = sext i32 %479 to i64
%481 = getelementptr inbounds i8, i8* %478, i64 %480
%482 = load i8, i8* %481
%483 = sext i8 %482 to i32
%484 = icmp ne i32 %483, 13
br i1 %484, label %485, label %517
485: ; preds = %477
%486 = load i8*, i8** %12
%487 = load i32, i32* %17
%488 = sext i32 %487 to i64
%489 = getelementptr inbounds i8, i8* %486, i64 %488
%490 = load i8, i8* %489
%491 = sext i8 %490 to i32
%492 = icmp ne i32 %491, 11
br i1 %492, label %493, label %517
493: ; preds = %485
%494 = load i8*, i8** %12
%495 = load i32, i32* %17
%496 = sext i32 %495 to i64
%497 = getelementptr inbounds i8, i8* %494, i64 %496
%498 = load i8, i8* %497
%499 = sext i8 %498 to i32
%500 = icmp ne i32 %499, 12
br i1 %500, label %501, label %517
501: ; preds = %493
%502 = load i8*, i8** %12
%503 = load i32, i32* %17
%504 = sext i32 %503 to i64
%505 = getelementptr inbounds i8, i8* %502, i64 %504
%506 = load i8, i8* %505
%507 = sext i8 %506 to i32
%508 = icmp ne i32 %507, 59
br i1 %508, label %509, label %517
509: ; preds = %501
%510 = load i8*, i8** %12
%511 = load i32, i32* %17
%512 = sext i32 %511 to i64
%513 = getelementptr inbounds i8, i8* %510, i64 %512
%514 = load i8, i8* %513
%515 = sext i8 %514 to i32
%516 = icmp ne i32 %515, 123
br label %517
517: ; preds = %509, %501, %493, %485, %477, %469, %461, %453, %449
%518 = phi i1 [ false, %501 ], [ false, %493 ], [ false, %485 ], [ false, %477 ], [ false, %469 ], [ false, %461 ], [ false, %453 ], [ false, %449 ], [ %516, %509 ]
br i1 %518, label %519, label %523
519: ; preds = %517
br label %520
520: ; preds = %519
%521 = load i32, i32* %17
%522 = add nsw i32 %521, 1
store i32 %522, i32* %17
br label %449
523: ; preds = %517
%524 = load i32, i32* %17
%525 = load i32, i32* %14
%526 = sub nsw i32 %524, %525
%527 = add nsw i32 %526, 1
%528 = call i64 @malloc(i32 %527)
%529 = inttoptr i64 %528 to i8*
store i8* %529, i8** %11
%530 = load i8*, i8** %11
%531 = load i8*, i8** %12
%532 = load i32, i32* %14
%533 = sext i32 %532 to i64
%534 = getelementptr inbounds i8, i8* %531, i64 %533
%535 = load i32, i32* %17
%536 = load i32, i32* %14
%537 = sub nsw i32 %535, %536
%538 = call i32 @memcpy(i8* %530, i8* %534, i32 %537)
%539 = load i8*, i8** %11
%540 = load i32, i32* %17
%541 = load i32, i32* %14
%542 = sub nsw i32 %540, %541
%543 = sext i32 %542 to i64
%544 = getelementptr inbounds i8, i8* %539, i64 %543
store i8 0, i8* %544
store i32 1, i32* %9
br label %545
545: ; preds = %523, %438
br label %546
546: ; preds = %545, %416
br label %547
547: ; preds = %546, %330
br label %548
548: ; preds = %547, %279
br label %549
549: ; preds = %548, %251
br label %550
550: ; preds = %549, %225
br label %551
551: ; preds = %550, %188
br label %552
552: ; preds = %551
%553 = load i32, i32* %17
%554 = add nsw i32 %553, 1
store i32 %554, i32* %17
br label %177
555: ; preds = %177
%556 = load i32, i32* %8
%557 = icmp eq i32 %556, 1
br i1 %557, label %558, label %572
558: ; preds = %555
%559 = load i32, i32* %9
%560 = icmp eq i32 %559, 1
br i1 %560, label %561, label %572
561: ; preds = %558
%562 = load i8*, i8** %10
%563 = load i8*, i8** %11
%564 = load i8**, i8*** %5
%565 = load i32, i32* %16
%566 = sext i32 %565 to i64
%567 = getelementptr inbounds i8*, i8** %564, i64 %566
%568 = load i8*, i8** %567
%569 = call i32 (i8*, i8*, ...) @fs_append_file(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.18, i64 0, i64 0), i8* %562, i8* %563, i8* %568)
%570 = load i32, i32* %15
%571 = or i32 %570, %569
store i32 %571, i32* %15
br label %572
572: ; preds = %561, %558, %555
br label %573
573: ; preds = %572, %152
%574 = load i32, i32* %16
%575 = add nsw i32 %574, 1
store i32 %575, i32* %16
br label %23
576: ; preds = %23
%577 = call i32 (i8*, i8*, ...) @fs_append_file(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([127 x i8], [127 x i8]* @.str.19, i64 0, i64 0))
%578 = load i32, i32* %15
%579 = or i32 %578, %577
store i32 %579, i32* %15
%580 = load i32, i32* %15
%581 = icmp eq i32 -1, %580
br i1 %581, label %582, label %586
582: ; preds = %576
%583 = load i32, i32* @errno
%584 = call i8* @strerror(i32 %583)
%585 = call i32 (i8*, i8*, ...) @log_debug(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.20, i64 0, i64 0), i8* %584)
br label %586
586: ; preds = %582, %576
%587 = load i32, i32* %15
store i32 %587, i32* %4
br label %588
588: ; preds = %586, %167
%589 = load i32, i32* %4
ret i32 %589
}

LLVM IR (-O2):
@.str = [21 x i8] c"Creating file %s/%s\0A\00"
@.str.1 = [13 x i8] c"autoload.php\00"
@.str.2 = [1250 x i8] c"<?php\0A/*\0A * Copyright (c) 2018 Siloft\0A *\0A * Permission is hereby granted, free of charge, to any person obtaining a copy\0A * of this software and associated documentation files (the \22Software\22), to deal\0A * in the Software without restriction, including without limitation the rights\0A * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\0A * copies of the Software, and to permit persons to whom the Software is\0A * furnished to do so, subject to the following conditions:\0A *\0A * The above copyright notice and this permission notice shall be included in all\0A * copies or substantial portions of the Software.\0A *\0A * THE SOFTWARE IS PROVIDED \22AS IS\22, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\0A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\0A * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\0A * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\0A * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\0A * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\0A * SOFTWARE.\0A */\0A\0Aspl_autoload_register(\0A function($class)\0A {\0A static $classes = null;\0A if ($classes === null)\0A {\0A $classes = array(\0A\00"
@.str.3 = [5 x i8] c".php\00"
@.str.4 = [6 x i8] c".php3\00"
@.str.5 = [6 x i8] c".php4\00"
@.str.6 = [6 x i8] c".php5\00"
@.str.7 = [7 x i8] c".phtml\00"
@.str.8 = [18 x i8] c"Reading file: %s\0A\00"
@.str.9 = [23 x i8] c"Failed opening %s: %s\0A\00"
@errno = global i32 0
@.str.10 = [6 x i8] c"<?php\00"
@.str.11 = [3 x i8] c"//\00"
@.str.12 = [3 x i8] c"/*\00"
@.str.13 = [3 x i8] c"*/\00"
@.str.14 = [9 x i8] c"declare(\00"
@.str.15 = [3 x i8] c");\00"
@.str.16 = [10 x i8] c"namespace\00"
@.str.17 = [6 x i8] c"class\00"
@.str.18 = [27 x i8] c" '%s\\%s' => '/%s',\0A\00"
@.str.19 = [127 x i8] c" );\0A }\0A if (isset($classes[$class]))\0A {\0A require __DIR__ . $classes[$class];\0A }\0A },\0A true,\0A false\0A);\0A\00"
@.str.20 = [35 x i8] c"Failed creating autoload file: %s\0A\00"
define i32 @create_autoload(i8** nocapture %0, i32 %1, i8* %2) {
%4 = alloca i8*
%5 = bitcast i8** %4 to i8*
store i8* null, i8** %4
%6 = tail call i32 (i8*, i8*, ...) @log_debug(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str, i64 0, i64 0), i8* %2, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0))
%7 = tail call i32 @fs_create_file(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([1250 x i8], [1250 x i8]* @.str.2, i64 0, i64 0))
%8 = icmp sgt i32 %1, 0
br i1 %8, label %9, label %256
9: ; preds = %3
%10 = zext i32 %1 to i64
br label %11
11: ; preds = %9, %250
%12 = phi i64 [ 0, %9 ], [ %254, %250 ]
%13 = phi i32 [ %7, %9 ], [ %253, %250 ]
%14 = phi i8* [ undef, %9 ], [ %252, %250 ]
%15 = phi i8* [ undef, %9 ], [ %251, %250 ]
%16 = getelementptr inbounds i8*, i8** %0, i64 %12
%17 = load i8*, i8** %16
%18 = call i32 @strlen(i8* %17)
%19 = icmp sgt i32 %18, 3
br i1 %19, label %20, label %76
20: ; preds = %11
%21 = load i8*, i8** %16
%22 = call i32 @strlen(i8* %21)
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds i8, i8* %21, i64 -4
%25 = getelementptr inbounds i8, i8* %24, i64 %23
%26 = call i64 @strcmp(i8* %25, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0))
%27 = icmp eq i64 %26, 0
br i1 %27, label %76, label %28
28: ; preds = %20
%29 = load i8*, i8** %16
%30 = call i32 @strlen(i8* %29)
%31 = icmp sgt i32 %30, 4
br i1 %31, label %32, label %76
32: ; preds = %28
%33 = load i8*, i8** %16
%34 = call i32 @strlen(i8* %33)
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds i8, i8* %33, i64 -5
%37 = getelementptr inbounds i8, i8* %36, i64 %35
%38 = call i64 @strcmp(i8* %37, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.4, i64 0, i64 0))
%39 = icmp eq i64 %38, 0
br i1 %39, label %76, label %40
40: ; preds = %32
%41 = load i8*, i8** %16
%42 = call i32 @strlen(i8* %41)
%43 = icmp sgt i32 %42, 4
br i1 %43, label %44, label %76
44: ; preds = %40
%45 = load i8*, i8** %16
%46 = call i32 @strlen(i8* %45)
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %45, i64 -5
%49 = getelementptr inbounds i8, i8* %48, i64 %47
%50 = call i64 @strcmp(i8* %49, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0))
%51 = icmp eq i64 %50, 0
br i1 %51, label %76, label %52
52: ; preds = %44
%53 = load i8*, i8** %16
%54 = call i32 @strlen(i8* %53)
%55 = icmp sgt i32 %54, 4
br i1 %55, label %56, label %76
56: ; preds = %52
%57 = load i8*, i8** %16
%58 = call i32 @strlen(i8* %57)
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds i8, i8* %57, i64 -5
%61 = getelementptr inbounds i8, i8* %60, i64 %59
%62 = call i64 @strcmp(i8* %61, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.6, i64 0, i64 0))
%63 = icmp eq i64 %62, 0
br i1 %63, label %76, label %64
64: ; preds = %56
%65 = load i8*, i8** %16
%66 = call i32 @strlen(i8* %65)
%67 = icmp sgt i32 %66, 5
br i1 %67, label %68, label %76
68: ; preds = %64
%69 = load i8*, i8** %16
%70 = call i32 @strlen(i8* %69)
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds i8, i8* %69, i64 -6
%73 = getelementptr inbounds i8, i8* %72, i64 %71
%74 = call i64 @strcmp(i8* %73, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.7, i64 0, i64 0))
%75 = icmp eq i64 %74, 0
br i1 %75, label %76, label %250
76: ; preds = %68, %64, %56, %52, %44, %40, %32, %28, %20, %11
%77 = load i8*, i8** %16
%78 = call i32 (i8*, i8*, ...) @log_debug(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.8, i64 0, i64 0), i8* %77)
%79 = load i8*, i8** %16
%80 = call i32 @fs_read_file(i8* %79, i8** %4)
%81 = icmp eq i32 %80, -1
br i1 %81, label %86, label %82
82: ; preds = %76
%83 = icmp sgt i32 %80, 0
br i1 %83, label %84, label %250
84: ; preds = %82
%85 = zext i32 %80 to i64
br label %91
86: ; preds = %76
%87 = load i8*, i8** %16
%88 = load i32, i32* @errno
%89 = call i8* @strerror(i32 %88)
%90 = call i32 (i8*, i8*, ...) @log_debug(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.9, i64 0, i64 0), i8* %87, i8* %89)
br label %265
91: ; preds = %84, %234
%92 = phi i32 [ %240, %234 ], [ 0, %84 ]
%93 = phi i8* [ %238, %234 ], [ %14, %84 ]
%94 = phi i8* [ %237, %234 ], [ %15, %84 ]
%95 = phi i32 [ %236, %234 ], [ 0, %84 ]
%96 = phi i32 [ %235, %234 ], [ 0, %84 ]
%97 = load i8*, i8** %4
%98 = sext i32 %92 to i64
%99 = getelementptr inbounds i8, i8* %97, i64 %98
%100 = call i64 @strncmp(i8* %99, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.10, i64 0, i64 0), i32 5)
%101 = icmp eq i64 %100, 0
br i1 %101, label %102, label %104
102: ; preds = %91
%103 = add nsw i32 %92, 4
br label %234
104: ; preds = %91
%105 = load i8*, i8** %4
%106 = getelementptr inbounds i8, i8* %105, i64 %98
%107 = call i64 @strncmp(i8* %106, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0), i32 2)
%108 = icmp eq i64 %107, 0
br i1 %108, label %109, label %120
109: ; preds = %104
%110 = icmp slt i32 %92, %80
br i1 %110, label %111, label %234
111: ; preds = %109
%112 = load i8*, i8** %4
br label %113
113: ; preds = %111, %117
%114 = phi i64 [ %98, %111 ], [ %118, %117 ]
%115 = getelementptr inbounds i8, i8* %112, i64 %114
%116 = load i8, i8* %115
switch i8 %116, label %117 [
i8 13, label %232
i8 10, label %232
]
117: ; preds = %113
%118 = add nsw i64 %114, 1
%119 = icmp eq i64 %118, %85
br i1 %119, label %234, label %113
120: ; preds = %104
%121 = load i8*, i8** %4
%122 = getelementptr inbounds i8, i8* %121, i64 %98
%123 = call i64 @strncmp(i8* %122, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.12, i64 0, i64 0), i32 2)
%124 = icmp eq i64 %123, 0
br i1 %124, label %125, label %141
125: ; preds = %120
%126 = icmp slt i32 %92, %80
br i1 %126, label %127, label %138
127: ; preds = %125, %133
%128 = phi i64 [ %134, %133 ], [ %98, %125 ]
%129 = load i8*, i8** %4
%130 = getelementptr inbounds i8, i8* %129, i64 %128
%131 = call i64 @strncmp(i8* %130, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.13, i64 0, i64 0), i32 2)
%132 = icmp eq i64 %131, 0
br i1 %132, label %136, label %133
133: ; preds = %127
%134 = add nsw i64 %128, 1
%135 = icmp eq i64 %134, %85
br i1 %135, label %138, label %127
136: ; preds = %127
%137 = trunc i64 %128 to i32
br label %138
138: ; preds = %133, %136, %125
%139 = phi i32 [ %92, %125 ], [ %137, %136 ], [ %80, %133 ]
%140 = add nsw i32 %139, 1
br label %234
141: ; preds = %120
%142 = load i8*, i8** %4
%143 = getelementptr inbounds i8, i8* %142, i64 %98
%144 = call i64 @strncmp(i8* %143, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.14, i64 0, i64 0), i32 8)
%145 = icmp eq i64 %144, 0
br i1 %145, label %146, label %162
146: ; preds = %141
%147 = icmp slt i32 %92, %80
br i1 %147, label %148, label %159
148: ; preds = %146, %154
%149 = phi i64 [ %155, %154 ], [ %98, %146 ]
%150 = load i8*, i8** %4
%151 = getelementptr inbounds i8, i8* %150, i64 %149
%152 = call i64 @strncmp(i8* %151, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.15, i64 0, i64 0), i32 2)
%153 = icmp eq i64 %152, 0
br i1 %153, label %157, label %154
154: ; preds = %148
%155 = add nsw i64 %149, 1
%156 = icmp eq i64 %155, %85
br i1 %156, label %159, label %148
157: ; preds = %148
%158 = trunc i64 %149 to i32
br label %159
159: ; preds = %154, %157, %146
%160 = phi i32 [ %92, %146 ], [ %158, %157 ], [ %80, %154 ]
%161 = add nsw i32 %160, 1
br label %234
162: ; preds = %141
%163 = load i8*, i8** %4
%164 = getelementptr inbounds i8, i8* %163, i64 %98
%165 = load i8, i8* %164
switch i8 %165, label %166 [
i8 32, label %234
i8 9, label %234
i8 10, label %234
i8 13, label %234
i8 11, label %234
i8 12, label %234
]
166: ; preds = %162
%167 = call i64 @strncmp(i8* %164, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.16, i64 0, i64 0), i32 9)
%168 = icmp eq i64 %167, 0
br i1 %168, label %169, label %198
169: ; preds = %166
%170 = add i32 %92, 10
%171 = icmp slt i32 %170, %80
br i1 %171, label %174, label %172
172: ; preds = %169
%173 = sext i32 %170 to i64
br label %186
174: ; preds = %169
%175 = load i8*, i8** %4
%176 = sext i32 %170 to i64
br label %177
177: ; preds = %174, %181
%178 = phi i64 [ %176, %174 ], [ %182, %181 ]
%179 = getelementptr inbounds i8, i8* %175, i64 %178
%180 = load i8, i8* %179
switch i8 %180, label %181 [
i8 32, label %184
i8 9, label %184
i8 10, label %184
i8 13, label %184
i8 11, label %184
i8 12, label %184
i8 59, label %184
i8 123, label %184
]
181: ; preds = %177
%182 = add nsw i64 %178, 1
%183 = icmp eq i64 %182, %85
br i1 %183, label %186, label %177
184: ; preds = %177, %177, %177, %177, %177, %177, %177, %177
%185 = trunc i64 %178 to i32
br label %186
186: ; preds = %181, %184, %172
%187 = phi i64 [ %173, %172 ], [ %176, %184 ], [ %176, %181 ]
%188 = phi i32 [ %170, %172 ], [ %185, %184 ], [ %80, %181 ]
%189 = sub nsw i32 %188, %170
%190 = add nsw i32 %189, 1
%191 = call i64 @malloc(i32 %190)
%192 = inttoptr i64 %191 to i8*
%193 = load i8*, i8** %4
%194 = getelementptr inbounds i8, i8* %193, i64 %187
%195 = call i32 @memcpy(i8* %192, i8* %194, i32 %189)
%196 = sext i32 %189 to i64
%197 = getelementptr inbounds i8, i8* %192, i64 %196
store i8 0, i8* %197
br label %234
198: ; preds = %166
%199 = load i8*, i8** %4
%200 = getelementptr inbounds i8, i8* %199, i64 %98
%201 = call i64 @strncmp(i8* %200, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.17, i64 0, i64 0), i32 5)
%202 = icmp eq i64 %201, 0
br i1 %202, label %203, label %234
203: ; preds = %198
%204 = add i32 %92, 6
%205 = icmp slt i32 %204, %80
br i1 %205, label %208, label %206
206: ; preds = %203
%207 = sext i32 %204 to i64
br label %220
208: ; preds = %203
%209 = load i8*, i8** %4
%210 = sext i32 %204 to i64
br label %211
211: ; preds = %208, %215
%212 = phi i64 [ %210, %208 ], [ %216, %215 ]
%213 = getelementptr inbounds i8, i8* %209, i64 %212
%214 = load i8, i8* %213
switch i8 %214, label %215 [
i8 32, label %218
i8 9, label %218
i8 10, label %218
i8 13, label %218
i8 11, label %218
i8 12, label %218
i8 59, label %218
i8 123, label %218
]
215: ; preds = %211
%216 = add nsw i64 %212, 1
%217 = icmp eq i64 %216, %85
br i1 %217, label %220, label %211
218: ; preds = %211, %211, %211, %211, %211, %211, %211, %211
%219 = trunc i64 %212 to i32
br label %220
220: ; preds = %215, %218, %206
%221 = phi i64 [ %207, %206 ], [ %210, %218 ], [ %210, %215 ]
%222 = phi i32 [ %204, %206 ], [ %219, %218 ], [ %80, %215 ]
%223 = sub nsw i32 %222, %204
%224 = add nsw i32 %223, 1
%225 = call i64 @malloc(i32 %224)
%226 = inttoptr i64 %225 to i8*
%227 = load i8*, i8** %4
%228 = getelementptr inbounds i8, i8* %227, i64 %221
%229 = call i32 @memcpy(i8* %226, i8* %228, i32 %223)
%230 = sext i32 %223 to i64
%231 = getelementptr inbounds i8, i8* %226, i64 %230
store i8 0, i8* %231
br label %234
232: ; preds = %113, %113
%233 = trunc i64 %114 to i32
br label %234
234: ; preds = %117, %232, %109, %162, %162, %162, %162, %162, %162, %102, %138, %198, %220, %186, %159
%235 = phi i32 [ %96, %102 ], [ %96, %138 ], [ %96, %159 ], [ %96, %162 ], [ 1, %186 ], [ %96, %220 ], [ %96, %198 ], [ %96, %162 ], [ %96, %162 ], [ %96, %162 ], [ %96, %162 ], [ %96, %162 ], [ %96, %109 ], [ %96, %232 ], [ %96, %117 ]
%236 = phi i32 [ %95, %102 ], [ %95, %138 ], [ %95, %159 ], [ %95, %162 ], [ %95, %186 ], [ 1, %220 ], [ %95, %198 ], [ %95, %162 ], [ %95, %162 ], [ %95, %162 ], [ %95, %162 ], [ %95, %162 ], [ %95, %109 ], [ %95, %232 ], [ %95, %117 ]
%237 = phi i8* [ %94, %102 ], [ %94, %138 ], [ %94, %159 ], [ %94, %162 ], [ %192, %186 ], [ %94, %220 ], [ %94, %198 ], [ %94, %162 ], [ %94, %162 ], [ %94, %162 ], [ %94, %162 ], [ %94, %162 ], [ %94, %109 ], [ %94, %232 ], [ %94, %117 ]
%238 = phi i8* [ %93, %102 ], [ %93, %138 ], [ %93, %159 ], [ %93, %162 ], [ %93, %186 ], [ %226, %220 ], [ %93, %198 ], [ %93, %162 ], [ %93, %162 ], [ %93, %162 ], [ %93, %162 ], [ %93, %162 ], [ %93, %109 ], [ %93, %232 ], [ %93, %117 ]
%239 = phi i32 [ %103, %102 ], [ %140, %138 ], [ %161, %159 ], [ %92, %162 ], [ %188, %186 ], [ %222, %220 ], [ %92, %198 ], [ %92, %162 ], [ %92, %162 ], [ %92, %162 ], [ %92, %162 ], [ %92, %162 ], [ %92, %109 ], [ %233, %232 ], [ %80, %117 ]
%240 = add nsw i32 %239, 1
%241 = icmp slt i32 %240, %80
br i1 %241, label %91, label %242
242: ; preds = %234
%243 = icmp eq i32 %235, 1
%244 = icmp eq i32 %236, 1
%245 = select i1 %243, i1 %244, i1 false
br i1 %245, label %246, label %250
246: ; preds = %242
%247 = load i8*, i8** %16
%248 = call i32 (i8*, i8*, ...) @fs_append_file(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.18, i64 0, i64 0), i8* %237, i8* %238, i8* %247)
%249 = or i32 %248, %13
br label %250
250: ; preds = %82, %242, %246, %68
%251 = phi i8* [ %15, %68 ], [ %237, %246 ], [ %237, %242 ], [ %15, %82 ]
%252 = phi i8* [ %14, %68 ], [ %238, %246 ], [ %238, %242 ], [ %14, %82 ]
%253 = phi i32 [ %13, %68 ], [ %249, %246 ], [ %13, %242 ], [ %13, %82 ]
%254 = add nuw nsw i64 %12, 1
%255 = icmp eq i64 %254, %10
br i1 %255, label %256, label %11
256: ; preds = %250, %3
%257 = phi i32 [ %7, %3 ], [ %253, %250 ]
%258 = call i32 (i8*, i8*, ...) @fs_append_file(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([127 x i8], [127 x i8]* @.str.19, i64 0, i64 0))
%259 = or i32 %258, %257
%260 = icmp eq i32 %259, -1
br i1 %260, label %261, label %265
261: ; preds = %256
%262 = load i32, i32* @errno
%263 = call i8* @strerror(i32 %262)
%264 = call i32 (i8*, i8*, ...) @log_debug(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.20, i64 0, i64 0), i8* %263)
br label %265
265: ; preds = %256, %261, %86
%266 = phi i32 [ -1, %86 ], [ -1, %261 ], [ %259, %256 ]
ret i32 %266
}