#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef scalar_t__ clock_t;

/* Variables and functions */
double CLOCKS_PER_SEC;
scalar_t__ clock();
int omp_get_num_threads();
int omp_get_thread_num();
int /*<<< orphan*/ printf(char *, ...);
int rand();
int /*<<< orphan*/ srand(int /*<<< orphan*/);
int /*<<< orphan*/ strcpy(char *, char *);
int strlen(char *);
int /*<<< orphan*/ time(int /*<<< orphan*/ *);
int main(int argc, char *argv[]) {
  clock_t begin = clock();
  char result[130000][8];
  char data[130000][8];
  char dictionary[3][8];
  strcpy(dictionary[0], "semih");
  strcpy(dictionary[1], "ogulcan");
  strcpy(dictionary[2], "omer");
  srand(time(NULL));
  int i;
  for (i = 0; i < 130000; i++) {
    int r = (rand() % 5);
    if (r == 0) {
      strcpy(data[i], "semih");
    } else if (r == 1) {
      strcpy(data[i], "semihd");
    } else if (r == 2) {
      strcpy(data[i], "ogulcan");
    } else if (r == 3) {
      strcpy(data[i], "ogulcad");
    } else {
      strcpy(data[i], "omeree");
    }
  }
  for (i = 0; i < 20; i++) {
    printf("Data %d: %s\n", i, data[i]);
  }
  int j, k, r = 0, tid, totalThreadNum;
#pragma omp parallel private(i, j, k, r, tid, totalThreadNum)
  {
    tid = omp_get_thread_num();
    totalThreadNum = omp_get_num_threads();
    int dist = 130000 / totalThreadNum;
    int start = (tid * dist);
    int end = (dist * tid) + dist;
    if (tid == 0) {
      printf("--------------------------\n");
      printf("Total thread: %d\n", totalThreadNum);
      printf("Distance: %d\n", dist);
      printf("--------------------------\n");
    }
    for (i = 0; start + i < end; i++) {
      for (k = 0; k < 3; k++) {
        for (j = 0; j < 8; j++) {
          if (data[start + i][j] == dictionary[k][j]) {
            r++;
          }
          if (r > 3) {
            strcpy(result[start + i], dictionary[k]);
          } else if (strlen(result[start + i]) < 5) {
            strcpy(result[start + i], data[start + i]);
          }
        }
        r = 0;
      }
    }
    printf("--------------------------\n");
    clock_t endTime = clock();
    double time_spent = (double)(endTime - begin) / CLOCKS_PER_SEC;
    printf("Thread ID: %d\n", tid);
    printf("Time spend: %f\n", time_spent);
    printf("--------------------------\n");
  }
#pragma omp barrier
  for (i = 0; i < 20; i++) {
    printf("result %d = %s\n", i, result[i]);
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1fbd80,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    $0x0,%al
call   1050 <clock@plt>
mov    %rax,-0x18(%rbp)
lea    -0x1fbd40(%rbp),%rdi
lea    0xe3e(%rip),%rsi
call   1030 <strcpy@plt>
lea    -0x1fbd40(%rbp),%rdi
add    $0x8,%rdi
lea    0xe2d(%rip),%rsi
call   1030 <strcpy@plt>
lea    -0x1fbd40(%rbp),%rdi
add    $0x10,%rdi
lea    0xe1e(%rip),%rsi
call   1030 <strcpy@plt>
xor    %eax,%eax
mov    %eax,%edi
call   10a0 <time@plt>
mov    %eax,%edi
call   1090 <srand@plt>
movl   $0x0,-0x1fbd44(%rbp)
cmpl   $0x1fbd0,-0x1fbd44(%rbp)
jge    1349 <main+0x1b9>
mov    $0x0,%al
call   10b0 <rand@plt>
mov    $0x5,%ecx
cltd
idiv   %ecx
mov    %edx,-0x1fbd48(%rbp)
cmpl   $0x0,-0x1fbd48(%rbp)
jne    1267 <main+0xd7>
movslq -0x1fbd44(%rbp),%rax
lea    -0x1fbd20(%rbp),%rdi
shl    $0x3,%rax
add    %rax,%rdi
lea    0xda3(%rip),%rsi
call   1030 <strcpy@plt>
jmp    1330 <main+0x1a0>
cmpl   $0x1,-0x1fbd48(%rbp)
jne    129a <main+0x10a>
movslq -0x1fbd44(%rbp),%rax
lea    -0x1fbd20(%rbp),%rdi
shl    $0x3,%rax
add    %rax,%rdi
lea    0xd83(%rip),%rsi
call   1030 <strcpy@plt>
jmp    132b <main+0x19b>
cmpl   $0x2,-0x1fbd48(%rbp)
jne    12cd <main+0x13d>
movslq -0x1fbd44(%rbp),%rax
lea    -0x1fbd20(%rbp),%rdi
shl    $0x3,%rax
add    %rax,%rdi
lea    0xd43(%rip),%rsi
call   1030 <strcpy@plt>
jmp    1326 <main+0x196>
cmpl   $0x3,-0x1fbd48(%rbp)
jne    1300 <main+0x170>
movslq -0x1fbd44(%rbp),%rax
lea    -0x1fbd20(%rbp),%rdi
shl    $0x3,%rax
add    %rax,%rdi
lea    0xd24(%rip),%rsi
call   1030 <strcpy@plt>
jmp    1321 <main+0x191>
movslq -0x1fbd44(%rbp),%rax
lea    -0x1fbd20(%rbp),%rdi
shl    $0x3,%rax
add    %rax,%rdi
lea    0xd06(%rip),%rsi
call   1030 <strcpy@plt>
jmp    1326 <main+0x196>
jmp    132b <main+0x19b>
jmp    1330 <main+0x1a0>
jmp    1335 <main+0x1a5>
mov    -0x1fbd44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1fbd44(%rbp)
jmp    120f <main+0x7f>
movl   $0x0,-0x1fbd44(%rbp)
cmpl   $0x14,-0x1fbd44(%rbp)
jge    139d <main+0x20d>
mov    -0x1fbd44(%rbp),%esi
movslq -0x1fbd44(%rbp),%rax
lea    -0x1fbd20(%rbp),%rdx
shl    $0x3,%rax
add    %rax,%rdx
lea    0xca7(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
mov    -0x1fbd44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1fbd44(%rbp)
jmp    1353 <main+0x1c3>
movl   $0x0,-0x1fbd54(%rbp)
mov    $0x0,%al
call   1040 <omp_get_thread_num@plt>
mov    %eax,-0x1fbd58(%rbp)
mov    $0x0,%al
call   1080 <omp_get_num_threads@plt>
mov    %eax,-0x1fbd5c(%rbp)
mov    $0x1fbd0,%eax
cltd
idivl  -0x1fbd5c(%rbp)
mov    %eax,-0x1fbd60(%rbp)
mov    -0x1fbd58(%rbp),%eax
imul   -0x1fbd60(%rbp),%eax
mov    %eax,-0x1fbd64(%rbp)
mov    -0x1fbd60(%rbp),%eax
imul   -0x1fbd58(%rbp),%eax
add    -0x1fbd60(%rbp),%eax
mov    %eax,-0x1fbd68(%rbp)
cmpl   $0x0,-0x1fbd58(%rbp)
jne    1450 <main+0x2c0>
lea    0xc23(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
mov    -0x1fbd5c(%rbp),%esi
lea    0xc2b(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
mov    -0x1fbd60(%rbp),%esi
lea    0xc29(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
lea    0xbed(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
movl   $0x0,-0x1fbd44(%rbp)
mov    -0x1fbd64(%rbp),%eax
add    -0x1fbd44(%rbp),%eax
cmp    -0x1fbd68(%rbp),%eax
jge    1603 <main+0x473>
movl   $0x0,-0x1fbd50(%rbp)
cmpl   $0x3,-0x1fbd50(%rbp)
jge    15ea <main+0x45a>
movl   $0x0,-0x1fbd4c(%rbp)
cmpl   $0x8,-0x1fbd4c(%rbp)
jge    15cc <main+0x43c>
mov    -0x1fbd64(%rbp),%eax
add    -0x1fbd44(%rbp),%eax
movslq %eax,%rcx
lea    -0x1fbd20(%rbp),%rax
shl    $0x3,%rcx
add    %rcx,%rax
movslq -0x1fbd4c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
movslq -0x1fbd50(%rbp),%rdx
lea    -0x1fbd40(%rbp),%rcx
shl    $0x3,%rdx
add    %rdx,%rcx
movslq -0x1fbd4c(%rbp),%rdx
movsbl (%rcx,%rdx,1),%ecx
cmp    %ecx,%eax
jne    14ff <main+0x36f>
mov    -0x1fbd54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1fbd54(%rbp)
cmpl   $0x3,-0x1fbd54(%rbp)
jle    1547 <main+0x3b7>
mov    -0x1fbd64(%rbp),%eax
add    -0x1fbd44(%rbp),%eax
cltq
lea    -0xfdea0(%rbp),%rdi
shl    $0x3,%rax
add    %rax,%rdi
movslq -0x1fbd50(%rbp),%rax
lea    -0x1fbd40(%rbp),%rsi
shl    $0x3,%rax
add    %rax,%rsi
call   1030 <strcpy@plt>
jmp    15b3 <main+0x423>
mov    -0x1fbd64(%rbp),%eax
add    -0x1fbd44(%rbp),%eax
cltq
lea    -0xfdea0(%rbp),%rdi
shl    $0x3,%rax
add    %rax,%rdi
call   1060 <strlen@plt>
cmp    $0x5,%eax
jge    15ae <main+0x41e>
mov    -0x1fbd64(%rbp),%eax
add    -0x1fbd44(%rbp),%eax
cltq
lea    -0xfdea0(%rbp),%rdi
shl    $0x3,%rax
add    %rax,%rdi
mov    -0x1fbd64(%rbp),%eax
add    -0x1fbd44(%rbp),%eax
cltq
lea    -0x1fbd20(%rbp),%rsi
shl    $0x3,%rax
add    %rax,%rsi
call   1030 <strcpy@plt>
jmp    15b3 <main+0x423>
jmp    15b8 <main+0x428>
mov    -0x1fbd4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1fbd4c(%rbp)
jmp    1493 <main+0x303>
movl   $0x0,-0x1fbd54(%rbp)
mov    -0x1fbd50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1fbd50(%rbp)
jmp    147c <main+0x2ec>
jmp    15ef <main+0x45f>
mov    -0x1fbd44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1fbd44(%rbp)
jmp    145a <main+0x2ca>
lea    0xa2c(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
mov    $0x0,%al
call   1050 <clock@plt>
mov    %rax,-0x1fbd70(%rbp)
mov    -0x1fbd70(%rbp),%rax
sub    -0x18(%rbp),%rax
cvtsi2sd %rax,%xmm0
mov    0x29b2(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,-0x1fbd78(%rbp)
ff
mov    -0x1fbd58(%rbp),%esi
lea    0xa23(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
movsd  -0x1fbd78(%rbp),%xmm0
ff
lea    0xa1c(%rip),%rdi
mov    $0x1,%al
call   1070 <printf@plt>
lea    0x9c3(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
movl   $0x0,-0x1fbd44(%rbp)
cmpl   $0x14,-0x1fbd44(%rbp)
jge    16ce <main+0x53e>
mov    -0x1fbd44(%rbp),%esi
movslq -0x1fbd44(%rbp),%rax
lea    -0xfdea0(%rbp),%rdx
shl    $0x3,%rax
add    %rax,%rdx
lea    0x9de(%rip),%rdi
mov    $0x0,%al
call   1070 <printf@plt>
mov    -0x1fbd44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1fbd44(%rbp)
jmp    1684 <main+0x4f4>
xor    %eax,%eax
add    $0x1fbd80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1fbd48,%rsp
xor    %eax,%eax
call   1060 <clock@plt>
mov    %rax,0x30(%rsp)
lea    0xe3c(%rip),%rsi
mov    %rsp,%rdi
call   1030 <strcpy@plt>
lea    0x8(%rsp),%rdi
lea    0xe2e(%rip),%rsi
call   1030 <strcpy@plt>
lea    0x10(%rsp),%rdi
lea    0xe25(%rip),%rsi
call   1030 <strcpy@plt>
xor    %edi,%edi
call   10b0 <time@plt>
mov    %eax,%edi
call   10a0 <srand@plt>
lea    0xe1f(%rip),%r14
lea    0xe96(%rip),%rbp
xor    %ebx,%ebx
jmp    122a <main+0x8a>
xchg   %ax,%ax
lea    (%rsp,%rbx,1),%rdi
add    $0x40,%rdi
call   1030 <strcpy@plt>
add    $0x8,%rbx
cmp    $0xfde80,%rbx
je     1260 <main+0xc0>
xor    %eax,%eax
call   10c0 <rand@plt>
cltq
imul   $0x66666667,%rax,%rcx
mov    %rcx,%rdx
shr    $0x3f,%rdx
sar    $0x21,%rcx
add    %edx,%ecx
lea    (%rcx,%rcx,4),%ecx
sub    %ecx,%eax
mov    %r14,%rsi
cmp    $0x3,%eax
ja     1210 <main+0x70>
cltq
movslq 0x0(%rbp,%rax,4),%rsi
add    %rbp,%rsi
jmp    1210 <main+0x70>
lea    0xdc2(%rip),%rbp
lea    0x40(%rsp),%rdx
mov    %rbp,%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x48(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x50(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x2,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x58(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x3,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x60(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x68(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x5,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x70(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x6,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x78(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x7,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x80(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x88(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x9,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x90(%rsp),%rdx
mov    %rbp,%rdi
mov    $0xa,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x98(%rsp),%rdx
mov    %rbp,%rdi
mov    $0xb,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xa0(%rsp),%rdx
mov    %rbp,%rdi
mov    $0xc,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xa8(%rsp),%rdx
mov    %rbp,%rdi
mov    $0xd,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xb0(%rsp),%rdx
mov    %rbp,%rdi
mov    $0xe,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xb8(%rsp),%rdx
mov    %rbp,%rdi
mov    $0xf,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xc0(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x10,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xc8(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x11,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xd0(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x12,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xd8(%rsp),%rdx
mov    %rbp,%rdi
mov    $0x13,%esi
xor    %eax,%eax
call   1080 <printf@plt>
xor    %eax,%eax
call   1050 <omp_get_thread_num@plt>
mov    %eax,%ebx
xor    %eax,%eax
call   1090 <omp_get_num_threads@plt>
mov    %eax,%r14d
mov    $0x1fbd0,%eax
xor    %edx,%edx
idiv   %r14d
mov    %eax,%ebp
mov    %ebx,0x24(%rsp)
test   %ebx,%ebx
je     1448 <main+0x2a8>
test   %ebp,%ebp
jg     1488 <main+0x2e8>
jmp    1969 <main+0x7c9>
lea    0xc36(%rip),%rbx
mov    %rbx,%rdi
call   1040 <puts@plt>
lea    0xbd8(%rip),%rdi
mov    %r14d,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xbd9(%rip),%rdi
mov    %ebp,%esi
xor    %eax,%eax
call   1080 <printf@plt>
mov    %rbx,%rdi
call   1040 <puts@plt>
test   %ebp,%ebp
jle    1969 <main+0x7c9>
mov    0x24(%rsp),%eax
imul   %ebp,%eax
mov    %ebp,%ecx
jmp    14be <main+0x31e>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %r15,%rdi
call   1030 <strcpy@plt>
mov    0x28(%rsp),%eax
add    $0x1,%eax
mov    0x38(%rsp),%rcx
add    $0xffffffffffffffff,%rcx
je     1969 <main+0x7c9>
mov    %rcx,0x38(%rsp)
mov    %eax,0x28(%rsp)
movslq %eax,%r12
lea    (%rsp,%r12,8),%r15
add    $0xfdec0,%r15
lea    (%rsp,%r12,8),%r14
add    $0x40,%r14
movzbl 0x40(%rsp,%r12,8),%eax
xor    %ebx,%ebx
cmp    (%rsp),%al
sete   %bpl
mov    %r15,%rdi
call   1070 <strlen@plt>
cmp    $0x4,%eax
jg     1504 <main+0x364>
mov    %r15,%rdi
mov    %r14,%rsi
call   1030 <strcpy@plt>
mov    %bpl,%bl
movzbl 0x41(%rsp,%r12,8),%eax
xor    %r13d,%r13d
cmp    0x1(%rsp),%al
sete   %r13b
add    %ebx,%r13d
mov    %r15,%rdi
call   1070 <strlen@plt>
cmp    $0x4,%eax
jg     1533 <main+0x393>
mov    %r15,%rdi
mov    %r14,%rsi
call   1030 <strcpy@plt>
movzbl 0x42(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x2(%rsp),%al
sete   %cl
add    %ecx,%r13d
mov    %rsp,%rbx
mov    %rbx,%rsi
cmp    $0x3,%r13d
ja     1561 <main+0x3c1>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     1569 <main+0x3c9>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x43(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x3(%rsp),%al
sete   %cl
add    %ecx,%r13d
mov    %rbx,%rsi
cmp    $0x3,%r13d
ja     1594 <main+0x3f4>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     159c <main+0x3fc>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x44(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x4(%rsp),%al
sete   %cl
add    %ecx,%r13d
mov    %rbx,%rsi
cmp    $0x3,%r13d
ja     15c7 <main+0x427>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     15cf <main+0x42f>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x45(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x5(%rsp),%al
sete   %cl
add    %ecx,%r13d
mov    %rbx,%rsi
cmp    $0x3,%r13d
ja     15fa <main+0x45a>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     1602 <main+0x462>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x46(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x6(%rsp),%al
sete   %cl
add    %ecx,%r13d
mov    %rbx,%rsi
cmp    $0x3,%r13d
ja     162d <main+0x48d>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     1635 <main+0x495>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x47(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x7(%rsp),%al
sete   %cl
add    %ecx,%r13d
mov    %rbx,%rsi
cmp    $0x3,%r13d
ja     1660 <main+0x4c0>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     1668 <main+0x4c8>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x40(%rsp,%r12,8),%eax
xor    %ebp,%ebp
cmp    0x8(%rsp),%al
sete   %bl
mov    %r15,%rdi
call   1070 <strlen@plt>
cmp    $0x4,%eax
lea    0x8(%rsp),%r13
jg     1694 <main+0x4f4>
mov    %r15,%rdi
mov    %r14,%rsi
call   1030 <strcpy@plt>
mov    %bl,%bpl
movzbl 0x41(%rsp,%r12,8),%eax
xor    %ebx,%ebx
cmp    0x9(%rsp),%al
sete   %bl
add    %ebp,%ebx
mov    %r15,%rdi
call   1070 <strlen@plt>
cmp    $0x4,%eax
jg     16c0 <main+0x520>
mov    %r15,%rdi
mov    %r14,%rsi
call   1030 <strcpy@plt>
movzbl 0x42(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0xa(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     16e9 <main+0x549>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     16f1 <main+0x551>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x43(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0xb(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     171a <main+0x57a>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     1722 <main+0x582>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x44(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0xc(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     174b <main+0x5ab>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     1753 <main+0x5b3>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x45(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0xd(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     177c <main+0x5dc>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     1784 <main+0x5e4>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x46(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0xe(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     17ad <main+0x60d>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     17b5 <main+0x615>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x47(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0xf(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     17de <main+0x63e>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     17e6 <main+0x646>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x40(%rsp,%r12,8),%eax
xor    %ebp,%ebp
cmp    0x10(%rsp),%al
sete   %bl
mov    %r15,%rdi
call   1070 <strlen@plt>
cmp    $0x4,%eax
lea    0x10(%rsp),%r13
jg     1812 <main+0x672>
mov    %r15,%rdi
mov    %r14,%rsi
call   1030 <strcpy@plt>
mov    %bl,%bpl
movzbl 0x41(%rsp,%r12,8),%eax
xor    %ebx,%ebx
cmp    0x11(%rsp),%al
sete   %bl
add    %ebp,%ebx
mov    %r15,%rdi
call   1070 <strlen@plt>
cmp    $0x4,%eax
jg     183e <main+0x69e>
mov    %r15,%rdi
mov    %r14,%rsi
call   1030 <strcpy@plt>
movzbl 0x42(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x12(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     1867 <main+0x6c7>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     186f <main+0x6cf>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x43(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x13(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     1898 <main+0x6f8>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     18a0 <main+0x700>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x44(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x14(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     18c9 <main+0x729>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     18d1 <main+0x731>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x45(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x15(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     18fa <main+0x75a>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     1902 <main+0x762>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x46(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x16(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     192b <main+0x78b>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jg     1933 <main+0x793>
mov    %r15,%rdi
call   1030 <strcpy@plt>
movzbl 0x47(%rsp,%r12,8),%eax
xor    %ecx,%ecx
cmp    0x17(%rsp),%al
sete   %cl
add    %ecx,%ebx
mov    %r13,%rsi
cmp    $0x3,%ebx
ja     14a0 <main+0x300>
mov    %r15,%rdi
call   1070 <strlen@plt>
mov    %r14,%rsi
cmp    $0x4,%eax
jle    14a0 <main+0x300>
jmp    14a8 <main+0x308>
lea    0x715(%rip),%rbx
mov    %rbx,%rdi
call   1040 <puts@plt>
xor    %eax,%eax
call   1060 <clock@plt>
sub    0x30(%rsp),%rax
cvtsi2sd %rax,%xmm0
mov    0x2658(%rip),%rax
divsd  (%rax),%xmm0
movsd  %xmm0,0x28(%rsp)
lea    0x6b5(%rip),%rdi
mov    0x24(%rsp),%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0x6b2(%rip),%rdi
movsd  0x28(%rsp),%xmm0
mov    $0x1,%al
call   1080 <printf@plt>
mov    %rbx,%rdi
call   1040 <puts@plt>
lea    0x6a6(%rip),%rbx
lea    0xfdec0(%rsp),%rdx
mov    %rbx,%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdec8(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x1,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfded0(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x2,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfded8(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x3,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdee0(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x4,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdee8(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x5,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdef0(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x6,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdef8(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x7,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf00(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x8,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf08(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x9,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf10(%rsp),%rdx
mov    %rbx,%rdi
mov    $0xa,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf18(%rsp),%rdx
mov    %rbx,%rdi
mov    $0xb,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf20(%rsp),%rdx
mov    %rbx,%rdi
mov    $0xc,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf28(%rsp),%rdx
mov    %rbx,%rdi
mov    $0xd,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf30(%rsp),%rdx
mov    %rbx,%rdi
mov    $0xe,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf38(%rsp),%rdx
mov    %rbx,%rdi
mov    $0xf,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf40(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x10,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf48(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x11,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf50(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x12,%esi
xor    %eax,%eax
call   1080 <printf@plt>
lea    0xfdf58(%rsp),%rdx
mov    %rbx,%rdi
mov    $0x13,%esi
xor    %eax,%eax
call   1080 <printf@plt>
xor    %eax,%eax
add    $0x1fbd48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [6 x i8] c"semih\00"
@.str.1 = [8 x i8] c"ogulcan\00"
@.str.2 = [5 x i8] c"omer\00"
@.str.3 = [7 x i8] c"semihd\00"
@.str.4 = [8 x i8] c"ogulcad\00"
@.str.5 = [7 x i8] c"omeree\00"
@.str.6 = [13 x i8] c"Data %d: %s\0A\00"
@.str.7 = [28 x i8] c"--------------------------\0A\00"
@.str.8 = [18 x i8] c"Total thread: %d\0A\00"
@.str.9 = [14 x i8] c"Distance: %d\0A\00"
@CLOCKS_PER_SEC = global double 0.000000e+00
@.str.10 = [15 x i8] c"Thread ID: %d\0A\00"
@.str.11 = [16 x i8] c"Time spend: %f\0A\00"
@.str.12 = [16 x i8] c"result %d = %s\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i64
%7 = alloca [130000 x [8 x i8]]
%8 = alloca [130000 x [8 x i8]]
%9 = alloca [3 x [8 x i8]]
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i64
%21 = alloca double
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%22 = call i64 (...) @clock()
store i64 %22, i64* %6
%23 = getelementptr inbounds [3 x [8 x i8]], [3 x [8 x i8]]* %9, i64 0, i64 0
%24 = getelementptr inbounds [8 x i8], [8 x i8]* %23, i64 0, i64 0
%25 = call i32 @strcpy(i8* %24, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0))
%26 = getelementptr inbounds [3 x [8 x i8]], [3 x [8 x i8]]* %9, i64 0, i64 1
%27 = getelementptr inbounds [8 x i8], [8 x i8]* %26, i64 0, i64 0
%28 = call i32 @strcpy(i8* %27, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0))
%29 = getelementptr inbounds [3 x [8 x i8]], [3 x [8 x i8]]* %9, i64 0, i64 2
%30 = getelementptr inbounds [8 x i8], [8 x i8]* %29, i64 0, i64 0
%31 = call i32 @strcpy(i8* %30, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0))
%32 = call i32 @time(i32* null)
%33 = call i32 @srand(i32 %32)
store i32 0, i32* %10
br label %34
34: ; preds = %85, %2
%35 = load i32, i32* %10
%36 = icmp slt i32 %35, 130000
br i1 %36, label %37, label %88
37: ; preds = %34
%38 = call i32 (...) @rand()
%39 = srem i32 %38, 5
store i32 %39, i32* %11
%40 = load i32, i32* %11
%41 = icmp eq i32 %40, 0
br i1 %41, label %42, label %48
42: ; preds = %37
%43 = load i32, i32* %10
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %8, i64 0, i64 %44
%46 = getelementptr inbounds [8 x i8], [8 x i8]* %45, i64 0, i64 0
%47 = call i32 @strcpy(i8* %46, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str, i64 0, i64 0))
br label %84
48: ; preds = %37
%49 = load i32, i32* %11
%50 = icmp eq i32 %49, 1
br i1 %50, label %51, label %57
51: ; preds = %48
%52 = load i32, i32* %10
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %8, i64 0, i64 %53
%55 = getelementptr inbounds [8 x i8], [8 x i8]* %54, i64 0, i64 0
%56 = call i32 @strcpy(i8* %55, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.3, i64 0, i64 0))
br label %83
57: ; preds = %48
%58 = load i32, i32* %11
%59 = icmp eq i32 %58, 2
br i1 %59, label %60, label %66
60: ; preds = %57
%61 = load i32, i32* %10
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %8, i64 0, i64 %62
%64 = getelementptr inbounds [8 x i8], [8 x i8]* %63, i64 0, i64 0
%65 = call i32 @strcpy(i8* %64, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.1, i64 0, i64 0))
br label %82
66: ; preds = %57
%67 = load i32, i32* %11
%68 = icmp eq i32 %67, 3
br i1 %68, label %69, label %75
69: ; preds = %66
%70 = load i32, i32* %10
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %8, i64 0, i64 %71
%73 = getelementptr inbounds [8 x i8], [8 x i8]* %72, i64 0, i64 0
%74 = call i32 @strcpy(i8* %73, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.4, i64 0, i64 0))
br label %81
75: ; preds = %66
%76 = load i32, i32* %10
%77 = sext i32 %76 to i64
%78 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %8, i64 0, i64 %77
%79 = getelementptr inbounds [8 x i8], [8 x i8]* %78, i64 0, i64 0
%80 = call i32 @strcpy(i8* %79, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.5, i64 0, i64 0))
br label %81
81: ; preds = %75, %69
br label %82
82: ; preds = %81, %60
br label %83
83: ; preds = %82, %51
br label %84
84: ; preds = %83, %42
br label %85
85: ; preds = %84
%86 = load i32, i32* %10
%87 = add nsw i32 %86, 1
store i32 %87, i32* %10
br label %34
88: ; preds = %34
store i32 0, i32* %10
br label %89
89: ; preds = %99, %88
%90 = load i32, i32* %10
%91 = icmp slt i32 %90, 20
br i1 %91, label %92, label %102
92: ; preds = %89
%93 = load i32, i32* %10
%94 = load i32, i32* %10
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %8, i64 0, i64 %95
%97 = getelementptr inbounds [8 x i8], [8 x i8]* %96, i64 0, i64 0
%98 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.6, i64 0, i64 0), i32 %93, i8* %97)
br label %99
99: ; preds = %92
%100 = load i32, i32* %10
%101 = add nsw i32 %100, 1
store i32 %101, i32* %10
br label %89
102: ; preds = %89
store i32 0, i32* %14
%103 = call i32 (...) @omp_get_thread_num()
store i32 %103, i32* %15
%104 = call i32 (...) @omp_get_num_threads()
store i32 %104, i32* %16
%105 = load i32, i32* %16
%106 = sdiv i32 130000, %105
store i32 %106, i32* %17
%107 = load i32, i32* %15
%108 = load i32, i32* %17
%109 = mul nsw i32 %107, %108
store i32 %109, i32* %18
%110 = load i32, i32* %17
%111 = load i32, i32* %15
%112 = mul nsw i32 %110, %111
%113 = load i32, i32* %17
%114 = add nsw i32 %112, %113
store i32 %114, i32* %19
%115 = load i32, i32* %15
%116 = icmp eq i32 %115, 0
br i1 %116, label %117, label %124
117: ; preds = %102
%118 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0))
%119 = load i32, i32* %16
%120 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.8, i64 0, i64 0), i32 %119)
%121 = load i32, i32* %17
%122 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.9, i64 0, i64 0), i32 %121)
%123 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0))
br label %124
124: ; preds = %117, %102
store i32 0, i32* %10
br label %125
125: ; preds = %210, %124
%126 = load i32, i32* %18
%127 = load i32, i32* %10
%128 = add nsw i32 %126, %127
%129 = load i32, i32* %19
%130 = icmp slt i32 %128, %129
br i1 %130, label %131, label %213
131: ; preds = %125
store i32 0, i32* %13
br label %132
132: ; preds = %206, %131
%133 = load i32, i32* %13
%134 = icmp slt i32 %133, 3
br i1 %134, label %135, label %209
135: ; preds = %132
store i32 0, i32* %12
br label %136
136: ; preds = %202, %135
%137 = load i32, i32* %12
%138 = icmp slt i32 %137, 8
br i1 %138, label %139, label %205
139: ; preds = %136
%140 = load i32, i32* %18
%141 = load i32, i32* %10
%142 = add nsw i32 %140, %141
%143 = sext i32 %142 to i64
%144 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %8, i64 0, i64 %143
%145 = load i32, i32* %12
%146 = sext i32 %145 to i64
%147 = getelementptr inbounds [8 x i8], [8 x i8]* %144, i64 0, i64 %146
%148 = load i8, i8* %147
%149 = sext i8 %148 to i32
%150 = load i32, i32* %13
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds [3 x [8 x i8]], [3 x [8 x i8]]* %9, i64 0, i64 %151
%153 = load i32, i32* %12
%154 = sext i32 %153 to i64
%155 = getelementptr inbounds [8 x i8], [8 x i8]* %152, i64 0, i64 %154
%156 = load i8, i8* %155
%157 = sext i8 %156 to i32
%158 = icmp eq i32 %149, %157
br i1 %158, label %159, label %162
159: ; preds = %139
%160 = load i32, i32* %14
%161 = add nsw i32 %160, 1
store i32 %161, i32* %14
br label %162
162: ; preds = %159, %139
%163 = load i32, i32* %14
%164 = icmp sgt i32 %163, 3
br i1 %164, label %165, label %177
165: ; preds = %162
%166 = load i32, i32* %18
%167 = load i32, i32* %10
%168 = add nsw i32 %166, %167
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %7, i64 0, i64 %169
%171 = getelementptr inbounds [8 x i8], [8 x i8]* %170, i64 0, i64 0
%172 = load i32, i32* %13
%173 = sext i32 %172 to i64
%174 = getelementptr inbounds [3 x [8 x i8]], [3 x [8 x i8]]* %9, i64 0, i64 %173
%175 = getelementptr inbounds [8 x i8], [8 x i8]* %174, i64 0, i64 0
%176 = call i32 @strcpy(i8* %171, i8* %175)
br label %201
177: ; preds = %162
%178 = load i32, i32* %18
%179 = load i32, i32* %10
%180 = add nsw i32 %178, %179
%181 = sext i32 %180 to i64
%182 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %7, i64 0, i64 %181
%183 = getelementptr inbounds [8 x i8], [8 x i8]* %182, i64 0, i64 0
%184 = call i32 @strlen(i8* %183)
%185 = icmp slt i32 %184, 5
br i1 %185, label %186, label %200
186: ; preds = %177
%187 = load i32, i32* %18
%188 = load i32, i32* %10
%189 = add nsw i32 %187, %188
%190 = sext i32 %189 to i64
%191 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %7, i64 0, i64 %190
%192 = getelementptr inbounds [8 x i8], [8 x i8]* %191, i64 0, i64 0
%193 = load i32, i32* %18
%194 = load i32, i32* %10
%195 = add nsw i32 %193, %194
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %8, i64 0, i64 %196
%198 = getelementptr inbounds [8 x i8], [8 x i8]* %197, i64 0, i64 0
%199 = call i32 @strcpy(i8* %192, i8* %198)
br label %200
200: ; preds = %186, %177
br label %201
201: ; preds = %200, %165
br label %202
202: ; preds = %201
%203 = load i32, i32* %12
%204 = add nsw i32 %203, 1
store i32 %204, i32* %12
br label %136
205: ; preds = %136
store i32 0, i32* %14
br label %206
206: ; preds = %205
%207 = load i32, i32* %13
%208 = add nsw i32 %207, 1
store i32 %208, i32* %13
br label %132
209: ; preds = %132
br label %210
210: ; preds = %209
%211 = load i32, i32* %10
%212 = add nsw i32 %211, 1
store i32 %212, i32* %10
br label %125
213: ; preds = %125
%214 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0))
%215 = call i64 (...) @clock()
store i64 %215, i64* %20
%216 = load i64, i64* %20
%217 = load i64, i64* %6
%218 = sub nsw i64 %216, %217
%219 = sitofp i64 %218 to double
%220 = load double, double* @CLOCKS_PER_SEC
%221 = fdiv double %219, %220
store double %221, double* %21
%222 = load i32, i32* %15
%223 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.10, i64 0, i64 0), i32 %222)
%224 = load double, double* %21
%225 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.11, i64 0, i64 0), double %224)
%226 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0))
store i32 0, i32* %10
br label %227
227: ; preds = %237, %213
%228 = load i32, i32* %10
%229 = icmp slt i32 %228, 20
br i1 %229, label %230, label %240
230: ; preds = %227
%231 = load i32, i32* %10
%232 = load i32, i32* %10
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds [130000 x [8 x i8]], [130000 x [8 x i8]]* %7, i64 0, i64 %233
%235 = getelementptr inbounds [8 x i8], [8 x i8]* %234, i64 0, i64 0
%236 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.12, i64 0, i64 0), i32 %231, i8* %235)
br label %237
237: ; preds = %230
%238 = load i32, i32* %10
%239 = add nsw i32 %238, 1
store i32 %239, i32* %10
br label %227
240: ; preds = %227
ret i32 0
}

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