#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*/ strcat(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
int strlen(char *);
int /*<<< orphan*/ strncat(char *, char *, int);
int /*<<< orphan*/ strncpy(char *, char *, int);
void parse_nogap_filenames(int nogapout, char *inPath, char *outPath,
                           char *outdir) {
  char *slasher;
  int n;
  strcpy(outPath, outdir);
  if (!nogapout) {
    strncpy(outPath, inPath, 1024 + 1 - 4);
    n = strlen(outPath);
    if (outPath[n - 3] == 'w' && outPath[n - 2] == 'a' &&
        outPath[n - 1] == 'v' && outPath[n - 4] == '.') {
      outPath[n - 3] = 'm';
      outPath[n - 2] = 'p';
      outPath[n - 1] = '3';
    } else {
      outPath[n + 0] = '.';
      outPath[n + 1] = 'm';
      outPath[n + 2] = 'p';
      outPath[n + 3] = '3';
      outPath[n + 4] = 0;
    }
  } else {
    slasher = inPath;
    slasher += 1024 + 1 - 4;
    while (*slasher != '/' && *slasher != '\\' && slasher != inPath &&
           *slasher != ':') {
      slasher--;
    }
    if (slasher != inPath && (outPath[strlen(outPath) - 1] == '/' ||
                              outPath[strlen(outPath) - 1] == '\\' ||
                              outPath[strlen(outPath) - 1] == ':'))
      slasher++;
    else if (slasher == inPath && (outPath[strlen(outPath) - 1] != '/' &&
                                   outPath[strlen(outPath) - 1] != '\\' &&
                                   outPath[strlen(outPath) - 1] != ':'))
      strcat(outPath, "/");
    strncat(outPath, slasher, 1024 + 1 - 4);
    n = strlen(outPath);
    if (outPath[n - 3] == 'w' && outPath[n - 2] == 'a' &&
        outPath[n - 1] == 'v' && outPath[n - 4] == '.') {
      outPath[n - 3] = 'm';
      outPath[n - 2] = 'p';
      outPath[n - 1] = '3';
    } else {
      outPath[n + 0] = '.';
      outPath[n + 1] = 'm';
      outPath[n + 2] = 'p';
      outPath[n + 3] = '3';
      outPath[n + 4] = 0;
    }
  }
}


x86 assembly (clang, -O0):
<parse_nogap_filenames>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x20(%rbp),%rsi
call   1040 <strcpy@plt>
cmpl   $0x0,-0x4(%rbp)
jne    1296 <parse_nogap_filenames+0x146>
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    $0x3fd,%edx
call   1030 <strncpy@plt>
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x77,%eax
jne    123c <parse_nogap_filenames+0xec>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jne    123c <parse_nogap_filenames+0xec>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x76,%eax
jne    123c <parse_nogap_filenames+0xec>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x4,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    123c <parse_nogap_filenames+0xec>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movb   $0x6d,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movb   $0x70,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x33,(%rax,%rcx,1)
jmp    1291 <parse_nogap_filenames+0x141>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movb   $0x2e,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x6d,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movb   $0x70,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movb   $0x33,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1570 <parse_nogap_filenames+0x420>
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
add    $0x3fd,%rax
mov    %rax,-0x28(%rbp)
mov    -0x28(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x2f,%ecx
mov    %al,-0x2d(%rbp)
je     12f9 <parse_nogap_filenames+0x1a9>
mov    -0x28(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x5c,%ecx
mov    %al,-0x2d(%rbp)
je     12f9 <parse_nogap_filenames+0x1a9>
mov    -0x28(%rbp),%rcx
xor    %eax,%eax
cmp    -0x10(%rbp),%rcx
mov    %al,-0x2d(%rbp)
je     12f9 <parse_nogap_filenames+0x1a9>
mov    -0x28(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3a,%eax
setne  %al
mov    %al,-0x2d(%rbp)
mov    -0x2d(%rbp),%al
test   $0x1,%al
jne    1309 <parse_nogap_filenames+0x1b9>
jmp    131a <parse_nogap_filenames+0x1ca>
mov    -0x28(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x28(%rbp)
jmp    12ac <parse_nogap_filenames+0x15c>
mov    -0x28(%rbp),%rax
cmp    -0x10(%rbp),%rax
je     13b7 <parse_nogap_filenames+0x267>
mov    -0x18(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x38(%rbp),%rax
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
je     13a6 <parse_nogap_filenames+0x256>
mov    -0x18(%rbp),%rax
mov    %rax,-0x40(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x40(%rbp),%rax
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5c,%eax
je     13a6 <parse_nogap_filenames+0x256>
mov    -0x18(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x48(%rbp),%rax
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3a,%eax
jne    13b7 <parse_nogap_filenames+0x267>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
jmp    1458 <parse_nogap_filenames+0x308>
mov    -0x28(%rbp),%rax
cmp    -0x10(%rbp),%rax
jne    1453 <parse_nogap_filenames+0x303>
mov    -0x18(%rbp),%rax
mov    %rax,-0x50(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x50(%rbp),%rax
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
je     1453 <parse_nogap_filenames+0x303>
mov    -0x18(%rbp),%rax
mov    %rax,-0x58(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x58(%rbp),%rax
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x5c,%eax
je     1453 <parse_nogap_filenames+0x303>
mov    -0x18(%rbp),%rax
mov    %rax,-0x60(%rbp)
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,%ecx
mov    -0x60(%rbp),%rax
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3a,%eax
je     1453 <parse_nogap_filenames+0x303>
mov    -0x18(%rbp),%rdi
lea    0xbb2(%rip),%rsi
call   1070 <strcat@plt>
jmp    1458 <parse_nogap_filenames+0x308>
mov    -0x18(%rbp),%rdi
mov    -0x28(%rbp),%rsi
mov    $0x3fd,%edx
call   1060 <strncat@plt>
mov    -0x18(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x77,%eax
jne    1516 <parse_nogap_filenames+0x3c6>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x61,%eax
jne    1516 <parse_nogap_filenames+0x3c6>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x76,%eax
jne    1516 <parse_nogap_filenames+0x3c6>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x4,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
jne    1516 <parse_nogap_filenames+0x3c6>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x3,%ecx
movslq %ecx,%rcx
movb   $0x6d,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x2,%ecx
movslq %ecx,%rcx
movb   $0x70,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x33,(%rax,%rcx,1)
jmp    156b <parse_nogap_filenames+0x41b>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
movb   $0x2e,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x6d,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movb   $0x70,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movb   $0x33,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1570 <parse_nogap_filenames+0x420>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<parse_nogap_filenames>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %rdx,%r15
mov    %rsi,%r14
mov    %edi,%ebp
mov    %rdx,%rdi
mov    %rcx,%rsi
call   1040 <strcpy@plt>
test   %ebp,%ebp
je     11e4 <parse_nogap_filenames+0x94>
lea    0x3fd(%r14),%rbp
mov    $0xfffffffffffffc03,%rbx
nopl   0x0(%rax)
movzbl 0x0(%rbp),%eax
cmp    $0x2f,%al
je     119f <parse_nogap_filenames+0x4f>
cmp    $0x5c,%al
je     119f <parse_nogap_filenames+0x4f>
test   %rbx,%rbx
je     119f <parse_nogap_filenames+0x4f>
cmp    $0x3a,%al
je     119f <parse_nogap_filenames+0x4f>
add    $0xffffffffffffffff,%rbp
add    $0x1,%rbx
jmp    1180 <parse_nogap_filenames+0x30>
mov    %r15,%rdi
call   1050 <strlen@plt>
cltq
mov    -0x1(%rax,%r15,1),%al
test   %rbx,%rbx
je     11f6 <parse_nogap_filenames+0xa6>
cmp    $0x2f,%al
je     11db <parse_nogap_filenames+0x8b>
mov    %r15,%rdi
call   1050 <strlen@plt>
cltq
cmpb   $0x5c,-0x1(%rax,%r15,1)
je     11db <parse_nogap_filenames+0x8b>
mov    %r15,%rdi
call   1050 <strlen@plt>
cltq
cmpb   $0x3a,-0x1(%rax,%r15,1)
jne    11df <parse_nogap_filenames+0x8f>
add    $0x1,%rbp
mov    %rbp,%r14
jmp    122d <parse_nogap_filenames+0xdd>
mov    %r15,%rdi
mov    %r14,%rsi
mov    $0x3fd,%edx
call   1030 <strncpy@plt>
jmp    123d <parse_nogap_filenames+0xed>
cmp    $0x2f,%al
je     122d <parse_nogap_filenames+0xdd>
mov    %r15,%rdi
call   1050 <strlen@plt>
cltq
cmpb   $0x5c,-0x1(%rax,%r15,1)
je     122d <parse_nogap_filenames+0xdd>
mov    %r15,%rdi
call   1050 <strlen@plt>
cltq
cmpb   $0x3a,-0x1(%rax,%r15,1)
je     122d <parse_nogap_filenames+0xdd>
lea    0xddb(%rip),%rsi
mov    %r15,%rdi
call   1070 <strcat@plt>
mov    %r15,%rdi
mov    %r14,%rsi
mov    $0x3fd,%edx
call   1060 <strncat@plt>
mov    %r15,%rdi
call   1050 <strlen@plt>
cltq
cmpb   $0x77,-0x3(%rax,%r15,1)
jne    127b <parse_nogap_filenames+0x12b>
cmpb   $0x61,-0x2(%rax,%r15,1)
jne    127b <parse_nogap_filenames+0x12b>
cmpb   $0x76,-0x1(%rax,%r15,1)
jne    127b <parse_nogap_filenames+0x12b>
cmpb   $0x2e,-0x4(%rax,%r15,1)
jne    127b <parse_nogap_filenames+0x12b>
movb   $0x6d,-0x3(%r15,%rax,1)
movb   $0x70,-0x2(%r15,%rax,1)
movb   $0x33,-0x1(%r15,%rax,1)
jmp    1289 <parse_nogap_filenames+0x139>
movl   $0x33706d2e,(%r15,%rax,1)
33
movb   $0x0,0x4(%r15,%rax,1)
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [2 x i8] c"/\00"
define void @parse_nogap_filenames(i32 %0, i8* %1, i8* %2, i8* %3) {
%5 = tail call i32 @strcpy(i8* %2, i8* %3)
%6 = icmp eq i32 %0, 0
br i1 %6, label %7, label %49
7: ; preds = %4
%8 = tail call i32 @strncpy(i8* %2, i8* %1, i32 1021)
%9 = tail call i32 @strlen(i8* %2)
%10 = add nsw i32 %9, -3
%11 = sext i32 %10 to i64
%12 = getelementptr inbounds i8, i8* %2, i64 %11
%13 = load i8, i8* %12
%14 = icmp eq i8 %13, 119
br i1 %14, label %15, label %34
15: ; preds = %7
%16 = add nsw i32 %9, -2
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds i8, i8* %2, i64 %17
%19 = load i8, i8* %18
%20 = icmp eq i8 %19, 97
br i1 %20, label %21, label %34
21: ; preds = %15
%22 = add nsw i32 %9, -1
%23 = sext i32 %22 to i64
%24 = getelementptr inbounds i8, i8* %2, i64 %23
%25 = load i8, i8* %24
%26 = icmp eq i8 %25, 118
br i1 %26, label %27, label %34
27: ; preds = %21
%28 = add nsw i32 %9, -4
%29 = sext i32 %28 to i64
%30 = getelementptr inbounds i8, i8* %2, i64 %29
%31 = load i8, i8* %30
%32 = icmp eq i8 %31, 46
br i1 %32, label %33, label %34
33: ; preds = %27
store i8 109, i8* %12
store i8 112, i8* %18
store i8 51, i8* %24
br label %145
34: ; preds = %27, %21, %15, %7
%35 = sext i32 %9 to i64
%36 = getelementptr inbounds i8, i8* %2, i64 %35
store i8 46, i8* %36
%37 = add nsw i32 %9, 1
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i8, i8* %2, i64 %38
store i8 109, i8* %39
%40 = add nsw i32 %9, 2
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %2, i64 %41
store i8 112, i8* %42
%43 = add nsw i32 %9, 3
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i8, i8* %2, i64 %44
store i8 51, i8* %45
%46 = add nsw i32 %9, 4
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %2, i64 %47
store i8 0, i8* %48
br label %145
49: ; preds = %4
%50 = getelementptr inbounds i8, i8* %1, i64 1021
br label %51
51: ; preds = %58, %49
%52 = phi i8* [ %50, %49 ], [ %59, %58 ]
%53 = load i8, i8* %52
switch i8 %53, label %54 [
i8 47, label %60
i8 92, label %60
]
54: ; preds = %51
%55 = icmp eq i8* %52, %1
%56 = icmp eq i8 %53, 58
%57 = select i1 %55, i1 true, i1 %56
br i1 %57, label %60, label %58
58: ; preds = %54
%59 = getelementptr inbounds i8, i8* %52, i64 -1
br label %51
60: ; preds = %51, %51, %54
%61 = icmp eq i8* %52, %1
%62 = tail call i32 @strlen(i8* %2)
%63 = add nsw i32 %62, -1
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds i8, i8* %2, i64 %64
%66 = load i8, i8* %65
%67 = icmp eq i8 %66, 47
br i1 %61, label %85, label %68
68: ; preds = %60
br i1 %67, label %83, label %69
69: ; preds = %68
%70 = tail call i32 @strlen(i8* %2)
%71 = add nsw i32 %70, -1
%72 = sext i32 %71 to i64
%73 = getelementptr inbounds i8, i8* %2, i64 %72
%74 = load i8, i8* %73
%75 = icmp eq i8 %74, 92
br i1 %75, label %83, label %76
76: ; preds = %69
%77 = tail call i32 @strlen(i8* %2)
%78 = add nsw i32 %77, -1
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds i8, i8* %2, i64 %79
%81 = load i8, i8* %80
%82 = icmp eq i8 %81, 58
br i1 %82, label %83, label %102
83: ; preds = %76, %69, %68
%84 = getelementptr inbounds i8, i8* %52, i64 1
br label %102
85: ; preds = %60
br i1 %67, label %102, label %86
86: ; preds = %85
%87 = tail call i32 @strlen(i8* %2)
%88 = add nsw i32 %87, -1
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds i8, i8* %2, i64 %89
%91 = load i8, i8* %90
%92 = icmp eq i8 %91, 92
br i1 %92, label %102, label %93
93: ; preds = %86
%94 = tail call i32 @strlen(i8* %2)
%95 = add nsw i32 %94, -1
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds i8, i8* %2, i64 %96
%98 = load i8, i8* %97
%99 = icmp eq i8 %98, 58
br i1 %99, label %102, label %100
100: ; preds = %93
%101 = tail call i32 @strcat(i8* %2, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
br label %102
102: ; preds = %76, %85, %86, %93, %100, %83
%103 = phi i8* [ %84, %83 ], [ %1, %100 ], [ %1, %93 ], [ %1, %86 ], [ %1, %85 ], [ %52, %76 ]
%104 = tail call i32 @strncat(i8* %2, i8* %103, i32 1021)
%105 = tail call i32 @strlen(i8* %2)
%106 = add nsw i32 %105, -3
%107 = sext i32 %106 to i64
%108 = getelementptr inbounds i8, i8* %2, i64 %107
%109 = load i8, i8* %108
%110 = icmp eq i8 %109, 119
br i1 %110, label %111, label %130
111: ; preds = %102
%112 = add nsw i32 %105, -2
%113 = sext i32 %112 to i64
%114 = getelementptr inbounds i8, i8* %2, i64 %113
%115 = load i8, i8* %114
%116 = icmp eq i8 %115, 97
br i1 %116, label %117, label %130
117: ; preds = %111
%118 = add nsw i32 %105, -1
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds i8, i8* %2, i64 %119
%121 = load i8, i8* %120
%122 = icmp eq i8 %121, 118
br i1 %122, label %123, label %130
123: ; preds = %117
%124 = add nsw i32 %105, -4
%125 = sext i32 %124 to i64
%126 = getelementptr inbounds i8, i8* %2, i64 %125
%127 = load i8, i8* %126
%128 = icmp eq i8 %127, 46
br i1 %128, label %129, label %130
129: ; preds = %123
store i8 109, i8* %108
store i8 112, i8* %114
store i8 51, i8* %120
br label %145
130: ; preds = %123, %117, %111, %102
%131 = sext i32 %105 to i64
%132 = getelementptr inbounds i8, i8* %2, i64 %131
store i8 46, i8* %132
%133 = add nsw i32 %105, 1
%134 = sext i32 %133 to i64
%135 = getelementptr inbounds i8, i8* %2, i64 %134
store i8 109, i8* %135
%136 = add nsw i32 %105, 2
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds i8, i8* %2, i64 %137
store i8 112, i8* %138
%139 = add nsw i32 %105, 3
%140 = sext i32 %139 to i64
%141 = getelementptr inbounds i8, i8* %2, i64 %140
store i8 51, i8* %141
%142 = add nsw i32 %105, 4
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds i8, i8* %2, i64 %143
store i8 0, i8* %144
br label %145
145: ; preds = %129, %130, %33, %34
ret void
}