#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*/ printf(char *);
int rand();
scalar_t__ strncmp(char *, char *, int);
void init_option(int *arr, int size, char *opt) {
  int i;
  if (strncmp(opt, "same", 4) == 0) {
    for (i = 0; i < size; i++)
      arr[i] = size;
  } else if (strncmp(opt, "asc", 3) == 0) {
    for (i = 0; i < size; i++)
      arr[i] = i;
  } else if (strncmp(opt, "desc", 4) == 0) {
    for (i = 0; i < size; i++)
      arr[i] = size - i - 1;
  } else if (strncmp(opt, "rand", 4) == 0) {
    for (i = 0; i < size; i++)
      arr[i] = rand() % size;
  } else {
    printf("init_option error\n");
    return;
  }
}


x86 assembly (clang, -O0):
<init_option>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %rdx,-0x18(%rbp)
mov    -0x18(%rbp),%rdi
lea    0xeb2(%rip),%rsi
mov    $0x4,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1196 <init_option+0x66>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1191 <init_option+0x61>
mov    -0xc(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1169 <init_option+0x39>
jmp    12bd <init_option+0x18d>
mov    -0x18(%rbp),%rdi
lea    0xe64(%rip),%rsi
mov    $0x3,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    11e9 <init_option+0xb9>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    11e4 <init_option+0xb4>
mov    -0x1c(%rbp),%edx
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11bc <init_option+0x8c>
jmp    12b8 <init_option+0x188>
mov    -0x18(%rbp),%rdi
lea    0xe15(%rip),%rsi
mov    $0x4,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    1242 <init_option+0x112>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    123d <init_option+0x10d>
mov    -0xc(%rbp),%edx
sub    -0x1c(%rbp),%edx
sub    $0x1,%edx
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    120f <init_option+0xdf>
jmp    12b3 <init_option+0x183>
mov    -0x18(%rbp),%rdi
lea    0xdc1(%rip),%rsi
mov    $0x4,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%rax
jne    129d <init_option+0x16d>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    1298 <init_option+0x168>
mov    $0x0,%al
call   1050 <rand@plt>
cltd
idivl  -0xc(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1268 <init_option+0x138>
jmp    12ae <init_option+0x17e>
lea    0xd6f(%rip),%rdi
call   1040 <printf@plt>
jmp    12bd <init_option+0x18d>
jmp    12b3 <init_option+0x183>
jmp    12b8 <init_option+0x188>
jmp    12bd <init_option+0x18d>
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<init_option>:
push   %rbp
push   %r15
push   %r14
push   %rbx
push   %rax
mov    %rdx,%rbp
mov    %esi,%r14d
mov    %rdi,%rbx
lea    0xf79(%rip),%rsi
mov    %rdx,%rdi
mov    $0x4,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     11be <init_option+0x8e>
lea    0xf65(%rip),%rsi
mov    %rbp,%rdi
mov    $0x3,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     11d7 <init_option+0xa7>
lea    0xf50(%rip),%rsi
mov    %rbp,%rdi
mov    $0x4,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     11f4 <init_option+0xc4>
lea    0xf3c(%rip),%rsi
mov    %rbp,%rdi
mov    $0x4,%edx
call   1030 <strncmp@plt>
test   %rax,%rax
je     1241 <init_option+0x111>
lea    0xf24(%rip),%rdi
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
jmp    1040 <puts@plt>
test   %r14d,%r14d
jle    15df <init_option+0x4af>
mov    %r14d,%eax
cmp    $0x8,%r14d
jae    1211 <init_option+0xe1>
xor    %ecx,%ecx
jmp    1370 <init_option+0x240>
test   %r14d,%r14d
jle    15df <init_option+0x4af>
mov    %r14d,%eax
cmp    $0x8,%r14d
jae    126c <init_option+0x13c>
xor    %ecx,%ecx
jmp    1580 <init_option+0x450>
test   %r14d,%r14d
jle    15df <init_option+0x4af>
mov    %r14d,%eax
cmp    $0x8,%r14d
jae    1382 <init_option+0x252>
xor    %ecx,%ecx
jmp    15c5 <init_option+0x495>
mov    %eax,%ecx
and    $0xfffffff8,%ecx
movd   %r14d,%xmm0
pshufd $0x0,%xmm0,%xmm0
lea    -0x8(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x3,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x7,%edx
cmp    $0x38,%rdi
jae    129e <init_option+0x16e>
xor    %edi,%edi
jmp    1335 <init_option+0x205>
test   %r14d,%r14d
jle    15df <init_option+0x4af>
mov    %r14d,%r15d
xor    %ebp,%ebp
nop
xor    %eax,%eax
call   1050 <rand@plt>
cltd
idiv   %r14d
mov    %edx,(%rbx,%rbp,4)
add    $0x1,%rbp
cmp    %rbp,%r15
jne    1250 <init_option+0x120>
jmp    15df <init_option+0x4af>
mov    %eax,%ecx
and    $0xfffffff8,%ecx
lea    -0x8(%rcx),%rdi
mov    %rdi,%rsi
shr    $0x3,%rsi
add    $0x1,%rsi
mov    %esi,%edx
and    $0x3,%edx
cmp    $0x18,%rdi
jae    1444 <init_option+0x314>
movdqa 0xd69(%rip),%xmm0
xor    %edi,%edi
jmp    1528 <init_option+0x3f8>
and    $0xfffffffffffffff8,%rsi
xor    %edi,%edi
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
movdqu %xmm0,(%rbx,%rdi,4)
movdqu %xmm0,0x10(%rbx,%rdi,4)
movdqu %xmm0,0x20(%rbx,%rdi,4)
movdqu %xmm0,0x30(%rbx,%rdi,4)
movdqu %xmm0,0x40(%rbx,%rdi,4)
movdqu %xmm0,0x50(%rbx,%rdi,4)
movdqu %xmm0,0x60(%rbx,%rdi,4)
movdqu %xmm0,0x70(%rbx,%rdi,4)
movdqu %xmm0,0x80(%rbx,%rdi,4)
movdqu %xmm0,0x90(%rbx,%rdi,4)
movdqu %xmm0,0xa0(%rbx,%rdi,4)
movdqu %xmm0,0xb0(%rbx,%rdi,4)
movdqu %xmm0,0xc0(%rbx,%rdi,4)
movdqu %xmm0,0xd0(%rbx,%rdi,4)
movdqu %xmm0,0xe0(%rbx,%rdi,4)
movdqu %xmm0,0xf0(%rbx,%rdi,4)
add    $0x40,%rdi
add    $0xfffffffffffffff8,%rsi
jne    12b0 <init_option+0x180>
test   %rdx,%rdx
je     1364 <init_option+0x234>
lea    (%rbx,%rdi,4),%rsi
add    $0x10,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
nopl   0x0(%rax,%rax,1)
movdqu %xmm0,-0x10(%rsi,%rdi,1)
movdqu %xmm0,(%rsi,%rdi,1)
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    1350 <init_option+0x220>
cmp    %rax,%rcx
je     15df <init_option+0x4af>
nopl   (%rax)
mov    %r14d,(%rbx,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1370 <init_option+0x240>
jmp    15df <init_option+0x4af>
mov    %eax,%ecx
and    $0xfffffff8,%ecx
movd   %r14d,%xmm0
pshufd $0x0,%xmm0,%xmm2
lea    -0x8(%rcx),%rsi
mov    %rsi,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     158e <init_option+0x45e>
movabs $0x3ffffffffffffff8,%rdi
ff ff 3f
or     $0x6,%rdi
and    %rdx,%rdi
movdqa 0xc3e(%rip),%xmm1
xor    %esi,%esi
pcmpeqd %xmm8,%xmm8
movdqa 0xc3e(%rip),%xmm9
movdqa 0xc46(%rip),%xmm4
movdqa 0xc4e(%rip),%xmm5
movdqa 0xc56(%rip),%xmm6
nopw   0x0(%rax,%rax,1)
movdqa %xmm1,%xmm7
pxor   %xmm8,%xmm7
paddd  %xmm2,%xmm7
movdqa %xmm2,%xmm0
psubd  %xmm1,%xmm0
movdqa %xmm0,%xmm3
paddd  %xmm9,%xmm3
movdqu %xmm7,(%rbx,%rsi,4)
movdqu %xmm3,0x10(%rbx,%rsi,4)
movdqa %xmm0,%xmm3
paddd  %xmm4,%xmm3
paddd  %xmm5,%xmm0
movdqu %xmm3,0x20(%rbx,%rsi,4)
movdqu %xmm0,0x30(%rbx,%rsi,4)
add    $0x10,%rsi
paddd  %xmm6,%xmm1
add    $0xfffffffffffffffe,%rdi
jne    13f0 <init_option+0x2c0>
jmp    1598 <init_option+0x468>
movabs $0x3ffffffffffffff8,%rdi
ff ff 3f
or     $0x4,%rdi
and    %rdi,%rsi
movdqa 0xba3(%rip),%xmm0
xor    %edi,%edi
movdqa 0xbe8(%rip),%xmm8
movdqa 0xbef(%rip),%xmm9
movdqa 0xbf6(%rip),%xmm10
movdqa 0xbbe(%rip),%xmm4
movdqa 0xbf6(%rip),%xmm5
movdqa 0xbfe(%rip),%xmm6
movdqa 0xc06(%rip),%xmm7
movdqa 0xc0e(%rip),%xmm1
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm0,%xmm2
paddd  %xmm8,%xmm2
movdqu %xmm0,(%rbx,%rdi,4)
movdqu %xmm2,0x10(%rbx,%rdi,4)
movdqa %xmm0,%xmm2
paddd  %xmm9,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm10,%xmm3
movdqu %xmm2,0x20(%rbx,%rdi,4)
movdqu %xmm3,0x30(%rbx,%rdi,4)
movdqa %xmm0,%xmm2
paddd  %xmm4,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm5,%xmm3
movdqu %xmm2,0x40(%rbx,%rdi,4)
movdqu %xmm3,0x50(%rbx,%rdi,4)
movdqa %xmm0,%xmm2
paddd  %xmm6,%xmm2
movdqa %xmm0,%xmm3
paddd  %xmm7,%xmm3
movdqu %xmm2,0x60(%rbx,%rdi,4)
movdqu %xmm3,0x70(%rbx,%rdi,4)
add    $0x20,%rdi
paddd  %xmm1,%xmm0
add    $0xfffffffffffffffc,%rsi
jne    14b0 <init_option+0x380>
test   %rdx,%rdx
je     1570 <init_option+0x440>
lea    (%rbx,%rdi,4),%rsi
add    $0x10,%rsi
shl    $0x5,%rdx
xor    %edi,%edi
movdqa 0xb0d(%rip),%xmm1
movdqa 0xb15(%rip),%xmm2
nopl   0x0(%rax,%rax,1)
movdqa %xmm0,%xmm3
paddd  %xmm1,%xmm3
movdqu %xmm0,-0x10(%rsi,%rdi,1)
movdqu %xmm3,(%rsi,%rdi,1)
paddd  %xmm2,%xmm0
add    $0x20,%rdi
cmp    %rdi,%rdx
jne    1550 <init_option+0x420>
cmp    %rax,%rcx
je     15df <init_option+0x4af>
cs nopw 0x0(%rax,%rax,1)
nop
mov    %ecx,(%rbx,%rcx,4)
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1580 <init_option+0x450>
jmp    15df <init_option+0x4af>
movdqa 0xa6a(%rip),%xmm1
xor    %esi,%esi
test   $0x1,%dl
je     15c0 <init_option+0x490>
pcmpeqd %xmm0,%xmm0
pxor   %xmm1,%xmm0
paddd  %xmm2,%xmm0
psubd  %xmm1,%xmm2
paddd  0xa5b(%rip),%xmm2
movdqu %xmm0,(%rbx,%rsi,4)
movdqu %xmm2,0x10(%rbx,%rsi,4)
cmp    %rax,%rcx
je     15df <init_option+0x4af>
mov    %ecx,%edx
not    %edx
add    %r14d,%edx
nopl   0x0(%rax)
mov    %edx,(%rbx,%rcx,4)
add    $0x1,%rcx
add    $0xffffffff,%edx
cmp    %rcx,%rax
jne    15d0 <init_option+0x4a0>
add    $0x8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [5 x i8] c"same\00"
@.str.1 = [4 x i8] c"asc\00"
@.str.2 = [5 x i8] c"desc\00"
@.str.3 = [5 x i8] c"rand\00"
@.str.4 = [19 x i8] c"init_option error\0A\00"
define void @init_option(i32* %0, i32 %1, i8* %2) {
%4 = alloca i32*
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i32
store i32* %0, i32** %4
store i32 %1, i32* %5
store i8* %2, i8** %6
%8 = load i8*, i8** %6
%9 = call i64 @strncmp(i8* %8, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i32 4)
%10 = icmp eq i64 %9, 0
br i1 %10, label %11, label %26
11: ; preds = %3
store i32 0, i32* %7
br label %12
12: ; preds = %22, %11
%13 = load i32, i32* %7
%14 = load i32, i32* %5
%15 = icmp slt i32 %13, %14
br i1 %15, label %16, label %25
16: ; preds = %12
%17 = load i32, i32* %5
%18 = load i32*, i32** %4
%19 = load i32, i32* %7
%20 = sext i32 %19 to i64
%21 = getelementptr inbounds i32, i32* %18, i64 %20
store i32 %17, i32* %21
br label %22
22: ; preds = %16
%23 = load i32, i32* %7
%24 = add nsw i32 %23, 1
store i32 %24, i32* %7
br label %12
25: ; preds = %12
br label %93
26: ; preds = %3
%27 = load i8*, i8** %6
%28 = call i64 @strncmp(i8* %27, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 3)
%29 = icmp eq i64 %28, 0
br i1 %29, label %30, label %45
30: ; preds = %26
store i32 0, i32* %7
br label %31
31: ; preds = %41, %30
%32 = load i32, i32* %7
%33 = load i32, i32* %5
%34 = icmp slt i32 %32, %33
br i1 %34, label %35, label %44
35: ; preds = %31
%36 = load i32, i32* %7
%37 = load i32*, i32** %4
%38 = load i32, i32* %7
%39 = sext i32 %38 to i64
%40 = getelementptr inbounds i32, i32* %37, i64 %39
store i32 %36, i32* %40
br label %41
41: ; preds = %35
%42 = load i32, i32* %7
%43 = add nsw i32 %42, 1
store i32 %43, i32* %7
br label %31
44: ; preds = %31
br label %92
45: ; preds = %26
%46 = load i8*, i8** %6
%47 = call i64 @strncmp(i8* %46, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i32 4)
%48 = icmp eq i64 %47, 0
br i1 %48, label %49, label %67
49: ; preds = %45
store i32 0, i32* %7
br label %50
50: ; preds = %63, %49
%51 = load i32, i32* %7
%52 = load i32, i32* %5
%53 = icmp slt i32 %51, %52
br i1 %53, label %54, label %66
54: ; preds = %50
%55 = load i32, i32* %5
%56 = load i32, i32* %7
%57 = sub nsw i32 %55, %56
%58 = sub nsw i32 %57, 1
%59 = load i32*, i32** %4
%60 = load i32, i32* %7
%61 = sext i32 %60 to i64
%62 = getelementptr inbounds i32, i32* %59, i64 %61
store i32 %58, i32* %62
br label %63
63: ; preds = %54
%64 = load i32, i32* %7
%65 = add nsw i32 %64, 1
store i32 %65, i32* %7
br label %50
66: ; preds = %50
br label %91
67: ; preds = %45
%68 = load i8*, i8** %6
%69 = call i64 @strncmp(i8* %68, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i32 4)
%70 = icmp eq i64 %69, 0
br i1 %70, label %71, label %88
71: ; preds = %67
store i32 0, i32* %7
br label %72
72: ; preds = %84, %71
%73 = load i32, i32* %7
%74 = load i32, i32* %5
%75 = icmp slt i32 %73, %74
br i1 %75, label %76, label %87
76: ; preds = %72
%77 = call i32 (...) @rand()
%78 = load i32, i32* %5
%79 = srem i32 %77, %78
%80 = load i32*, i32** %4
%81 = load i32, i32* %7
%82 = sext i32 %81 to i64
%83 = getelementptr inbounds i32, i32* %80, i64 %82
store i32 %79, i32* %83
br label %84
84: ; preds = %76
%85 = load i32, i32* %7
%86 = add nsw i32 %85, 1
store i32 %86, i32* %7
br label %72
87: ; preds = %72
br label %90
88: ; preds = %67
%89 = call i32 @printf(i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.4, i64 0, i64 0))
br label %93
90: ; preds = %87
br label %91
91: ; preds = %90, %66
br label %92
92: ; preds = %91, %44
br label %93
93: ; preds = %88, %92, %25
ret void
}

LLVM IR (-O2):
@.str = [5 x i8] c"same\00"
@.str.1 = [4 x i8] c"asc\00"
@.str.2 = [5 x i8] c"desc\00"
@.str.3 = [5 x i8] c"rand\00"
@str = [18 x i8] c"init_option error\00"
define void @init_option(i32* nocapture writeonly %0, i32 %1, i8* %2) {
%4 = tail call i64 @strncmp(i8* %2, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str, i64 0, i64 0), i32 4)
%5 = icmp eq i64 %4, 0
br i1 %5, label %6, label %91
6: ; preds = %3
%7 = icmp sgt i32 %1, 0
br i1 %7, label %8, label %256
8: ; preds = %6
%9 = zext i32 %1 to i64
%10 = icmp ult i32 %1, 8
br i1 %10, label %84, label %11
11: ; preds = %8
%12 = and i64 %9, 4294967288
%13 = insertelement <4 x i32> poison, i32 %1, i64 0
%14 = shufflevector <4 x i32> %13, <4 x i32> poison, <4 x i32> zeroinitializer
%15 = insertelement <4 x i32> poison, i32 %1, i64 0
%16 = shufflevector <4 x i32> %15, <4 x i32> poison, <4 x i32> zeroinitializer
%17 = add nsw i64 %12, -8
%18 = lshr exact i64 %17, 3
%19 = add nuw nsw i64 %18, 1
%20 = and i64 %19, 7
%21 = icmp ult i64 %17, 56
br i1 %21, label %69, label %22
22: ; preds = %11
%23 = and i64 %19, 4611686018427387896
br label %24
24: ; preds = %24, %22
%25 = phi i64 [ 0, %22 ], [ %66, %24 ]
%26 = phi i64 [ 0, %22 ], [ %67, %24 ]
%27 = getelementptr inbounds i32, i32* %0, i64 %25
%28 = bitcast i32* %27 to <4 x i32>*
store <4 x i32> %14, <4 x i32>* %28
%29 = getelementptr inbounds i32, i32* %27, i64 4
%30 = bitcast i32* %29 to <4 x i32>*
store <4 x i32> %16, <4 x i32>* %30
%31 = or i64 %25, 8
%32 = getelementptr inbounds i32, i32* %0, i64 %31
%33 = bitcast i32* %32 to <4 x i32>*
store <4 x i32> %14, <4 x i32>* %33
%34 = getelementptr inbounds i32, i32* %32, i64 4
%35 = bitcast i32* %34 to <4 x i32>*
store <4 x i32> %16, <4 x i32>* %35
%36 = or i64 %25, 16
%37 = getelementptr inbounds i32, i32* %0, i64 %36
%38 = bitcast i32* %37 to <4 x i32>*
store <4 x i32> %14, <4 x i32>* %38
%39 = getelementptr inbounds i32, i32* %37, i64 4
%40 = bitcast i32* %39 to <4 x i32>*
store <4 x i32> %16, <4 x i32>* %40
%41 = or i64 %25, 24
%42 = getelementptr inbounds i32, i32* %0, i64 %41
%43 = bitcast i32* %42 to <4 x i32>*
store <4 x i32> %14, <4 x i32>* %43
%44 = getelementptr inbounds i32, i32* %42, i64 4
%45 = bitcast i32* %44 to <4 x i32>*
store <4 x i32> %16, <4 x i32>* %45
%46 = or i64 %25, 32
%47 = getelementptr inbounds i32, i32* %0, i64 %46
%48 = bitcast i32* %47 to <4 x i32>*
store <4 x i32> %14, <4 x i32>* %48
%49 = getelementptr inbounds i32, i32* %47, i64 4
%50 = bitcast i32* %49 to <4 x i32>*
store <4 x i32> %16, <4 x i32>* %50
%51 = or i64 %25, 40
%52 = getelementptr inbounds i32, i32* %0, i64 %51
%53 = bitcast i32* %52 to <4 x i32>*
store <4 x i32> %14, <4 x i32>* %53
%54 = getelementptr inbounds i32, i32* %52, i64 4
%55 = bitcast i32* %54 to <4 x i32>*
store <4 x i32> %16, <4 x i32>* %55
%56 = or i64 %25, 48
%57 = getelementptr inbounds i32, i32* %0, i64 %56
%58 = bitcast i32* %57 to <4 x i32>*
store <4 x i32> %14, <4 x i32>* %58
%59 = getelementptr inbounds i32, i32* %57, i64 4
%60 = bitcast i32* %59 to <4 x i32>*
store <4 x i32> %16, <4 x i32>* %60
%61 = or i64 %25, 56
%62 = getelementptr inbounds i32, i32* %0, i64 %61
%63 = bitcast i32* %62 to <4 x i32>*
store <4 x i32> %14, <4 x i32>* %63
%64 = getelementptr inbounds i32, i32* %62, i64 4
%65 = bitcast i32* %64 to <4 x i32>*
store <4 x i32> %16, <4 x i32>* %65
%66 = add nuw i64 %25, 64
%67 = add nuw i64 %26, 8
%68 = icmp eq i64 %67, %23
br i1 %68, label %69, label %24
69: ; preds = %24, %11
%70 = phi i64 [ 0, %11 ], [ %66, %24 ]
%71 = icmp eq i64 %20, 0
br i1 %71, label %82, label %72
72: ; preds = %69, %72
%73 = phi i64 [ %79, %72 ], [ %70, %69 ]
%74 = phi i64 [ %80, %72 ], [ 0, %69 ]
%75 = getelementptr inbounds i32, i32* %0, i64 %73
%76 = bitcast i32* %75 to <4 x i32>*
store <4 x i32> %14, <4 x i32>* %76
%77 = getelementptr inbounds i32, i32* %75, i64 4
%78 = bitcast i32* %77 to <4 x i32>*
store <4 x i32> %16, <4 x i32>* %78
%79 = add nuw i64 %73, 8
%80 = add i64 %74, 1
%81 = icmp eq i64 %80, %20
br i1 %81, label %82, label %72
82: ; preds = %72, %69
%83 = icmp eq i64 %12, %9
br i1 %83, label %256, label %84
84: ; preds = %8, %82
%85 = phi i64 [ 0, %8 ], [ %12, %82 ]
br label %86
86: ; preds = %84, %86
%87 = phi i64 [ %89, %86 ], [ %85, %84 ]
%88 = getelementptr inbounds i32, i32* %0, i64 %87
store i32 %1, i32* %88
%89 = add nuw nsw i64 %87, 1
%90 = icmp eq i64 %89, %9
br i1 %90, label %256, label %86
91: ; preds = %3
%92 = tail call i64 @strncmp(i8* %2, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i32 3)
%93 = icmp eq i64 %92, 0
br i1 %93, label %94, label %169
94: ; preds = %91
%95 = icmp sgt i32 %1, 0
br i1 %95, label %96, label %256
96: ; preds = %94
%97 = zext i32 %1 to i64
%98 = icmp ult i32 %1, 8
br i1 %98, label %161, label %99
99: ; preds = %96
%100 = and i64 %97, 4294967288
%101 = add nsw i64 %100, -8
%102 = lshr exact i64 %101, 3
%103 = add nuw nsw i64 %102, 1
%104 = and i64 %103, 3
%105 = icmp ult i64 %101, 24
br i1 %105, label %142, label %106
106: ; preds = %99
%107 = and i64 %103, 4611686018427387900
br label %108
108: ; preds = %108, %106
%109 = phi i64 [ 0, %106 ], [ %138, %108 ]
%110 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %106 ], [ %139, %108 ]
%111 = phi i64 [ 0, %106 ], [ %140, %108 ]
%112 = add <4 x i32> %110, <i32 4, i32 4, i32 4, i32 4>
%113 = getelementptr inbounds i32, i32* %0, i64 %109
%114 = bitcast i32* %113 to <4 x i32>*
store <4 x i32> %110, <4 x i32>* %114
%115 = getelementptr inbounds i32, i32* %113, i64 4
%116 = bitcast i32* %115 to <4 x i32>*
store <4 x i32> %112, <4 x i32>* %116
%117 = or i64 %109, 8
%118 = add <4 x i32> %110, <i32 8, i32 8, i32 8, i32 8>
%119 = add <4 x i32> %110, <i32 12, i32 12, i32 12, i32 12>
%120 = getelementptr inbounds i32, i32* %0, i64 %117
%121 = bitcast i32* %120 to <4 x i32>*
store <4 x i32> %118, <4 x i32>* %121
%122 = getelementptr inbounds i32, i32* %120, i64 4
%123 = bitcast i32* %122 to <4 x i32>*
store <4 x i32> %119, <4 x i32>* %123
%124 = or i64 %109, 16
%125 = add <4 x i32> %110, <i32 16, i32 16, i32 16, i32 16>
%126 = add <4 x i32> %110, <i32 20, i32 20, i32 20, i32 20>
%127 = getelementptr inbounds i32, i32* %0, i64 %124
%128 = bitcast i32* %127 to <4 x i32>*
store <4 x i32> %125, <4 x i32>* %128
%129 = getelementptr inbounds i32, i32* %127, i64 4
%130 = bitcast i32* %129 to <4 x i32>*
store <4 x i32> %126, <4 x i32>* %130
%131 = or i64 %109, 24
%132 = add <4 x i32> %110, <i32 24, i32 24, i32 24, i32 24>
%133 = add <4 x i32> %110, <i32 28, i32 28, i32 28, i32 28>
%134 = getelementptr inbounds i32, i32* %0, i64 %131
%135 = bitcast i32* %134 to <4 x i32>*
store <4 x i32> %132, <4 x i32>* %135
%136 = getelementptr inbounds i32, i32* %134, i64 4
%137 = bitcast i32* %136 to <4 x i32>*
store <4 x i32> %133, <4 x i32>* %137
%138 = add nuw i64 %109, 32
%139 = add <4 x i32> %110, <i32 32, i32 32, i32 32, i32 32>
%140 = add i64 %111, 4
%141 = icmp eq i64 %140, %107
br i1 %141, label %142, label %108
142: ; preds = %108, %99
%143 = phi i64 [ 0, %99 ], [ %138, %108 ]
%144 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %99 ], [ %139, %108 ]
%145 = icmp eq i64 %104, 0
br i1 %145, label %159, label %146
146: ; preds = %142, %146
%147 = phi i64 [ %155, %146 ], [ %143, %142 ]
%148 = phi <4 x i32> [ %156, %146 ], [ %144, %142 ]
%149 = phi i64 [ %157, %146 ], [ 0, %142 ]
%150 = add <4 x i32> %148, <i32 4, i32 4, i32 4, i32 4>
%151 = getelementptr inbounds i32, i32* %0, i64 %147
%152 = bitcast i32* %151 to <4 x i32>*
store <4 x i32> %148, <4 x i32>* %152
%153 = getelementptr inbounds i32, i32* %151, i64 4
%154 = bitcast i32* %153 to <4 x i32>*
store <4 x i32> %150, <4 x i32>* %154
%155 = add nuw i64 %147, 8
%156 = add <4 x i32> %148, <i32 8, i32 8, i32 8, i32 8>
%157 = add i64 %149, 1
%158 = icmp eq i64 %157, %104
br i1 %158, label %159, label %146
159: ; preds = %146, %142
%160 = icmp eq i64 %100, %97
br i1 %160, label %256, label %161
161: ; preds = %96, %159
%162 = phi i64 [ 0, %96 ], [ %100, %159 ]
br label %163
163: ; preds = %161, %163
%164 = phi i64 [ %167, %163 ], [ %162, %161 ]
%165 = getelementptr inbounds i32, i32* %0, i64 %164
%166 = trunc i64 %164 to i32
store i32 %166, i32* %165
%167 = add nuw nsw i64 %164, 1
%168 = icmp eq i64 %167, %97
br i1 %168, label %256, label %163
169: ; preds = %91
%170 = tail call i64 @strncmp(i8* %2, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i32 4)
%171 = icmp eq i64 %170, 0
br i1 %171, label %172, label %240
172: ; preds = %169
%173 = icmp sgt i32 %1, 0
br i1 %173, label %174, label %256
174: ; preds = %172
%175 = zext i32 %1 to i64
%176 = icmp ult i32 %1, 8
br i1 %176, label %230, label %177
177: ; preds = %174
%178 = and i64 %175, 4294967288
%179 = insertelement <4 x i32> poison, i32 %1, i64 0
%180 = shufflevector <4 x i32> %179, <4 x i32> poison, <4 x i32> zeroinitializer
%181 = insertelement <4 x i32> poison, i32 %1, i64 0
%182 = shufflevector <4 x i32> %181, <4 x i32> poison, <4 x i32> zeroinitializer
%183 = add nsw i64 %178, -8
%184 = lshr exact i64 %183, 3
%185 = add nuw nsw i64 %184, 1
%186 = and i64 %185, 1
%187 = icmp eq i64 %183, 0
br i1 %187, label %215, label %188
188: ; preds = %177
%189 = and i64 %185, 4611686018427387902
br label %190
190: ; preds = %190, %188
%191 = phi i64 [ 0, %188 ], [ %211, %190 ]
%192 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %188 ], [ %212, %190 ]
%193 = phi i64 [ 0, %188 ], [ %213, %190 ]
%194 = xor <4 x i32> %192, <i32 -1, i32 -1, i32 -1, i32 -1>
%195 = sub <4 x i32> <i32 -5, i32 -5, i32 -5, i32 -5>, %192
%196 = add <4 x i32> %180, %194
%197 = add <4 x i32> %195, %182
%198 = getelementptr inbounds i32, i32* %0, i64 %191
%199 = bitcast i32* %198 to <4 x i32>*
store <4 x i32> %196, <4 x i32>* %199
%200 = getelementptr inbounds i32, i32* %198, i64 4
%201 = bitcast i32* %200 to <4 x i32>*
store <4 x i32> %197, <4 x i32>* %201
%202 = or i64 %191, 8
%203 = sub <4 x i32> <i32 -9, i32 -9, i32 -9, i32 -9>, %192
%204 = sub <4 x i32> <i32 -13, i32 -13, i32 -13, i32 -13>, %192
%205 = add <4 x i32> %180, %203
%206 = add <4 x i32> %204, %182
%207 = getelementptr inbounds i32, i32* %0, i64 %202
%208 = bitcast i32* %207 to <4 x i32>*
store <4 x i32> %205, <4 x i32>* %208
%209 = getelementptr inbounds i32, i32* %207, i64 4
%210 = bitcast i32* %209 to <4 x i32>*
store <4 x i32> %206, <4 x i32>* %210
%211 = add nuw i64 %191, 16
%212 = add <4 x i32> %192, <i32 16, i32 16, i32 16, i32 16>
%213 = add i64 %193, 2
%214 = icmp eq i64 %213, %189
br i1 %214, label %215, label %190
215: ; preds = %190, %177
%216 = phi i64 [ 0, %177 ], [ %211, %190 ]
%217 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %177 ], [ %212, %190 ]
%218 = icmp eq i64 %186, 0
br i1 %218, label %228, label %219
219: ; preds = %215
%220 = xor <4 x i32> %217, <i32 -1, i32 -1, i32 -1, i32 -1>
%221 = sub <4 x i32> <i32 -5, i32 -5, i32 -5, i32 -5>, %217
%222 = add <4 x i32> %180, %220
%223 = add <4 x i32> %221, %182
%224 = getelementptr inbounds i32, i32* %0, i64 %216
%225 = bitcast i32* %224 to <4 x i32>*
store <4 x i32> %222, <4 x i32>* %225
%226 = getelementptr inbounds i32, i32* %224, i64 4
%227 = bitcast i32* %226 to <4 x i32>*
store <4 x i32> %223, <4 x i32>* %227
br label %228
228: ; preds = %215, %219
%229 = icmp eq i64 %178, %175
br i1 %229, label %256, label %230
230: ; preds = %174, %228
%231 = phi i64 [ 0, %174 ], [ %178, %228 ]
br label %232
232: ; preds = %230, %232
%233 = phi i64 [ %238, %232 ], [ %231, %230 ]
%234 = trunc i64 %233 to i32
%235 = xor i32 %234, -1
%236 = add i32 %235, %1
%237 = getelementptr inbounds i32, i32* %0, i64 %233
store i32 %236, i32* %237
%238 = add nuw nsw i64 %233, 1
%239 = icmp eq i64 %238, %175
br i1 %239, label %256, label %232
240: ; preds = %169
%241 = tail call i64 @strncmp(i8* %2, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i32 4)
%242 = icmp eq i64 %241, 0
br i1 %242, label %243, label %254
243: ; preds = %240
%244 = icmp sgt i32 %1, 0
br i1 %244, label %245, label %256
245: ; preds = %243
%246 = zext i32 %1 to i64
br label %247
247: ; preds = %245, %247
%248 = phi i64 [ 0, %245 ], [ %252, %247 ]
%249 = tail call i32 (...) @rand()
%250 = srem i32 %249, %1
%251 = getelementptr inbounds i32, i32* %0, i64 %248
store i32 %250, i32* %251
%252 = add nuw nsw i64 %248, 1
%253 = icmp eq i64 %252, %246
br i1 %253, label %256, label %247
254: ; preds = %240
%255 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([18 x i8], [18 x i8]* @str, i64 0, i64 0))
br label %256
256: ; preds = %247, %232, %163, %86, %228, %159, %82, %243, %172, %94, %6, %254
ret void
}