#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 int /*<<< orphan*/ buf;

/* Variables and functions */
int /*<<< orphan*/ abort();
char *memchr(char const *, char, size_t);
int memcmp(char const *, char const *, size_t);
int /*<<< orphan*/ memcpy(char *, char const *, size_t);
int /*<<< orphan*/ memset(char *, char, int);
char *strchr(char const *, char);
scalar_t__ strcmp(char const *, char const *);
int /*<<< orphan*/ strcpy(char *, char const *);
int strlen(char const *);
int /*<<< orphan*/ strncpy(char *, char const *, int);
char *strstr(char const *, char const *);
void test_string_func(void) {
  const char *teststr = "We are Motorhead";
  const char *teststr2 = "We are Motorhead";
  char buf[32];
  unsigned int i;
  size_t s_len = strlen(teststr);
  {
    if (!(s_len == 16))
      abort();
  };
  char *p = memchr(teststr, ' ', s_len);
  {
    if (!(p == (teststr + 2)))
      abort();
  };
  int rc = memcmp(teststr, teststr2, s_len + 1);
  {
    if (!(rc == 0))
      abort();
  };
  memcpy(buf, teststr, s_len + 1);
  {
    if (!(strlen(buf) == s_len))
      abort();
  };
  memset(buf, ' ', sizeof(buf));
  for (i = 0; i < sizeof(buf); i++) {
    if (!(buf[i] == ' '))
      abort();
  };
  p = strchr(teststr, ' ');
  {
    if (!(p == (teststr + 2)))
      abort();
  };
  {
    if (!(strcmp(teststr, teststr2) == 0))
      abort();
  };
  strcpy(buf, teststr);
  {
    if (!(strlen(buf) == strlen(teststr)))
      abort();
  };
  strncpy(buf, teststr, 3);
  buf[3] = 0;
  {
    if (!(strlen(buf) == 3))
      abort();
  };
  const char *needle = "are";
  p = strstr(teststr, needle);
  {
    if (!(p == (teststr + 3)))
      abort();
  };
}


x86 assembly (clang, -O0):
<test_string_func>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
lea    0xe41(%rip),%rax
mov    %rax,-0x8(%rbp)
lea    0xe36(%rip),%rax
mov    %rax,-0x10(%rbp)
mov    -0x8(%rbp),%rdi
call   1060 <strlen@plt>
cltq
mov    %rax,-0x40(%rbp)
cmpq   $0x10,-0x40(%rbp)
je     11ef <test_string_func+0x3f>
mov    $0x0,%al
call   1030 <abort@plt>
mov    -0x8(%rbp),%rdi
mov    -0x40(%rbp),%rdx
mov    $0x20,%esi
call   1090 <memchr@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
mov    -0x8(%rbp),%rcx
add    $0x2,%rcx
cmp    %rcx,%rax
je     1221 <test_string_func+0x71>
mov    $0x0,%al
call   1030 <abort@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x40(%rbp),%rdx
add    $0x1,%rdx
call   10a0 <memcmp@plt>
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x4c(%rbp)
je     124a <test_string_func+0x9a>
mov    $0x0,%al
call   1030 <abort@plt>
lea    -0x30(%rbp),%rdi
mov    -0x8(%rbp),%rsi
mov    -0x40(%rbp),%rdx
add    $0x1,%rdx
call   10c0 <memcpy@plt>
lea    -0x30(%rbp),%rdi
call   1060 <strlen@plt>
cltq
cmp    -0x40(%rbp),%rax
je     127b <test_string_func+0xcb>
mov    $0x0,%al
call   1030 <abort@plt>
lea    -0x30(%rbp),%rdi
mov    $0x20,%edx
mov    %edx,%esi
call   1080 <memset@plt>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    $0x20,%rax
jae    12ca <test_string_func+0x11a>
mov    -0x34(%rbp),%eax
movsbl -0x30(%rbp,%rax,1),%eax
cmp    $0x20,%eax
je     12b7 <test_string_func+0x107>
mov    $0x0,%al
call   1030 <abort@plt>
jmp    12bc <test_string_func+0x10c>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1292 <test_string_func+0xe2>
mov    -0x8(%rbp),%rdi
mov    $0x20,%esi
call   1070 <strchr@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
mov    -0x8(%rbp),%rcx
add    $0x2,%rcx
cmp    %rcx,%rax
je     12f8 <test_string_func+0x148>
mov    $0x0,%al
call   1030 <abort@plt>
mov    -0x8(%rbp),%rdi
mov    -0x10(%rbp),%rsi
call   10b0 <strcmp@plt>
cmp    $0x0,%rax
je     1316 <test_string_func+0x166>
mov    $0x0,%al
call   1030 <abort@plt>
lea    -0x30(%rbp),%rdi
mov    -0x8(%rbp),%rsi
call   1050 <strcpy@plt>
lea    -0x30(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,-0x5c(%rbp)
mov    -0x8(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,%ecx
mov    -0x5c(%rbp),%eax
cmp    %ecx,%eax
je     134c <test_string_func+0x19c>
mov    $0x0,%al
call   1030 <abort@plt>
lea    -0x30(%rbp),%rdi
mov    -0x8(%rbp),%rsi
mov    $0x3,%edx
call   1040 <strncpy@plt>
movb   $0x0,-0x2d(%rbp)
lea    -0x30(%rbp),%rdi
call   1060 <strlen@plt>
cmp    $0x3,%eax
je     137b <test_string_func+0x1cb>
mov    $0x0,%al
call   1030 <abort@plt>
lea    0xc8f(%rip),%rax
mov    %rax,-0x58(%rbp)
mov    -0x8(%rbp),%rdi
mov    -0x58(%rbp),%rsi
call   10d0 <strstr@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
mov    -0x8(%rbp),%rcx
add    $0x3,%rcx
cmp    %rcx,%rax
je     13b3 <test_string_func+0x203>
mov    $0x0,%al
call   1030 <abort@plt>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<test_string_func>:
push   %r14
push   %rbx
sub    $0x28,%rsp
lea    0xe72(%rip),%rdi
call   1060 <strlen@plt>
cmp    $0x10,%eax
jne    13bf <test_string_func+0x23f>
lea    0xe5d(%rip),%rdi
mov    $0x10,%edx
mov    $0x20,%esi
call   1080 <memchr@plt>
lea    0xe49(%rip),%rcx
cmp    %rcx,%rax
jne    13bf <test_string_func+0x23f>
lea    0xe37(%rip),%rsi
mov    %rsp,%rbx
mov    $0x11,%edx
mov    %rbx,%rdi
call   10a0 <memcpy@plt>
mov    %rbx,%rdi
call   1060 <strlen@plt>
cmp    $0x10,%eax
jne    13bf <test_string_func+0x23f>
mov    %rsp,%rdi
mov    $0x20,%esi
mov    $0x20,%edx
call   1070 <memset@plt>
cmpb   $0x20,(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x1(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x2(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x3(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x4(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x5(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x6(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x7(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x8(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x9(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0xa(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0xb(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0xc(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0xd(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0xe(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0xf(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x10(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x11(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x12(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x13(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x14(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x15(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x16(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x17(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x18(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x19(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x1a(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x1b(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x1c(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x1d(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x1e(%rsp)
jne    13bf <test_string_func+0x23f>
cmpb   $0x20,0x1f(%rsp)
jne    13bf <test_string_func+0x23f>
lea    0xcaa(%rip),%rdi
mov    %rdi,%rsi
call   1090 <strcmp@plt>
test   %rax,%rax
jne    13bf <test_string_func+0x23f>
lea    0xc96(%rip),%r14
mov    %rsp,%rbx
mov    %rbx,%rdi
mov    %r14,%rsi
call   1050 <strcpy@plt>
mov    %rbx,%rdi
call   1060 <strlen@plt>
mov    %eax,%ebx
mov    %r14,%rdi
call   1060 <strlen@plt>
cmp    %eax,%ebx
jne    13bf <test_string_func+0x23f>
lea    0xc6b(%rip),%rsi
mov    %rsp,%rbx
mov    %rbx,%rdi
mov    $0x3,%edx
call   1040 <strncpy@plt>
movb   $0x0,0x3(%rsp)
mov    %rbx,%rdi
call   1060 <strlen@plt>
cmp    $0x3,%eax
jne    13bf <test_string_func+0x23f>
add    $0x28,%rsp
pop    %rbx
pop    %r14
ret
xor    %eax,%eax
call   1030 <abort@plt>

LLVM IR (-O0):
@.str = [17 x i8] c"We are Motorhead\00"
@.str.1 = [4 x i8] c"are\00"
define void @test_string_func() {
%1 = alloca i8*
%2 = alloca i8*
%3 = alloca [32 x i8]
%4 = alloca i32
%5 = alloca i64
%6 = alloca i8*
%7 = alloca i32
%8 = alloca i8*
store i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i8** %1
store i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str, i64 0, i64 0), i8** %2
%9 = load i8*, i8** %1
%10 = call i32 @strlen(i8* %9)
%11 = sext i32 %10 to i64
store i64 %11, i64* %5
%12 = load i64, i64* %5
%13 = icmp eq i64 %12, 16
br i1 %13, label %16, label %14
14: ; preds = %0
%15 = call i32 (...) @abort()
unreachable
16: ; preds = %0
%17 = load i8*, i8** %1
%18 = load i64, i64* %5
%19 = call i8* @memchr(i8* %17, i8 signext 32, i64 %18)
store i8* %19, i8** %6
%20 = load i8*, i8** %6
%21 = load i8*, i8** %1
%22 = getelementptr inbounds i8, i8* %21, i64 2
%23 = icmp eq i8* %20, %22
br i1 %23, label %26, label %24
24: ; preds = %16
%25 = call i32 (...) @abort()
unreachable
26: ; preds = %16
%27 = load i8*, i8** %1
%28 = load i8*, i8** %2
%29 = load i64, i64* %5
%30 = add i64 %29, 1
%31 = call i32 @memcmp(i8* %27, i8* %28, i64 %30)
store i32 %31, i32* %7
%32 = load i32, i32* %7
%33 = icmp eq i32 %32, 0
br i1 %33, label %36, label %34
34: ; preds = %26
%35 = call i32 (...) @abort()
unreachable
36: ; preds = %26
%37 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%38 = load i8*, i8** %1
%39 = load i64, i64* %5
%40 = add i64 %39, 1
%41 = call i32 @memcpy(i8* %37, i8* %38, i64 %40)
%42 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%43 = call i32 @strlen(i8* %42)
%44 = sext i32 %43 to i64
%45 = load i64, i64* %5
%46 = icmp eq i64 %44, %45
br i1 %46, label %49, label %47
47: ; preds = %36
%48 = call i32 (...) @abort()
unreachable
49: ; preds = %36
%50 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%51 = call i32 @memset(i8* %50, i8 signext 32, i32 32)
store i32 0, i32* %4
br label %52
52: ; preds = %66, %49
%53 = load i32, i32* %4
%54 = zext i32 %53 to i64
%55 = icmp ult i64 %54, 32
br i1 %55, label %56, label %69
56: ; preds = %52
%57 = load i32, i32* %4
%58 = zext i32 %57 to i64
%59 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 %58
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = icmp eq i32 %61, 32
br i1 %62, label %65, label %63
63: ; preds = %56
%64 = call i32 (...) @abort()
unreachable
65: ; preds = %56
br label %66
66: ; preds = %65
%67 = load i32, i32* %4
%68 = add i32 %67, 1
store i32 %68, i32* %4
br label %52
69: ; preds = %52
%70 = load i8*, i8** %1
%71 = call i8* @strchr(i8* %70, i8 signext 32)
store i8* %71, i8** %6
%72 = load i8*, i8** %6
%73 = load i8*, i8** %1
%74 = getelementptr inbounds i8, i8* %73, i64 2
%75 = icmp eq i8* %72, %74
br i1 %75, label %78, label %76
76: ; preds = %69
%77 = call i32 (...) @abort()
unreachable
78: ; preds = %69
%79 = load i8*, i8** %1
%80 = load i8*, i8** %2
%81 = call i64 @strcmp(i8* %79, i8* %80)
%82 = icmp eq i64 %81, 0
br i1 %82, label %85, label %83
83: ; preds = %78
%84 = call i32 (...) @abort()
unreachable
85: ; preds = %78
%86 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%87 = load i8*, i8** %1
%88 = call i32 @strcpy(i8* %86, i8* %87)
%89 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%90 = call i32 @strlen(i8* %89)
%91 = load i8*, i8** %1
%92 = call i32 @strlen(i8* %91)
%93 = icmp eq i32 %90, %92
br i1 %93, label %96, label %94
94: ; preds = %85
%95 = call i32 (...) @abort()
unreachable
96: ; preds = %85
%97 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%98 = load i8*, i8** %1
%99 = call i32 @strncpy(i8* %97, i8* %98, i32 3)
%100 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 3
store i8 0, i8* %100
%101 = getelementptr inbounds [32 x i8], [32 x i8]* %3, i64 0, i64 0
%102 = call i32 @strlen(i8* %101)
%103 = icmp eq i32 %102, 3
br i1 %103, label %106, label %104
104: ; preds = %96
%105 = call i32 (...) @abort()
unreachable
106: ; preds = %96
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i8** %8
%107 = load i8*, i8** %1
%108 = load i8*, i8** %8
%109 = call i8* @strstr(i8* %107, i8* %108)
store i8* %109, i8** %6
%110 = load i8*, i8** %6
%111 = load i8*, i8** %1
%112 = getelementptr inbounds i8, i8* %111, i64 3
%113 = icmp eq i8* %110, %112
br i1 %113, label %116, label %114
114: ; preds = %106
%115 = call i32 (...) @abort()
unreachable
116: ; preds = %106
ret void
}

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