#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*/ begin_test();
int /*<<< orphan*/ end_test();
int /*<<< orphan*/ free(char *);
int /*<<< orphan*/ ft_memcpy(char *, char *, int);
int /*<<< orphan*/ ft_strcmp(char *, char *);
int /*<<< orphan*/ ft_strcmp2(char *, char *);
char *malloc(int);
int /*<<< orphan*/ printf(char *, char *, ...);
int /*<<< orphan*/ strcmp(char *, char *);
void performing_strchr(void) {
  char *str;
  char *str2;
  int i;
  str = malloc(10000000);
  str2 = malloc(10000000);
  for (i = 0; i < 100000; ++i) {
    str[i] = (i == 60000) ? 'B' : 'A';
    str2[i] = (i == 60000) ? 'D' : 'E';
  }
  str[i] = 0;
  str2[i] = 0;
  ft_memcpy(str2, str, 10000);
  if (!strcmp(str, str2))
    printf("%s\n\n%s\n", str, str2);
  begin_test();
  for (i = 0; i < 100000; ++i)
    strcmp(str, str2);
  printf("strchr : %ld\n", end_test());
  begin_test();
  for (i = 0; i < 100000; ++i)
    ft_strcmp(str, str2);
  printf("ft_strchr : %ld\n", end_test());
  begin_test();
  for (i = 0; i < 100000; ++i)
    ft_strcmp2(str, str2);
  printf("ft_strchr2 : %ld\n", end_test());
  free(str);
}


x86 assembly (clang, -O0):
<performing_strchr>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    $0x989680,%edi
call   1080 <malloc@plt>
mov    %rax,-0x8(%rbp)
mov    $0x989680,%edi
call   1080 <malloc@plt>
mov    %rax,-0x10(%rbp)
movl   $0x0,-0x14(%rbp)
cmpl   $0x186a0,-0x14(%rbp)
jge    121c <performing_strchr+0x8c>
mov    -0x14(%rbp),%edx
mov    $0x41,%eax
mov    $0x42,%ecx
cmp    $0xea60,%edx
cmove  %ecx,%eax
mov    %al,%dl
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%edx
mov    $0x45,%eax
mov    $0x44,%ecx
cmp    $0xea60,%edx
cmove  %ecx,%eax
mov    %al,%dl
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    11bb <performing_strchr+0x2b>
mov    -0x8(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
movslq -0x14(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x10(%rbp),%rdi
mov    -0x8(%rbp),%rsi
mov    $0x2710,%edx
call   1090 <ft_memcpy@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1070 <strcmp@plt>
cmp    $0x0,%eax
jne    1272 <performing_strchr+0xe2>
mov    -0x8(%rbp),%rsi
mov    -0x10(%rbp),%rdx
lea    0xd95(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    $0x0,%al
call   10b0 <begin_test@plt>
movl   $0x0,-0x14(%rbp)
cmpl   $0x186a0,-0x14(%rbp)
jge    12a8 <performing_strchr+0x118>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1070 <strcmp@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1280 <performing_strchr+0xf0>
mov    $0x0,%al
call   1040 <end_test@plt>
movslq %eax,%rsi
lea    0xd52(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    $0x0,%al
call   10b0 <begin_test@plt>
movl   $0x0,-0x14(%rbp)
cmpl   $0x186a0,-0x14(%rbp)
jge    12f6 <performing_strchr+0x166>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   10a0 <ft_strcmp@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    12ce <performing_strchr+0x13e>
mov    $0x0,%al
call   1040 <end_test@plt>
movslq %eax,%rsi
lea    0xd01(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    $0x0,%al
call   10b0 <begin_test@plt>
movl   $0x0,-0x14(%rbp)
cmpl   $0x186a0,-0x14(%rbp)
jge    1344 <performing_strchr+0x1b4>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   1060 <ft_strcmp2@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    131c <performing_strchr+0x18c>
mov    $0x0,%al
call   1040 <end_test@plt>
movslq %eax,%rsi
lea    0xcc4(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x8(%rbp),%rdi
call   1030 <free@plt>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<performing_strchr>:
push   %rbp
push   %r14
push   %rbx
mov    $0x989680,%edi
call   1080 <malloc@plt>
mov    %rax,%r14
mov    $0x989680,%edi
call   1080 <malloc@plt>
mov    %rax,%rbx
movdqa 0xe49(%rip),%xmm9
movdqa 0xe50(%rip),%xmm13
movdqa 0xe57(%rip),%xmm8
movdqa 0xe5e(%rip),%xmm11
movdqa 0xe65(%rip),%xmm14
movdqa 0xe6d(%rip),%xmm5
movdqa 0xe75(%rip),%xmm6
movdqa 0xe7c(%rip),%xmm10
mov    $0x10,%eax
movdqa 0xe8f(%rip),%xmm0
movdqa 0xee6(%rip),%xmm15
nopw   0x0(%rax,%rax,1)
movdqa %xmm10,%xmm7
movdqa 0xe63(%rip),%xmm4
pcmpeqd %xmm4,%xmm7
pshufd $0xb1,%xmm7,%xmm3
pand   %xmm0,%xmm7
pand   %xmm3,%xmm7
movdqa %xmm6,%xmm3
pcmpeqd %xmm4,%xmm3
pshufd $0xb1,%xmm3,%xmm12
pand   %xmm0,%xmm3
pand   %xmm12,%xmm3
packuswb %xmm3,%xmm7
packuswb %xmm7,%xmm7
movdqa %xmm5,%xmm3
pcmpeqd %xmm4,%xmm3
pshufd $0xb1,%xmm3,%xmm1
pand   %xmm0,%xmm3
pand   %xmm1,%xmm3
movdqa %xmm14,%xmm1
pcmpeqd %xmm4,%xmm1
pshufd $0xb1,%xmm1,%xmm2
pand   %xmm0,%xmm1
pand   %xmm2,%xmm1
packuswb %xmm1,%xmm3
packuswb %xmm3,%xmm1
packuswb %xmm1,%xmm7
movdqa %xmm11,%xmm3
pcmpeqd %xmm4,%xmm3
pshufd $0xb1,%xmm3,%xmm1
pand   %xmm0,%xmm3
pand   %xmm1,%xmm3
movdqa %xmm8,%xmm1
pcmpeqd %xmm4,%xmm1
pshufd $0xb1,%xmm1,%xmm2
pand   %xmm0,%xmm1
pand   %xmm2,%xmm1
packuswb %xmm1,%xmm3
packuswb %xmm3,%xmm3
movdqa %xmm13,%xmm1
pcmpeqd %xmm4,%xmm1
pshufd $0xb1,%xmm1,%xmm2
pand   %xmm0,%xmm1
pand   %xmm2,%xmm1
movdqa %xmm9,%xmm2
pcmpeqd %xmm4,%xmm2
pshufd $0xb1,%xmm2,%xmm4
pand   %xmm0,%xmm2
pand   %xmm4,%xmm2
packuswb %xmm2,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm3
shufps $0xcc,%xmm3,%xmm7
movaps %xmm7,%xmm1
movaps 0xda1(%rip),%xmm12
andnps %xmm12,%xmm1
movaps %xmm7,%xmm2
movaps 0xda3(%rip),%xmm3
andps  %xmm3,%xmm2
orps   %xmm1,%xmm2
movups %xmm2,-0x10(%r14,%rax,1)
movaps %xmm7,%xmm1
movaps 0xd9d(%rip),%xmm2
andnps %xmm2,%xmm1
movaps 0xda3(%rip),%xmm2
andps  %xmm2,%xmm7
orps   %xmm1,%xmm7
movups %xmm7,-0x10(%rbx,%rax,1)
movdqa %xmm10,%xmm7
movdqa 0xd9b(%rip),%xmm4
pcmpeqd %xmm4,%xmm7
pshufd $0xb1,%xmm7,%xmm1
pand   %xmm0,%xmm7
pand   %xmm1,%xmm7
movdqa %xmm6,%xmm1
pcmpeqd %xmm4,%xmm1
pshufd $0xb1,%xmm1,%xmm2
pand   %xmm0,%xmm1
pand   %xmm2,%xmm1
packuswb %xmm1,%xmm7
packuswb %xmm7,%xmm7
movdqa %xmm5,%xmm1
pcmpeqd %xmm4,%xmm1
pshufd $0xb1,%xmm1,%xmm2
pand   %xmm0,%xmm1
pand   %xmm2,%xmm1
movdqa %xmm14,%xmm2
pcmpeqd %xmm4,%xmm2
pshufd $0xb1,%xmm2,%xmm3
pand   %xmm0,%xmm2
pand   %xmm3,%xmm2
packuswb %xmm2,%xmm1
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm7
movdqa %xmm11,%xmm3
pcmpeqd %xmm4,%xmm3
pshufd $0xb1,%xmm3,%xmm1
pand   %xmm0,%xmm3
pand   %xmm1,%xmm3
movdqa %xmm8,%xmm1
pcmpeqd %xmm4,%xmm1
pshufd $0xb1,%xmm1,%xmm2
pand   %xmm0,%xmm1
pand   %xmm2,%xmm1
packuswb %xmm1,%xmm3
movdqa %xmm13,%xmm1
pcmpeqd %xmm4,%xmm1
pshufd $0xb1,%xmm1,%xmm2
pand   %xmm0,%xmm1
pand   %xmm2,%xmm1
movdqa %xmm9,%xmm2
pcmpeqd %xmm4,%xmm2
pshufd $0xb1,%xmm2,%xmm4
pand   %xmm0,%xmm2
pand   %xmm4,%xmm2
packuswb %xmm2,%xmm1
packuswb %xmm3,%xmm3
packuswb %xmm1,%xmm1
packuswb %xmm1,%xmm3
shufps $0xcc,%xmm3,%xmm7
movaps %xmm7,%xmm1
andnps %xmm12,%xmm1
movaps %xmm7,%xmm2
andps  0xc85(%rip),%xmm2
orps   %xmm1,%xmm2
movups %xmm2,(%r14,%rax,1)
movaps %xmm7,%xmm1
andnps 0xc83(%rip),%xmm1
andps  0xc8c(%rip),%xmm7
orps   %xmm1,%xmm7
movups %xmm7,(%rbx,%rax,1)
paddq  %xmm15,%xmm10
paddq  %xmm15,%xmm6
paddq  %xmm15,%xmm5
paddq  %xmm15,%xmm14
paddq  %xmm15,%xmm11
paddq  %xmm15,%xmm8
paddq  %xmm15,%xmm13
paddq  %xmm15,%xmm9
add    $0x20,%rax
cmp    $0x186b0,%rax
jne    1210 <performing_strchr+0x80>
movb   $0x0,0x186a0(%r14)
movb   $0x0,0x186a0(%rbx)
mov    %rbx,%rdi
mov    %r14,%rsi
mov    $0x2710,%edx
call   1090 <ft_memcpy@plt>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1070 <strcmp@plt>
test   %eax,%eax
jne    14c5 <performing_strchr+0x335>
lea    0xc48(%rip),%rdi
mov    %r14,%rsi
mov    %rbx,%rdx
xor    %eax,%eax
call   1050 <printf@plt>
xor    %eax,%eax
call   10b0 <begin_test@plt>
xor    %eax,%eax
call   1040 <end_test@plt>
movslq %eax,%rsi
lea    0xc2e(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
xor    %eax,%eax
call   10b0 <begin_test@plt>
mov    $0x186a0,%ebp
mov    %r14,%rdi
mov    %rbx,%rsi
call   10a0 <ft_strcmp@plt>
add    $0xffffffff,%ebp
jne    14f0 <performing_strchr+0x360>
xor    %eax,%eax
call   1040 <end_test@plt>
movslq %eax,%rsi
lea    0xbf7(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
xor    %eax,%eax
call   10b0 <begin_test@plt>
mov    $0x186a0,%ebp
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r14,%rdi
mov    %rbx,%rsi
call   1060 <ft_strcmp2@plt>
add    $0xffffffff,%ebp
jne    1530 <performing_strchr+0x3a0>
xor    %eax,%eax
call   1040 <end_test@plt>
movslq %eax,%rsi
lea    0xbc8(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    %r14,%rdi
pop    %rbx
pop    %r14
pop    %rbp
jmp    1030 <free@plt>

LLVM IR (-O0):
@.str = [8 x i8] c"%s\0A\0A%s\0A\00"
@.str.1 = [14 x i8] c"strchr : %ld\0A\00"
@.str.2 = [17 x i8] c"ft_strchr : %ld\0A\00"
@.str.3 = [18 x i8] c"ft_strchr2 : %ld\0A\00"
define void @performing_strchr() {
%1 = alloca i8*
%2 = alloca i8*
%3 = alloca i32
%4 = call i8* @malloc(i32 10000000)
store i8* %4, i8** %1
%5 = call i8* @malloc(i32 10000000)
store i8* %5, i8** %2
store i32 0, i32* %3
br label %6
6: ; preds = %28, %0
%7 = load i32, i32* %3
%8 = icmp slt i32 %7, 100000
br i1 %8, label %9, label %31
9: ; preds = %6
%10 = load i32, i32* %3
%11 = icmp eq i32 %10, 60000
%12 = zext i1 %11 to i64
%13 = select i1 %11, i32 66, i32 65
%14 = trunc i32 %13 to i8
%15 = load i8*, i8** %1
%16 = load i32, i32* %3
%17 = sext i32 %16 to i64
%18 = getelementptr inbounds i8, i8* %15, i64 %17
store i8 %14, i8* %18
%19 = load i32, i32* %3
%20 = icmp eq i32 %19, 60000
%21 = zext i1 %20 to i64
%22 = select i1 %20, i32 68, i32 69
%23 = trunc i32 %22 to i8
%24 = load i8*, i8** %2
%25 = load i32, i32* %3
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds i8, i8* %24, i64 %26
store i8 %23, i8* %27
br label %28
28: ; preds = %9
%29 = load i32, i32* %3
%30 = add nsw i32 %29, 1
store i32 %30, i32* %3
br label %6
31: ; preds = %6
%32 = load i8*, i8** %1
%33 = load i32, i32* %3
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds i8, i8* %32, i64 %34
store i8 0, i8* %35
%36 = load i8*, i8** %2
%37 = load i32, i32* %3
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i8, i8* %36, i64 %38
store i8 0, i8* %39
%40 = load i8*, i8** %2
%41 = load i8*, i8** %1
%42 = call i32 @ft_memcpy(i8* %40, i8* %41, i32 10000)
%43 = load i8*, i8** %1
%44 = load i8*, i8** %2
%45 = call i32 @strcmp(i8* %43, i8* %44)
%46 = icmp ne i32 %45, 0
br i1 %46, label %51, label %47
47: ; preds = %31
%48 = load i8*, i8** %1
%49 = load i8*, i8** %2
%50 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i8* %48, i8* %49)
br label %51
51: ; preds = %47, %31
%52 = call i32 (...) @begin_test()
store i32 0, i32* %3
br label %53
53: ; preds = %60, %51
%54 = load i32, i32* %3
%55 = icmp slt i32 %54, 100000
br i1 %55, label %56, label %63
56: ; preds = %53
%57 = load i8*, i8** %1
%58 = load i8*, i8** %2
%59 = call i32 @strcmp(i8* %57, i8* %58)
br label %60
60: ; preds = %56
%61 = load i32, i32* %3
%62 = add nsw i32 %61, 1
store i32 %62, i32* %3
br label %53
63: ; preds = %53
%64 = call i32 (...) @end_test()
%65 = sext i32 %64 to i64
%66 = inttoptr i64 %65 to i8*
%67 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %66)
%68 = call i32 (...) @begin_test()
store i32 0, i32* %3
br label %69
69: ; preds = %76, %63
%70 = load i32, i32* %3
%71 = icmp slt i32 %70, 100000
br i1 %71, label %72, label %79
72: ; preds = %69
%73 = load i8*, i8** %1
%74 = load i8*, i8** %2
%75 = call i32 @ft_strcmp(i8* %73, i8* %74)
br label %76
76: ; preds = %72
%77 = load i32, i32* %3
%78 = add nsw i32 %77, 1
store i32 %78, i32* %3
br label %69
79: ; preds = %69
%80 = call i32 (...) @end_test()
%81 = sext i32 %80 to i64
%82 = inttoptr i64 %81 to i8*
%83 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.2, i64 0, i64 0), i8* %82)
%84 = call i32 (...) @begin_test()
store i32 0, i32* %3
br label %85
85: ; preds = %92, %79
%86 = load i32, i32* %3
%87 = icmp slt i32 %86, 100000
br i1 %87, label %88, label %95
88: ; preds = %85
%89 = load i8*, i8** %1
%90 = load i8*, i8** %2
%91 = call i32 @ft_strcmp2(i8* %89, i8* %90)
br label %92
92: ; preds = %88
%93 = load i32, i32* %3
%94 = add nsw i32 %93, 1
store i32 %94, i32* %3
br label %85
95: ; preds = %85
%96 = call i32 (...) @end_test()
%97 = sext i32 %96 to i64
%98 = inttoptr i64 %97 to i8*
%99 = call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.3, i64 0, i64 0), i8* %98)
%100 = load i8*, i8** %1
%101 = call i32 @free(i8* %100)
ret void
}

LLVM IR (-O2):
@.str = [8 x i8] c"%s\0A\0A%s\0A\00"
@.str.1 = [14 x i8] c"strchr : %ld\0A\00"
@.str.2 = [17 x i8] c"ft_strchr : %ld\0A\00"
@.str.3 = [18 x i8] c"ft_strchr2 : %ld\0A\00"
define void @performing_strchr() {
%1 = tail call dereferenceable_or_null(10000000) i8* @malloc(i32 10000000)
%2 = tail call dereferenceable_or_null(10000000) i8* @malloc(i32 10000000)
br label %3
3: ; preds = %3, %0
%4 = phi i64 [ 0, %0 ], [ %21, %3 ]
%5 = phi <16 x i64> [ <i64 0, i64 1, i64 2, i64 3, i64 4, i64 5, i64 6, i64 7, i64 8, i64 9, i64 10, i64 11, i64 12, i64 13, i64 14, i64 15>, %0 ], [ %22, %3 ]
%6 = icmp eq <16 x i64> %5, <i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000, i64 60000>
%7 = select <16 x i1> %6, <16 x i8> <i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66>, <16 x i8> <i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65>
%8 = getelementptr inbounds i8, i8* %1, i64 %4
%9 = bitcast i8* %8 to <16 x i8>*
store <16 x i8> %7, <16 x i8>* %9
%10 = select <16 x i1> %6, <16 x i8> <i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68>, <16 x i8> <i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69>
%11 = getelementptr inbounds i8, i8* %2, i64 %4
%12 = bitcast i8* %11 to <16 x i8>*
store <16 x i8> %10, <16 x i8>* %12
%13 = or i64 %4, 16
%14 = icmp eq <16 x i64> %5, <i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984, i64 59984>
%15 = select <16 x i1> %14, <16 x i8> <i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66, i8 66>, <16 x i8> <i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65, i8 65>
%16 = getelementptr inbounds i8, i8* %1, i64 %13
%17 = bitcast i8* %16 to <16 x i8>*
store <16 x i8> %15, <16 x i8>* %17
%18 = select <16 x i1> %14, <16 x i8> <i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68, i8 68>, <16 x i8> <i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69, i8 69>
%19 = getelementptr inbounds i8, i8* %2, i64 %13
%20 = bitcast i8* %19 to <16 x i8>*
store <16 x i8> %18, <16 x i8>* %20
%21 = add nuw nsw i64 %4, 32
%22 = add <16 x i64> %5, <i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32, i64 32>
%23 = icmp eq i64 %21, 100000
br i1 %23, label %24, label %3
24: ; preds = %3
%25 = getelementptr inbounds i8, i8* %1, i64 100000
store i8 0, i8* %25
%26 = getelementptr inbounds i8, i8* %2, i64 100000
store i8 0, i8* %26
%27 = tail call i32 @ft_memcpy(i8* %2, i8* %1, i32 10000)
%28 = tail call i32 @strcmp(i8* dereferenceable(1) %1, i8* dereferenceable(1) %2)
%29 = icmp eq i32 %28, 0
br i1 %29, label %30, label %32
30: ; preds = %24
%31 = tail call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i64 0, i64 0), i8* %1, i8* %2)
br label %32
32: ; preds = %30, %24
%33 = tail call i32 (...) @begin_test()
%34 = tail call i32 (...) @end_test()
%35 = sext i32 %34 to i64
%36 = inttoptr i64 %35 to i8*
%37 = tail call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.1, i64 0, i64 0), i8* %36)
%38 = tail call i32 (...) @begin_test()
br label %39
39: ; preds = %32, %39
%40 = phi i32 [ 0, %32 ], [ %42, %39 ]
%41 = tail call i32 @ft_strcmp(i8* %1, i8* %2)
%42 = add nuw nsw i32 %40, 1
%43 = icmp eq i32 %42, 100000
br i1 %43, label %44, label %39
44: ; preds = %39
%45 = tail call i32 (...) @end_test()
%46 = sext i32 %45 to i64
%47 = inttoptr i64 %46 to i8*
%48 = tail call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.2, i64 0, i64 0), i8* %47)
%49 = tail call i32 (...) @begin_test()
br label %50
50: ; preds = %44, %50
%51 = phi i32 [ 0, %44 ], [ %53, %50 ]
%52 = tail call i32 @ft_strcmp2(i8* %1, i8* %2)
%53 = add nuw nsw i32 %51, 1
%54 = icmp eq i32 %53, 100000
br i1 %54, label %55, label %50
55: ; preds = %50
%56 = tail call i32 (...) @end_test()
%57 = sext i32 %56 to i64
%58 = inttoptr i64 %57 to i8*
%59 = tail call i32 (i8*, i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.3, i64 0, i64 0), i8* %58)
%60 = tail call i32 @free(i8* %1)
ret void
}