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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
scalar_t__ calloc(int, int);
int /*<<< orphan*/ free(char *);
int send_http_response(char *, char *, int);
int send_response_200_ok(int sockfd, char *result) {
  char *res = NULL;
  int res_c = 0, i, rc = 1;
  while (result[res_c])
    res_c++;
  res = (char *)calloc(2 * res_c, sizeof(char));
  if (!res)
    goto send_response_200_exit;
  for (i = 0; i < res_c; i++) {
    res[2 * i] = result[i];
    res[2 * i + 1] = ' ';
  }
  res[2 * res_c - 1] = '\0';
  rc = send_http_response("200 OK", res, sockfd);
send_response_200_exit:
  free(res);
  return rc;
}


x86 assembly (clang, -O0):
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x1,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
cmpb   $0x0,(%rax,%rcx,1)
je     1175 <send_response_200_ok+0x45>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1155 <send_response_200_ok+0x25>
mov    -0x1c(%rbp),%edi
shl    $0x1,%edi
mov    $0x1,%esi
call   1040 <calloc@plt>
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    1199 <send_response_200_ok+0x69>
jmp    1213 <send_response_200_ok+0xe3>
movl   $0x0,-0x20(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    11e9 <send_response_200_ok+0xb9>
mov    -0x10(%rbp),%rax
movslq -0x20(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x18(%rbp),%rax
mov    -0x20(%rbp),%ecx
shl    $0x1,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
jmp    11a0 <send_response_200_ok+0x70>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
shl    $0x1,%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x18(%rbp),%rsi
mov    -0x4(%rbp),%edx
lea    0xdf5(%rip),%rdi
call   1050 <send_http_response@plt>
mov    %eax,-0x24(%rbp)
mov    -0x18(%rbp),%rdi
call   1030 <free@plt>
mov    -0x24(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rsi,%r13
mov    %edi,%r14d
mov    $0xffffffffffffffff,%rbx
mov    $0xfffffffd,%ebp
nopl   (%rax)
add    $0x2,%ebp
cmpb   $0x0,0x1(%r13,%rbx,1)
lea    0x1(%rbx),%rbx
jne    1150 <send_response_200_ok+0x20>
lea    0x1(%rbp),%edi
mov    $0x1,%r15d
mov    $0x1,%esi
call   1040 <calloc@plt>
mov    %rax,%r12
test   %rax,%rax
je     1272 <send_response_200_ok+0x142>
test   %ebx,%ebx
je     1255 <send_response_200_ok+0x125>
mov    %ebx,%r8d
cmp    $0x10,%r8
jb     11a1 <send_response_200_ok+0x71>
lea    (%r8,%r13,1),%rcx
cmp    %r12,%rcx
jbe    11fc <send_response_200_ok+0xcc>
lea    (%r12,%r8,2),%rcx
cmp    %r13,%rcx
jbe    11fc <send_response_200_ok+0xcc>
xor    %ecx,%ecx
mov    %ebx,%esi
sub    %ecx,%esi
lea    0x1(%rcx),%rdx
test   $0x1,%sil
je     11c3 <send_response_200_ok+0x93>
mov    0x0(%r13,%rcx,1),%al
mov    %al,(%r12,%rcx,2)
movb   $0x20,0x1(%r12,%rcx,2)
mov    %rdx,%rcx
cmp    %rdx,%r8
je     1255 <send_response_200_ok+0x125>
mov    %ebx,%eax
xchg   %ax,%ax
movzbl 0x0(%r13,%rcx,1),%edx
mov    %dl,(%r12,%rcx,2)
movb   $0x20,0x1(%r12,%rcx,2)
movzbl 0x1(%r13,%rcx,1),%edx
mov    %dl,0x2(%r12,%rcx,2)
movb   $0x20,0x3(%r12,%rcx,2)
add    $0x2,%rcx
cmp    %rcx,%rax
jne    11d0 <send_response_200_ok+0xa0>
jmp    1255 <send_response_200_ok+0x125>
mov    %ebx,%esi
mov    %ebx,%edx
and    $0xf,%edx
mov    %r8,%rcx
sub    %rdx,%rcx
sub    %rdx,%rsi
xor    %edi,%edi
movdqa 0xdea(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
movq   0x0(%r13,%rdi,1),%xmm1
movq   0x8(%r13,%rdi,1),%xmm2
punpcklbw %xmm0,%xmm1
movdqu %xmm1,(%r12,%rdi,2)
punpcklbw %xmm0,%xmm2
movdqu %xmm2,0x10(%r12,%rdi,2)
add    $0x10,%rdi
cmp    %rdi,%rsi
jne    1220 <send_response_200_ok+0xf0>
test   %rdx,%rdx
jne    11a3 <send_response_200_ok+0x73>
movslq %ebp,%rax
movb   $0x0,(%r12,%rax,1)
lea    0xdac(%rip),%rdi
mov    %r12,%rsi
mov    %r14d,%edx
call   1050 <send_http_response@plt>
mov    %eax,%r15d
mov    %r12,%rdi
call   1030 <free@plt>
mov    %r15d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [7 x i8] c"200 OK\00"
define i32 @send_response_200_ok(i32 %0, i8* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store i32 %0, i32* %3
store i8* %1, i8** %4
store i8* null, i8** %5
store i32 0, i32* %6
store i32 1, i32* %8
br label %9
9: ; preds = %16, %2
%10 = load i8*, i8** %4
%11 = load i32, i32* %6
%12 = sext i32 %11 to i64
%13 = getelementptr inbounds i8, i8* %10, i64 %12
%14 = load i8, i8* %13
%15 = icmp ne i8 %14, 0
br i1 %15, label %16, label %19
16: ; preds = %9
%17 = load i32, i32* %6
%18 = add nsw i32 %17, 1
store i32 %18, i32* %6
br label %9
19: ; preds = %9
%20 = load i32, i32* %6
%21 = mul nsw i32 2, %20
%22 = call i64 @calloc(i32 %21, i32 1)
%23 = inttoptr i64 %22 to i8*
store i8* %23, i8** %5
%24 = load i8*, i8** %5
%25 = icmp ne i8* %24, null
br i1 %25, label %27, label %26
26: ; preds = %19
br label %62
27: ; preds = %19
store i32 0, i32* %7
br label %28
28: ; preds = %49, %27
%29 = load i32, i32* %7
%30 = load i32, i32* %6
%31 = icmp slt i32 %29, %30
br i1 %31, label %32, label %52
32: ; preds = %28
%33 = load i8*, i8** %4
%34 = load i32, i32* %7
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds i8, i8* %33, i64 %35
%37 = load i8, i8* %36
%38 = load i8*, i8** %5
%39 = load i32, i32* %7
%40 = mul nsw i32 2, %39
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i8, i8* %38, i64 %41
store i8 %37, i8* %42
%43 = load i8*, i8** %5
%44 = load i32, i32* %7
%45 = mul nsw i32 2, %44
%46 = add nsw i32 %45, 1
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i8, i8* %43, i64 %47
store i8 32, i8* %48
br label %49
49: ; preds = %32
%50 = load i32, i32* %7
%51 = add nsw i32 %50, 1
store i32 %51, i32* %7
br label %28
52: ; preds = %28
%53 = load i8*, i8** %5
%54 = load i32, i32* %6
%55 = mul nsw i32 2, %54
%56 = sub nsw i32 %55, 1
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i8, i8* %53, i64 %57
store i8 0, i8* %58
%59 = load i8*, i8** %5
%60 = load i32, i32* %3
%61 = call i32 @send_http_response(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i8* %59, i32 %60)
store i32 %61, i32* %8
br label %62
62: ; preds = %52, %26
%63 = load i8*, i8** %5
%64 = call i32 @free(i8* %63)
%65 = load i32, i32* %8
ret i32 %65
}

LLVM IR (-O2):
@.str = [7 x i8] c"200 OK\00"
define i32 @send_response_200_ok(i32 %0, i8* nocapture %1) {
br label %3
3: ; preds = %3, %2
%4 = phi i64 [ %8, %3 ], [ 0, %2 ]
%5 = getelementptr inbounds i8, i8* %1, i64 %4
%6 = load i8, i8* %5
%7 = icmp eq i8 %6, 0
%8 = add nuw i64 %4, 1
br i1 %7, label %9, label %3
9: ; preds = %3
%10 = trunc i64 %4 to i32
%11 = shl nuw nsw i32 %10, 1
%12 = tail call i64 @calloc(i32 %11, i32 1)
%13 = inttoptr i64 %12 to i8*
%14 = icmp eq i64 %12, 0
br i1 %14, label %93, label %15
15: ; preds = %9
%16 = icmp eq i32 %10, 0
br i1 %16, label %88, label %17
17: ; preds = %15
%18 = and i64 %4, 4294967295
%19 = icmp ult i64 %18, 16
br i1 %19, label %54, label %20
20: ; preds = %17
%21 = shl nuw nsw i64 %18, 1
%22 = getelementptr i8, i8* %13, i64 %21
%23 = getelementptr i8, i8* %1, i64 %18
%24 = icmp ugt i8* %23, %13
%25 = icmp ugt i8* %22, %1
%26 = and i1 %24, %25
br i1 %26, label %54, label %27
27: ; preds = %20
%28 = and i64 %4, 15
%29 = sub nsw i64 %18, %28
%30 = getelementptr inbounds i8, i8* %13, i64 -1
%31 = getelementptr inbounds i8, i8* %13, i64 -1
br label %32
32: ; preds = %32, %27
%33 = phi i64 [ 0, %27 ], [ %50, %32 ]
%34 = getelementptr inbounds i8, i8* %1, i64 %33
%35 = bitcast i8* %34 to <8 x i8>*
%36 = load <8 x i8>, <8 x i8>* %35
%37 = getelementptr inbounds i8, i8* %34, i64 8
%38 = bitcast i8* %37 to <8 x i8>*
%39 = load <8 x i8>, <8 x i8>* %38
%40 = shl nuw nsw i64 %33, 1
%41 = shl i64 %33, 1
%42 = or i64 %40, 1
%43 = or i64 %41, 17
%44 = getelementptr inbounds i8, i8* %30, i64 %42
%45 = bitcast i8* %44 to <16 x i8>*
%46 = getelementptr inbounds i8, i8* %31, i64 %43
%47 = bitcast i8* %46 to <16 x i8>*
%48 = shufflevector <8 x i8> %36, <8 x i8> <i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
store <16 x i8> %48, <16 x i8>* %45
%49 = shufflevector <8 x i8> %39, <8 x i8> <i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32, i8 32>, <16 x i32> <i32 0, i32 8, i32 1, i32 9, i32 2, i32 10, i32 3, i32 11, i32 4, i32 12, i32 5, i32 13, i32 6, i32 14, i32 7, i32 15>
store <16 x i8> %49, <16 x i8>* %47
%50 = add nuw i64 %33, 16
%51 = icmp eq i64 %50, %29
br i1 %51, label %52, label %32
52: ; preds = %32
%53 = icmp eq i64 %28, 0
br i1 %53, label %88, label %54
54: ; preds = %20, %17, %52
%55 = phi i64 [ 0, %20 ], [ 0, %17 ], [ %29, %52 ]
%56 = sub i64 %4, %55
%57 = add nsw i64 %55, 1
%58 = and i64 %56, 1
%59 = icmp eq i64 %58, 0
br i1 %59, label %68, label %60
60: ; preds = %54
%61 = getelementptr inbounds i8, i8* %1, i64 %55
%62 = load i8, i8* %61
%63 = shl nuw nsw i64 %55, 1
%64 = getelementptr inbounds i8, i8* %13, i64 %63
store i8 %62, i8* %64
%65 = or i64 %63, 1
%66 = getelementptr inbounds i8, i8* %13, i64 %65
store i8 32, i8* %66
%67 = add nuw nsw i64 %55, 1
br label %68
68: ; preds = %60, %54
%69 = phi i64 [ %55, %54 ], [ %67, %60 ]
%70 = icmp eq i64 %18, %57
br i1 %70, label %88, label %71
71: ; preds = %68, %71
%72 = phi i64 [ %86, %71 ], [ %69, %68 ]
%73 = getelementptr inbounds i8, i8* %1, i64 %72
%74 = load i8, i8* %73
%75 = shl nuw nsw i64 %72, 1
%76 = getelementptr inbounds i8, i8* %13, i64 %75
store i8 %74, i8* %76
%77 = or i64 %75, 1
%78 = getelementptr inbounds i8, i8* %13, i64 %77
store i8 32, i8* %78
%79 = add nuw nsw i64 %72, 1
%80 = getelementptr inbounds i8, i8* %1, i64 %79
%81 = load i8, i8* %80
%82 = shl nuw nsw i64 %79, 1
%83 = getelementptr inbounds i8, i8* %13, i64 %82
store i8 %81, i8* %83
%84 = or i64 %82, 1
%85 = getelementptr inbounds i8, i8* %13, i64 %84
store i8 32, i8* %85
%86 = add nuw nsw i64 %72, 2
%87 = icmp eq i64 %86, %18
br i1 %87, label %88, label %71
88: ; preds = %68, %71, %52, %15
%89 = add nsw i32 %11, -1
%90 = sext i32 %89 to i64
%91 = getelementptr inbounds i8, i8* %13, i64 %90
store i8 0, i8* %91
%92 = tail call i32 @send_http_response(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str, i64 0, i64 0), i8* %13, i32 %0)
br label %93
93: ; preds = %9, %88
%94 = phi i32 [ %92, %88 ], [ 1, %9 ]
%95 = tail call i32 @free(i8* %13)
ret i32 %94
}