#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 */
scalar_t__ calloc(size_t, size_t);
int /*<<< orphan*/ free(char *);
char *getenv(char *);
char *mus_getcwd();
scalar_t__ sndlib_strlen(char *);
int /*<<< orphan*/ strcat(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
char *strdup(char const *);
int strlen(char const *);
char *mus_expand_filename(const char *filename) {
  char *file_name_buf = NULL;
  char *tok = NULL, *orig = NULL;
  int i, j = 0, len = 0;
  if ((filename) && (*filename))
    len = strlen(filename);
  else
    return (NULL);
  if (len == 0)
    return (NULL);
  orig = strdup(filename);
  tok = orig;
  for (i = 0; i < len - 1; i++) {
    if ((tok[i] == '/') && (tok[i + 1] == '/'))
      j = i + 1;
  }
  if (j > 0) {
    for (i = 0; j < len; i++, j++)
      tok[i] = tok[j];
    tok[i] = '\0';
  }
  if (tok[0] != '/') {
    char *home = NULL;
    if ((tok[0] == '~') && (home = getenv("HOME"))) {
      file_name_buf = (char *)calloc((size_t)(len + sndlib_strlen(home) + 8),
                                     (size_t)(sizeof(char)));
      strcpy(file_name_buf, home);
      strcat(file_name_buf, ++tok);
    } else {
      char *pwd;
      pwd = mus_getcwd();
      file_name_buf = (char *)calloc((size_t)(len + sndlib_strlen(pwd) + 8),
                                     (size_t)(sizeof(char)));
      strcpy(file_name_buf, pwd);
      free(pwd);
      strcat(file_name_buf, "/");
      if (tok[0])
        strcat(file_name_buf, tok);
    }
  } else {
    file_name_buf = (char *)calloc((size_t)(len + 8), (size_t)(sizeof(char)));
    strcpy(file_name_buf, tok);
  }
  {
    int slash_at = -1;
    int found_one = 1;
    while (found_one) {
      found_one = 0;
      len = strlen(file_name_buf);
      for (i = 0; i < len - 3; i++)
        if (file_name_buf[i] == '/') {
          if ((file_name_buf[i + 1] == '.') && (file_name_buf[i + 2] == '.') &&
              (file_name_buf[i + 3] == '/')) {
            i += 4;
            for (j = slash_at + 1; i < len; i++, j++)
              file_name_buf[j] = file_name_buf[i];
            file_name_buf[j] = '\0';
            found_one = 1;
            break;
          } else {
            if ((file_name_buf[i + 1] == '.') &&
                (file_name_buf[i + 2] == '/')) {
              for (j = i + 3, i = i + 1; j < len; i++, j++)
                file_name_buf[i] = file_name_buf[j];
              file_name_buf[i] = '\0';
              found_one = 1;
            } else
              slash_at = i;
          }
        }
    }
    len = strlen(file_name_buf);
    if ((len > 1) && (file_name_buf[len - 1] == '.') &&
        (file_name_buf[len - 2] == '/'))
      file_name_buf[len - 1] = '\0';
  }
  free(orig);
  return (file_name_buf);
}


x86 assembly (clang, -O0):
<mus_expand_filename>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
movq   $0x0,-0x18(%rbp)
movq   $0x0,-0x20(%rbp)
movq   $0x0,-0x28(%rbp)
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     11ee <mus_expand_filename+0x5e>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
je     11ee <mus_expand_filename+0x5e>
mov    -0x10(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,-0x34(%rbp)
jmp    11fb <mus_expand_filename+0x6b>
movq   $0x0,-0x8(%rbp)
jmp    164a <mus_expand_filename+0x4ba>
cmpl   $0x0,-0x34(%rbp)
jne    1212 <mus_expand_filename+0x82>
movq   $0x0,-0x8(%rbp)
jmp    164a <mus_expand_filename+0x4ba>
mov    -0x10(%rbp),%rdi
call   10b0 <strdup@plt>
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x20(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    128a <mus_expand_filename+0xfa>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    1277 <mus_expand_filename+0xe7>
mov    -0x20(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    1277 <mus_expand_filename+0xe7>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    127c <mus_expand_filename+0xec>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    122e <mus_expand_filename+0x9e>
cmpl   $0x0,-0x30(%rbp)
jle    12e0 <mus_expand_filename+0x150>
movl   $0x0,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    12d4 <mus_expand_filename+0x144>
mov    -0x20(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    129b <mus_expand_filename+0x10b>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2f,%eax
je     13f2 <mus_expand_filename+0x262>
movq   $0x0,-0x40(%rbp)
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7e,%eax
jne    1373 <mus_expand_filename+0x1e3>
lea    0xcf1(%rip),%rdi
call   1030 <getenv@plt>
mov    %rax,-0x40(%rbp)
cmp    $0x0,%rax
je     1373 <mus_expand_filename+0x1e3>
movslq -0x34(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x40(%rbp),%rdi
call   1080 <sndlib_strlen@plt>
mov    -0x58(%rbp),%rdi
add    %rax,%rdi
add    $0x8,%rdi
mov    $0x1,%esi
call   1070 <calloc@plt>
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x40(%rbp),%rsi
call   1050 <strcpy@plt>
mov    -0x18(%rbp),%rdi
mov    -0x20(%rbp),%rsi
add    $0x1,%rsi
mov    %rsi,-0x20(%rbp)
call   10a0 <strcat@plt>
jmp    13ed <mus_expand_filename+0x25d>
mov    $0x0,%al
call   1090 <mus_getcwd@plt>
mov    %rax,-0x48(%rbp)
movslq -0x34(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x48(%rbp),%rdi
call   1080 <sndlib_strlen@plt>
mov    -0x60(%rbp),%rdi
add    %rax,%rdi
add    $0x8,%rdi
mov    $0x1,%esi
call   1070 <calloc@plt>
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x48(%rbp),%rsi
call   1050 <strcpy@plt>
mov    -0x48(%rbp),%rdi
call   1040 <free@plt>
mov    -0x18(%rbp),%rdi
lea    0xc3c(%rip),%rsi
call   10a0 <strcat@plt>
mov    -0x20(%rbp),%rax
cmpb   $0x0,(%rax)
je     13e8 <mus_expand_filename+0x258>
mov    -0x18(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   10a0 <strcat@plt>
jmp    13ed <mus_expand_filename+0x25d>
jmp    1416 <mus_expand_filename+0x286>
mov    -0x34(%rbp),%eax
add    $0x8,%eax
movslq %eax,%rdi
mov    $0x1,%esi
call   1070 <calloc@plt>
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1050 <strcpy@plt>
movl   $0xffffffff,-0x4c(%rbp)
movl   $0x1,-0x50(%rbp)
cmpl   $0x0,-0x50(%rbp)
je     15de <mus_expand_filename+0x44e>
movl   $0x0,-0x50(%rbp)
mov    -0x18(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,-0x34(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x34(%rbp),%ecx
sub    $0x3,%ecx
cmp    %ecx,%eax
jge    15d9 <mus_expand_filename+0x449>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    15c6 <mus_expand_filename+0x436>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    151f <mus_expand_filename+0x38f>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    151f <mus_expand_filename+0x38f>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    151f <mus_expand_filename+0x38f>
mov    -0x2c(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1507 <mus_expand_filename+0x377>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    14ce <mus_expand_filename+0x33e>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
movl   $0x1,-0x50(%rbp)
jmp    15d9 <mus_expand_filename+0x449>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    15b6 <mus_expand_filename+0x426>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    15b6 <mus_expand_filename+0x426>
mov    -0x2c(%rbp),%eax
add    $0x3,%eax
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    159e <mus_expand_filename+0x40e>
mov    -0x18(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1565 <mus_expand_filename+0x3d5>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
movl   $0x1,-0x50(%rbp)
jmp    15bc <mus_expand_filename+0x42c>
mov    -0x2c(%rbp),%eax
mov    %eax,-0x4c(%rbp)
jmp    15c1 <mus_expand_filename+0x431>
jmp    15c6 <mus_expand_filename+0x436>
jmp    15cb <mus_expand_filename+0x43b>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1448 <mus_expand_filename+0x2b8>
jmp    1424 <mus_expand_filename+0x294>
mov    -0x18(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,-0x34(%rbp)
cmpl   $0x1,-0x34(%rbp)
jle    1639 <mus_expand_filename+0x4a9>
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    1639 <mus_expand_filename+0x4a9>
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    1639 <mus_expand_filename+0x4a9>
mov    -0x18(%rbp),%rax
mov    -0x34(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x28(%rbp),%rdi
call   1040 <free@plt>
mov    -0x18(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<mus_expand_filename>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
test   %rdi,%rdi
je     12cd <mus_expand_filename+0x13d>
mov    %rdi,%rbx
cmpb   $0x0,(%rdi)
je     12cd <mus_expand_filename+0x13d>
mov    %rbx,%rdi
call   1060 <strlen@plt>
test   %eax,%eax
je     12cd <mus_expand_filename+0x13d>
mov    %eax,%r12d
mov    %rbx,%rdi
call   10b0 <strdup@plt>
cmp    $0x2,%r12d
jl     131d <mus_expand_filename+0x18d>
lea    -0x1(%r12),%ebx
cmp    $0x1,%ebx
jne    12d5 <mus_expand_filename+0x145>
xor    %esi,%esi
xor    %ecx,%ecx
test   $0x1,%bl
je     1200 <mus_expand_filename+0x70>
cmpb   $0x2f,(%rax,%rsi,1)
jne    1200 <mus_expand_filename+0x70>
add    $0x1,%rsi
cmpb   $0x2f,(%rax,%rsi,1)
cmove  %esi,%ecx
test   %ecx,%ecx
jle    131d <mus_expand_filename+0x18d>
mov    %r12d,%r8d
sub    %ecx,%r8d
jle    1315 <mus_expand_filename+0x185>
mov    %ecx,%edx
cmp    $0x8,%r8d
jb     123d <mus_expand_filename+0xad>
lea    (%rdx,%r8,1),%rcx
add    %rax,%rcx
cmp    %rcx,%rax
jae    1852 <mus_expand_filename+0x6c2>
lea    (%rax,%r8,1),%rcx
lea    (%rax,%rdx,1),%rsi
cmp    %rcx,%rsi
jae    1852 <mus_expand_filename+0x6c2>
xor    %ecx,%ecx
mov    %rdx,%rsi
mov    %rcx,%r9
not    %r9
add    %r8,%r9
mov    %r8,%rdi
and    $0x3,%rdi
je     127a <mus_expand_filename+0xea>
neg    %rdi
xor    %ebp,%ebp
mov    %rax,%rbx
nopl   0x0(%rax)
movzbl (%rbx,%rsi,1),%edx
mov    %dl,(%rbx,%rcx,1)
add    $0xffffffffffffffff,%rbp
add    $0x1,%rbx
cmp    %rbp,%rdi
jne    1260 <mus_expand_filename+0xd0>
sub    %rbp,%rcx
sub    %rbp,%rsi
cmp    $0x3,%r9
jb     1318 <mus_expand_filename+0x188>
mov    %r8,%rdx
sub    %rcx,%rdx
add    %rax,%rcx
add    $0x3,%rcx
add    %rax,%rsi
add    $0x3,%rsi
xor    %edi,%edi
nopw   0x0(%rax,%rax,1)
movzbl -0x3(%rsi,%rdi,1),%ebx
mov    %bl,-0x3(%rcx,%rdi,1)
movzbl -0x2(%rsi,%rdi,1),%ebx
mov    %bl,-0x2(%rcx,%rdi,1)
movzbl -0x1(%rsi,%rdi,1),%ebx
mov    %bl,-0x1(%rcx,%rdi,1)
movzbl (%rsi,%rdi,1),%ebx
mov    %bl,(%rcx,%rdi,1)
add    $0x4,%rdi
cmp    %rdi,%rdx
jne    12a0 <mus_expand_filename+0x110>
jmp    1318 <mus_expand_filename+0x188>
xor    %r13d,%r13d
jmp    1840 <mus_expand_filename+0x6b0>
mov    %ebx,%edx
and    $0xfffffffe,%edx
xor    %edi,%edi
xor    %ecx,%ecx
jmp    12ec <mus_expand_filename+0x15c>
mov    %rsi,%rdi
cmp    %rsi,%rdx
je     11ea <mus_expand_filename+0x5a>
cmpb   $0x2f,(%rax,%rdi,1)
jne    12fd <mus_expand_filename+0x16d>
lea    0x1(%rdi),%esi
cmpb   $0x2f,0x1(%rax,%rdi,1)
cmove  %esi,%ecx
lea    0x2(%rdi),%rsi
cmpb   $0x2f,0x1(%rax,%rdi,1)
jne    12e0 <mus_expand_filename+0x150>
lea    0x2(%rdi),%ebp
cmpb   $0x2f,0x2(%rax,%rdi,1)
cmove  %ebp,%ecx
jmp    12e0 <mus_expand_filename+0x150>
xor    %r8d,%r8d
movb   $0x0,(%rax,%r8,1)
mov    (%rax),%cl
cmp    $0x2f,%cl
mov    %rax,(%rsp)
je     13d9 <mus_expand_filename+0x249>
cmp    $0x7e,%cl
jne    137a <mus_expand_filename+0x1ea>
lea    0xcc8(%rip),%rdi
call   1030 <getenv@plt>
test   %rax,%rax
je     137a <mus_expand_filename+0x1ea>
mov    %rax,%r15
movslq %r12d,%rbx
mov    %rax,%rdi
call   1080 <sndlib_strlen@plt>
lea    (%rbx,%rax,1),%rdi
add    $0x8,%rdi
mov    $0x1,%esi
call   1070 <calloc@plt>
mov    %rax,%r13
mov    %rax,%rdi
mov    %r15,%rsi
call   1050 <strcpy@plt>
mov    (%rsp),%rsi
add    $0x1,%rsi
jmp    13cf <mus_expand_filename+0x23f>
xor    %eax,%eax
call   1090 <mus_getcwd@plt>
mov    %rax,%r15
movslq %r12d,%rbx
mov    %rax,%rdi
call   1080 <sndlib_strlen@plt>
lea    (%rbx,%rax,1),%rdi
add    $0x8,%rdi
mov    $0x1,%esi
call   1070 <calloc@plt>
mov    %rax,%r13
mov    %rax,%rdi
mov    %r15,%rsi
call   1050 <strcpy@plt>
mov    %r15,%rdi
call   1040 <free@plt>
lea    0xc47(%rip),%rsi
mov    %r13,%rdi
call   10a0 <strcat@plt>
mov    (%rsp),%rsi
cmpb   $0x0,(%rsi)
je     13fb <mus_expand_filename+0x26b>
mov    %r13,%rdi
call   10a0 <strcat@plt>
jmp    13fb <mus_expand_filename+0x26b>
add    $0x8,%r12d
movslq %r12d,%rdi
mov    $0x1,%esi
mov    %rax,%rbx
call   1070 <calloc@plt>
mov    %rax,%r13
mov    %rax,%rdi
mov    %rbx,%rsi
call   1050 <strcpy@plt>
lea    0x1(%r13),%r15
lea    0x30(%r13),%rax
mov    %rax,0x10(%rsp)
mov    $0xffffffff,%r12d
mov    %r15,0x18(%rsp)
jmp    1438 <mus_expand_filename+0x2a8>
movslq %edx,%rax
movb   $0x0,0x0(%r13,%rax,1)
mov    $0x1,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
test   %ecx,%ecx
je     180e <mus_expand_filename+0x67e>
mov    %r13,%rdi
call   1060 <strlen@plt>
cmp    $0x4,%eax
jl     180e <mus_expand_filename+0x67e>
lea    -0x3(%rax),%r8d
lea    -0x4(%rax),%r11d
mov    %eax,%r9d
xor    %ecx,%ecx
xor    %ebp,%ebp
jmp    146b <mus_expand_filename+0x2db>
nopw   0x0(%rax,%rax,1)
mov    %ebp,%r12d
add    $0x1,%ebp
cmp    %r8d,%ebp
jge    1430 <mus_expand_filename+0x2a0>
movslq %ebp,%rdi
cmpb   $0x2f,0x0(%r13,%rdi,1)
jne    1463 <mus_expand_filename+0x2d3>
cmpb   $0x2e,0x1(%r13,%rdi,1)
jne    1460 <mus_expand_filename+0x2d0>
mov    0x2(%rdi,%r13,1),%bl
cmp    $0x2f,%bl
je     149a <mus_expand_filename+0x30a>
cmp    $0x2e,%bl
jne    1460 <mus_expand_filename+0x2d0>
cmpb   $0x2f,0x3(%rdi,%r13,1)
jne    1460 <mus_expand_filename+0x2d0>
jmp    166d <mus_expand_filename+0x4dd>
lea    0x1(%rdi),%rsi
add    $0x3,%edi
cmp    %eax,%edi
jge    15bc <mus_expand_filename+0x42c>
movslq %edi,%rdi
mov    %r11d,%ecx
sub    %ebp,%ecx
cmp    $0x1f,%ecx
jb     15c6 <mus_expand_filename+0x436>
lea    (%rsi,%r13,1),%rbp
lea    (%rdi,%rcx,1),%rbx
add    %r15,%rbx
cmp    %rbx,%rbp
jae    14de <mus_expand_filename+0x34e>
lea    (%rsi,%rcx,1),%rbp
add    %r15,%rbp
lea    (%rdi,%r13,1),%rbx
cmp    %rbp,%rbx
jb     15c6 <mus_expand_filename+0x436>
add    $0x1,%rcx
mov    %rcx,%r10
movabs $0x1ffffffe0,%rdx
and    %rdx,%r10
lea    -0x20(%r10),%rbp
mov    %rbp,%r15
shr    $0x5,%r15
add    $0x1,%r15
test   %rbp,%rbp
mov    %r12,0x20(%rsp)
mov    %r11d,0xc(%rsp)
je     165c <mus_expand_filename+0x4cc>
mov    %r15,%r11
movabs $0xffffffffffffffe,%rdx
ff ff 0f
and    %rdx,%r11
mov    0x10(%rsp),%rdx
lea    (%rdx,%rsi,1),%r14
lea    (%rdx,%rdi,1),%r12
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movups -0x30(%r12,%rbp,1),%xmm0
movups -0x20(%r12,%rbp,1),%xmm1
movups %xmm0,-0x30(%r14,%rbp,1)
movups %xmm1,-0x20(%r14,%rbp,1)
movups -0x10(%r12,%rbp,1),%xmm0
movups (%r12,%rbp,1),%xmm1
movups %xmm0,-0x10(%r14,%rbp,1)
movups %xmm1,(%r14,%rbp,1)
add    $0x40,%rbp
add    $0xfffffffffffffffe,%r11
jne    1540 <mus_expand_filename+0x3b0>
test   $0x1,%r15b
je     159d <mus_expand_filename+0x40d>
lea    (%rsi,%rbp,1),%rbx
add    %rdi,%rbp
movups 0x0(%r13,%rbp,1),%xmm0
movups 0x10(%r13,%rbp,1),%xmm1
movups %xmm0,0x0(%r13,%rbx,1)
movups %xmm1,0x10(%r13,%rbx,1)
add    %r10,%rsi
cmp    %r10,%rcx
mov    0x18(%rsp),%r15
mov    0x20(%rsp),%r12
mov    0xc(%rsp),%r11d
jne    15c3 <mus_expand_filename+0x433>
mov    %rsi,%rbp
jmp    1649 <mus_expand_filename+0x4b9>
mov    %esi,%ebp
jmp    164c <mus_expand_filename+0x4bc>
add    %r10,%rdi
mov    %eax,%ebp
sub    %edi,%ebp
mov    %edi,%r10d
not    %r10d
add    %eax,%r10d
and    $0x3,%ebp
je     1604 <mus_expand_filename+0x474>
neg    %ebp
mov    %r13,%rbx
xor    %ecx,%ecx
nop
movzbl (%rbx,%rdi,1),%edx
mov    %dl,(%rbx,%rsi,1)
add    $0xffffffffffffffff,%rcx
add    $0x1,%rbx
cmp    %ecx,%ebp
jne    15e0 <mus_expand_filename+0x450>
sub    %rcx,%rsi
sub    %rcx,%rdi
mov    %rsi,%rbp
cmp    $0x3,%r10d
jae    160a <mus_expand_filename+0x47a>
jmp    1649 <mus_expand_filename+0x4b9>
cmp    $0x3,%r10d
jb     1649 <mus_expand_filename+0x4b9>
mov    %rsi,%rbp
nopl   (%rax)
movzbl 0x0(%r13,%rdi,1),%ecx
mov    %cl,0x0(%r13,%rbp,1)
movzbl 0x1(%r13,%rdi,1),%ecx
mov    %cl,0x1(%r13,%rbp,1)
movzbl 0x2(%r13,%rdi,1),%ecx
mov    %cl,0x2(%r13,%rbp,1)
movzbl 0x3(%r13,%rdi,1),%ecx
mov    %cl,0x3(%r13,%rbp,1)
add    $0x4,%rbp
add    $0x4,%rdi
cmp    %edi,%r9d
jne    1610 <mus_expand_filename+0x480>
movslq %ebp,%rsi
movb   $0x0,0x0(%r13,%rsi,1)
mov    $0x1,%ecx
jmp    1463 <mus_expand_filename+0x2d3>
xor    %ebp,%ebp
test   $0x1,%r15b
jne    157e <mus_expand_filename+0x3ee>
jmp    159d <mus_expand_filename+0x40d>
lea    0x4(%rbp),%ecx
lea    0x1(%r12),%edx
cmp    %eax,%ecx
jge    1415 <mus_expand_filename+0x285>
movslq %edx,%rdx
movslq %ecx,%rsi
mov    %eax,%r11d
sub    %ebp,%r11d
add    $0xfffffffb,%r11d
cmp    $0x1f,%r11d
jb     177c <mus_expand_filename+0x5ec>
lea    (%rdx,%r13,1),%rcx
lea    (%rsi,%r11,1),%rdi
add    %r15,%rdi
cmp    %rdi,%rcx
jae    16bb <mus_expand_filename+0x52b>
lea    (%rdx,%r11,1),%rcx
add    %r15,%rcx
lea    (%rsi,%r13,1),%rdi
cmp    %rcx,%rdi
jb     177c <mus_expand_filename+0x5ec>
add    $0x1,%r11
mov    %r11,%r8
movabs $0x1ffffffe0,%rcx
and    %rcx,%r8
lea    -0x20(%r8),%rcx
mov    %rcx,%r10
shr    $0x5,%r10
add    $0x1,%r10
test   %rcx,%rcx
je     1746 <mus_expand_filename+0x5b6>
mov    %r10,%rbp
movabs $0xffffffffffffffe,%rcx
ff ff 0f
and    %rcx,%rbp
mov    0x10(%rsp),%rcx
lea    (%rcx,%rsi,1),%r14
lea    (%rcx,%rdx,1),%rdi
xor    %ecx,%ecx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movups -0x30(%r14,%rcx,1),%xmm0
movups -0x20(%r14,%rcx,1),%xmm1
movups %xmm0,-0x30(%rdi,%rcx,1)
movups %xmm1,-0x20(%rdi,%rcx,1)
movups -0x10(%r14,%rcx,1),%xmm0
movups (%r14,%rcx,1),%xmm1
movups %xmm0,-0x10(%rdi,%rcx,1)
movups %xmm1,(%rdi,%rcx,1)
add    $0x40,%rcx
add    $0xfffffffffffffffe,%rbp
jne    1710 <mus_expand_filename+0x580>
jmp    1748 <mus_expand_filename+0x5b8>
xor    %ecx,%ecx
test   $0x1,%r10b
je     176d <mus_expand_filename+0x5dd>
lea    (%rcx,%rsi,1),%rdi
add    %rdx,%rcx
movups 0x0(%r13,%rdi,1),%xmm0
movups 0x10(%r13,%rdi,1),%xmm1
movups %xmm0,0x0(%r13,%rcx,1)
movups %xmm1,0x10(%r13,%rcx,1)
add    %r8,%rdx
cmp    %r8,%r11
je     1415 <mus_expand_filename+0x285>
add    %r8,%rsi
mov    %eax,%edi
sub    %esi,%edi
mov    %esi,%ecx
not    %ecx
add    %eax,%ecx
and    $0x3,%edi
je     17bb <mus_expand_filename+0x62b>
neg    %edi
mov    %r13,%rbp
xor    %eax,%eax
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movzbl 0x0(%rbp,%rsi,1),%ebx
mov    %bl,0x0(%rbp,%rdx,1)
add    $0xffffffffffffffff,%rax
add    $0x1,%rbp
cmp    %eax,%edi
jne    17a0 <mus_expand_filename+0x610>
sub    %rax,%rsi
sub    %rax,%rdx
cmp    $0x3,%ecx
jb     1415 <mus_expand_filename+0x285>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movzbl 0x0(%r13,%rsi,1),%eax
mov    %al,0x0(%r13,%rdx,1)
movzbl 0x1(%r13,%rsi,1),%eax
mov    %al,0x1(%r13,%rdx,1)
movzbl 0x2(%r13,%rsi,1),%eax
mov    %al,0x2(%r13,%rdx,1)
movzbl 0x3(%r13,%rsi,1),%eax
mov    %al,0x3(%r13,%rdx,1)
add    $0x4,%rsi
add    $0x4,%rdx
cmp    %esi,%r9d
jne    17d0 <mus_expand_filename+0x640>
jmp    1415 <mus_expand_filename+0x285>
mov    %r13,%rdi
call   1060 <strlen@plt>
cmp    $0x2,%eax
jl     1837 <mus_expand_filename+0x6a7>
lea    -0x1(%rax),%ecx
cmpb   $0x2e,0x0(%r13,%rcx,1)
jne    1837 <mus_expand_filename+0x6a7>
add    $0xfffffffe,%eax
cmpb   $0x2f,0x0(%r13,%rax,1)
jne    1837 <mus_expand_filename+0x6a7>
movb   $0x0,0x0(%r13,%rcx,1)
mov    (%rsp),%rdi
call   1040 <free@plt>
mov    %r13,%rax
add    $0x28,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
cmp    $0x20,%r8d
jae    185f <mus_expand_filename+0x6cf>
xor    %ecx,%ecx
jmp    192c <mus_expand_filename+0x79c>
mov    %r8d,%ecx
and    $0xffffffe0,%ecx
lea    -0x20(%rcx),%rbp
mov    %rbp,%rdi
shr    $0x5,%rdi
add    $0x1,%rdi
mov    %edi,%esi
and    $0x3,%esi
cmp    $0x60,%rbp
jae    1883 <mus_expand_filename+0x6f3>
xor    %ebp,%ebp
jmp    18f6 <mus_expand_filename+0x766>
movabs $0xffffffffffffffe,%rbp
ff ff 0f
add    $0xfffffffffffffffe,%rbp
and    %rbp,%rdi
lea    (%rdx,%rax,1),%rbx
add    $0x70,%rbx
xor    %ebp,%ebp
movups -0x70(%rbx,%rbp,1),%xmm0
movups -0x60(%rbx,%rbp,1),%xmm1
movups %xmm0,(%rax,%rbp,1)
movups %xmm1,0x10(%rax,%rbp,1)
movups -0x50(%rbx,%rbp,1),%xmm0
movups -0x40(%rbx,%rbp,1),%xmm1
movups %xmm0,0x20(%rax,%rbp,1)
movups %xmm1,0x30(%rax,%rbp,1)
movups -0x30(%rbx,%rbp,1),%xmm0
movups -0x20(%rbx,%rbp,1),%xmm1
movups %xmm0,0x40(%rax,%rbp,1)
movups %xmm1,0x50(%rax,%rbp,1)
movups -0x10(%rbx,%rbp,1),%xmm0
movups (%rbx,%rbp,1),%xmm1
movups %xmm0,0x60(%rax,%rbp,1)
movups %xmm1,0x70(%rax,%rbp,1)
sub    $0xffffffffffffff80,%rbp
add    $0xfffffffffffffffc,%rdi
jne    189e <mus_expand_filename+0x70e>
test   %rsi,%rsi
je     191d <mus_expand_filename+0x78d>
lea    (%rax,%rbp,1),%rdi
add    $0x10,%rdi
movups -0x10(%rdi,%rdx,1),%xmm0
movups (%rdi,%rdx,1),%xmm1
movups %xmm0,-0x10(%rdi)
movups %xmm1,(%rdi)
add    $0x20,%rdi
add    $0xffffffffffffffff,%rsi
jne    1903 <mus_expand_filename+0x773>
cmp    %r8,%rcx
je     1318 <mus_expand_filename+0x188>
test   $0x18,%r8b
je     1961 <mus_expand_filename+0x7d1>
mov    %rcx,%rdi
mov    %r8d,%ecx
and    $0xfffffff8,%ecx
lea    (%rcx,%rdx,1),%rsi
lea    (%rax,%rdi,1),%rbp
sub    %rcx,%rdi
mov    0x0(%rbp,%rdx,1),%rbx
mov    %rbx,0x0(%rbp)
add    $0x8,%rbp
add    $0x8,%rdi
jne    1940 <mus_expand_filename+0x7b0>
cmp    %r8,%rcx
jne    1242 <mus_expand_filename+0xb2>
jmp    1318 <mus_expand_filename+0x188>
add    %rcx,%rdx
jmp    123f <mus_expand_filename+0xaf>

LLVM IR (-O0):
@.str = [5 x i8] c"HOME\00"
@.str.1 = [2 x i8] c"/\00"
define i8* @mus_expand_filename(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca i32
%13 = alloca i32
store i8* %0, i8** %3
store i8* null, i8** %4
store i8* null, i8** %5
store i8* null, i8** %6
store i32 0, i32* %8
store i32 0, i32* %9
%14 = load i8*, i8** %3
%15 = icmp ne i8* %14, null
br i1 %15, label %16, label %24
16: ; preds = %1
%17 = load i8*, i8** %3
%18 = load i8, i8* %17
%19 = sext i8 %18 to i32
%20 = icmp ne i32 %19, 0
br i1 %20, label %21, label %24
21: ; preds = %16
%22 = load i8*, i8** %3
%23 = call i32 @strlen(i8* %22)
store i32 %23, i32* %9
br label %25
24: ; preds = %16, %1
store i8* null, i8** %2
br label %322
25: ; preds = %21
%26 = load i32, i32* %9
%27 = icmp eq i32 %26, 0
br i1 %27, label %28, label %29
28: ; preds = %25
store i8* null, i8** %2
br label %322
29: ; preds = %25
%30 = load i8*, i8** %3
%31 = call i8* @strdup(i8* %30)
store i8* %31, i8** %6
%32 = load i8*, i8** %6
store i8* %32, i8** %5
store i32 0, i32* %7
br label %33
33: ; preds = %59, %29
%34 = load i32, i32* %7
%35 = load i32, i32* %9
%36 = sub nsw i32 %35, 1
%37 = icmp slt i32 %34, %36
br i1 %37, label %38, label %62
38: ; preds = %33
%39 = load i8*, i8** %5
%40 = load i32, i32* %7
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %39, i64 %41
%43 = load i8, i8* %42
%44 = sext i8 %43 to i32
%45 = icmp eq i32 %44, 47
br i1 %45, label %46, label %58
46: ; preds = %38
%47 = load i8*, i8** %5
%48 = load i32, i32* %7
%49 = add nsw i32 %48, 1
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i8, i8* %47, i64 %50
%52 = load i8, i8* %51
%53 = sext i8 %52 to i32
%54 = icmp eq i32 %53, 47
br i1 %54, label %55, label %58
55: ; preds = %46
%56 = load i32, i32* %7
%57 = add nsw i32 %56, 1
store i32 %57, i32* %8
br label %58
58: ; preds = %55, %46, %38
br label %59
59: ; preds = %58
%60 = load i32, i32* %7
%61 = add nsw i32 %60, 1
store i32 %61, i32* %7
br label %33
62: ; preds = %33
%63 = load i32, i32* %8
%64 = icmp sgt i32 %63, 0
br i1 %64, label %65, label %90
65: ; preds = %62
store i32 0, i32* %7
br label %66
66: ; preds = %80, %65
%67 = load i32, i32* %8
%68 = load i32, i32* %9
%69 = icmp slt i32 %67, %68
br i1 %69, label %70, label %85
70: ; preds = %66
%71 = load i8*, i8** %5
%72 = load i32, i32* %8
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds i8, i8* %71, i64 %73
%75 = load i8, i8* %74
%76 = load i8*, i8** %5
%77 = load i32, i32* %7
%78 = sext i32 %77 to i64
%79 = getelementptr inbounds i8, i8* %76, i64 %78
store i8 %75, i8* %79
br label %80
80: ; preds = %70
%81 = load i32, i32* %7
%82 = add nsw i32 %81, 1
store i32 %82, i32* %7
%83 = load i32, i32* %8
%84 = add nsw i32 %83, 1
store i32 %84, i32* %8
br label %66
85: ; preds = %66
%86 = load i8*, i8** %5
%87 = load i32, i32* %7
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i8, i8* %86, i64 %88
store i8 0, i8* %89
br label %90
90: ; preds = %85, %62
%91 = load i8*, i8** %5
%92 = getelementptr inbounds i8, i8* %91, i64 0
%93 = load i8, i8* %92
%94 = sext i8 %93 to i32
%95 = icmp ne i32 %94, 47
br i1 %95, label %96, label %148
96: ; preds = %90
store i8* null, i8** %10
%97 = load i8*, i8** %5
%98 = getelementptr inbounds i8, i8* %97, i64 0
%99 = load i8, i8* %98
%100 = sext i8 %99 to i32
%101 = icmp eq i32 %100, 126
br i1 %101, label %102, label %121
102: ; preds = %96
%103 = call i8* @getenv(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0))
store i8* %103, i8** %10
%104 = icmp ne i8* %103, null
br i1 %104, label %105, label %121
105: ; preds = %102
%106 = load i32, i32* %9
%107 = sext i32 %106 to i64
%108 = load i8*, i8** %10
%109 = call i64 @sndlib_strlen(i8* %108)
%110 = add nsw i64 %107, %109
%111 = add nsw i64 %110, 8
%112 = call i64 @calloc(i64 %111, i64 1)
%113 = inttoptr i64 %112 to i8*
store i8* %113, i8** %4
%114 = load i8*, i8** %4
%115 = load i8*, i8** %10
%116 = call i32 @strcpy(i8* %114, i8* %115)
%117 = load i8*, i8** %4
%118 = load i8*, i8** %5
%119 = getelementptr inbounds i8, i8* %118, i32 1
store i8* %119, i8** %5
%120 = call i32 @strcat(i8* %117, i8* %119)
br label %147
121: ; preds = %102, %96
%122 = call i8* (...) @mus_getcwd()
store i8* %122, i8** %11
%123 = load i32, i32* %9
%124 = sext i32 %123 to i64
%125 = load i8*, i8** %11
%126 = call i64 @sndlib_strlen(i8* %125)
%127 = add nsw i64 %124, %126
%128 = add nsw i64 %127, 8
%129 = call i64 @calloc(i64 %128, i64 1)
%130 = inttoptr i64 %129 to i8*
store i8* %130, i8** %4
%131 = load i8*, i8** %4
%132 = load i8*, i8** %11
%133 = call i32 @strcpy(i8* %131, i8* %132)
%134 = load i8*, i8** %11
%135 = call i32 @free(i8* %134)
%136 = load i8*, i8** %4
%137 = call i32 @strcat(i8* %136, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%138 = load i8*, i8** %5
%139 = getelementptr inbounds i8, i8* %138, i64 0
%140 = load i8, i8* %139
%141 = icmp ne i8 %140, 0
br i1 %141, label %142, label %146
142: ; preds = %121
%143 = load i8*, i8** %4
%144 = load i8*, i8** %5
%145 = call i32 @strcat(i8* %143, i8* %144)
br label %146
146: ; preds = %142, %121
br label %147
147: ; preds = %146, %105
br label %157
148: ; preds = %90
%149 = load i32, i32* %9
%150 = add nsw i32 %149, 8
%151 = sext i32 %150 to i64
%152 = call i64 @calloc(i64 %151, i64 1)
%153 = inttoptr i64 %152 to i8*
store i8* %153, i8** %4
%154 = load i8*, i8** %4
%155 = load i8*, i8** %5
%156 = call i32 @strcpy(i8* %154, i8* %155)
br label %157
157: ; preds = %148, %147
store i32 -1, i32* %12
store i32 1, i32* %13
br label %158
158: ; preds = %288, %157
%159 = load i32, i32* %13
%160 = icmp ne i32 %159, 0
br i1 %160, label %161, label %289
161: ; preds = %158
store i32 0, i32* %13
%162 = load i8*, i8** %4
%163 = call i32 @strlen(i8* %162)
store i32 %163, i32* %9
store i32 0, i32* %7
br label %164
164: ; preds = %285, %161
%165 = load i32, i32* %7
%166 = load i32, i32* %9
%167 = sub nsw i32 %166, 3
%168 = icmp slt i32 %165, %167
br i1 %168, label %169, label %288
169: ; preds = %164
%170 = load i8*, i8** %4
%171 = load i32, i32* %7
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds i8, i8* %170, i64 %172
%174 = load i8, i8* %173
%175 = sext i8 %174 to i32
%176 = icmp eq i32 %175, 47
br i1 %176, label %177, label %284
177: ; preds = %169
%178 = load i8*, i8** %4
%179 = load i32, i32* %7
%180 = add nsw i32 %179, 1
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds i8, i8* %178, i64 %181
%183 = load i8, i8* %182
%184 = sext i8 %183 to i32
%185 = icmp eq i32 %184, 46
br i1 %185, label %186, label %233
186: ; preds = %177
%187 = load i8*, i8** %4
%188 = load i32, i32* %7
%189 = add nsw i32 %188, 2
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds i8, i8* %187, i64 %190
%192 = load i8, i8* %191
%193 = sext i8 %192 to i32
%194 = icmp eq i32 %193, 46
br i1 %194, label %195, label %233
195: ; preds = %186
%196 = load i8*, i8** %4
%197 = load i32, i32* %7
%198 = add nsw i32 %197, 3
%199 = sext i32 %198 to i64
%200 = getelementptr inbounds i8, i8* %196, i64 %199
%201 = load i8, i8* %200
%202 = sext i8 %201 to i32
%203 = icmp eq i32 %202, 47
br i1 %203, label %204, label %233
204: ; preds = %195
%205 = load i32, i32* %7
%206 = add nsw i32 %205, 4
store i32 %206, i32* %7
%207 = load i32, i32* %12
%208 = add nsw i32 %207, 1
store i32 %208, i32* %8
br label %209
209: ; preds = %223, %204
%210 = load i32, i32* %7
%211 = load i32, i32* %9
%212 = icmp slt i32 %210, %211
br i1 %212, label %213, label %228
213: ; preds = %209
%214 = load i8*, i8** %4
%215 = load i32, i32* %7
%216 = sext i32 %215 to i64
%217 = getelementptr inbounds i8, i8* %214, i64 %216
%218 = load i8, i8* %217
%219 = load i8*, i8** %4
%220 = load i32, i32* %8
%221 = sext i32 %220 to i64
%222 = getelementptr inbounds i8, i8* %219, i64 %221
store i8 %218, i8* %222
br label %223
223: ; preds = %213
%224 = load i32, i32* %7
%225 = add nsw i32 %224, 1
store i32 %225, i32* %7
%226 = load i32, i32* %8
%227 = add nsw i32 %226, 1
store i32 %227, i32* %8
br label %209
228: ; preds = %209
%229 = load i8*, i8** %4
%230 = load i32, i32* %8
%231 = sext i32 %230 to i64
%232 = getelementptr inbounds i8, i8* %229, i64 %231
store i8 0, i8* %232
store i32 1, i32* %13
br label %288
233: ; preds = %195, %186, %177
%234 = load i8*, i8** %4
%235 = load i32, i32* %7
%236 = add nsw i32 %235, 1
%237 = sext i32 %236 to i64
%238 = getelementptr inbounds i8, i8* %234, i64 %237
%239 = load i8, i8* %238
%240 = sext i8 %239 to i32
%241 = icmp eq i32 %240, 46
br i1 %241, label %242, label %280
242: ; preds = %233
%243 = load i8*, i8** %4
%244 = load i32, i32* %7
%245 = add nsw i32 %244, 2
%246 = sext i32 %245 to i64
%247 = getelementptr inbounds i8, i8* %243, i64 %246
%248 = load i8, i8* %247
%249 = sext i8 %248 to i32
%250 = icmp eq i32 %249, 47
br i1 %250, label %251, label %280
251: ; preds = %242
%252 = load i32, i32* %7
%253 = add nsw i32 %252, 3
store i32 %253, i32* %8
%254 = load i32, i32* %7
%255 = add nsw i32 %254, 1
store i32 %255, i32* %7
br label %256
256: ; preds = %270, %251
%257 = load i32, i32* %8
%258 = load i32, i32* %9
%259 = icmp slt i32 %257, %258
br i1 %259, label %260, label %275
260: ; preds = %256
%261 = load i8*, i8** %4
%262 = load i32, i32* %8
%263 = sext i32 %262 to i64
%264 = getelementptr inbounds i8, i8* %261, i64 %263
%265 = load i8, i8* %264
%266 = load i8*, i8** %4
%267 = load i32, i32* %7
%268 = sext i32 %267 to i64
%269 = getelementptr inbounds i8, i8* %266, i64 %268
store i8 %265, i8* %269
br label %270
270: ; preds = %260
%271 = load i32, i32* %7
%272 = add nsw i32 %271, 1
store i32 %272, i32* %7
%273 = load i32, i32* %8
%274 = add nsw i32 %273, 1
store i32 %274, i32* %8
br label %256
275: ; preds = %256
%276 = load i8*, i8** %4
%277 = load i32, i32* %7
%278 = sext i32 %277 to i64
%279 = getelementptr inbounds i8, i8* %276, i64 %278
store i8 0, i8* %279
store i32 1, i32* %13
br label %282
280: ; preds = %242, %233
%281 = load i32, i32* %7
store i32 %281, i32* %12
br label %282
282: ; preds = %280, %275
br label %283
283: ; preds = %282
br label %284
284: ; preds = %283, %169
br label %285
285: ; preds = %284
%286 = load i32, i32* %7
%287 = add nsw i32 %286, 1
store i32 %287, i32* %7
br label %164
288: ; preds = %228, %164
br label %158
289: ; preds = %158
%290 = load i8*, i8** %4
%291 = call i32 @strlen(i8* %290)
store i32 %291, i32* %9
%292 = load i32, i32* %9
%293 = icmp sgt i32 %292, 1
br i1 %293, label %294, label %318
294: ; preds = %289
%295 = load i8*, i8** %4
%296 = load i32, i32* %9
%297 = sub nsw i32 %296, 1
%298 = sext i32 %297 to i64
%299 = getelementptr inbounds i8, i8* %295, i64 %298
%300 = load i8, i8* %299
%301 = sext i8 %300 to i32
%302 = icmp eq i32 %301, 46
br i1 %302, label %303, label %318
303: ; preds = %294
%304 = load i8*, i8** %4
%305 = load i32, i32* %9
%306 = sub nsw i32 %305, 2
%307 = sext i32 %306 to i64
%308 = getelementptr inbounds i8, i8* %304, i64 %307
%309 = load i8, i8* %308
%310 = sext i8 %309 to i32
%311 = icmp eq i32 %310, 47
br i1 %311, label %312, label %318
312: ; preds = %303
%313 = load i8*, i8** %4
%314 = load i32, i32* %9
%315 = sub nsw i32 %314, 1
%316 = sext i32 %315 to i64
%317 = getelementptr inbounds i8, i8* %313, i64 %316
store i8 0, i8* %317
br label %318
318: ; preds = %312, %303, %294, %289
%319 = load i8*, i8** %6
%320 = call i32 @free(i8* %319)
%321 = load i8*, i8** %4
store i8* %321, i8** %2
br label %322
322: ; preds = %318, %28, %24
%323 = load i8*, i8** %2
ret i8* %323
}

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