#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 unsigned int uint8_t;

/* Variables and functions */
int /*<<< orphan*/ free(unsigned int *);
scalar_t__ malloc(unsigned int);
double omp_get_wtime();
int /*<<< orphan*/ rand();
double kernels_if() {
  extern unsigned int datasize;
  unsigned int n = (int)(datasize / sizeof(uint8_t));
  uint8_t *a = NULL;
  unsigned int i = 0;
  double t1_start = 0;
  double t1_end = 0;
  double t2_start = 0;
  double t2_end = 0;
  a = (uint8_t *)malloc(n * sizeof(uint8_t));
  if (a == NULL) {
    return (-10000);
  }
  for (i = 0; i < n; i++) {
    a[i] = (uint8_t)rand();
  }
#pragma acc data copyin(a [0:n])
  {
    t1_start = omp_get_wtime();
#pragma acc kernels if (0)
    for (i = 0; i < n; i++) {
      a[i] = i * 31;
    }
    t1_end = omp_get_wtime();
  }
  t2_start = omp_get_wtime();
  for (i = 0; i < n; i++) {
    a[i] = i * 31;
  }
  t2_end = omp_get_wtime();
  free(a);
  return ((t1_end - t1_start) - (t2_end - t2_start));
}


x86 assembly (clang, -O0):
<kernels_if>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    0x2e99(%rip),%rax
mov    (%rax),%eax
shr    $0x2,%rax
mov    %eax,-0xc(%rbp)
movq   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x38(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0xc(%rbp),%eax
shl    $0x2,%rax
mov    %eax,%edi
call   1050 <malloc@plt>
mov    %rax,-0x18(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    11b6 <kernels_if+0x76>
movsd  0xe54(%rip),%xmm0
movsd  %xmm0,-0x8(%rbp)
jmp    129e <kernels_if+0x15e>
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jae    11ea <kernels_if+0xaa>
mov    $0x0,%al
call   1060 <rand@plt>
mov    %eax,%edx
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11bd <kernels_if+0x7d>
mov    $0x0,%al
call   1040 <omp_get_wtime@plt>
movsd  %xmm0,-0x28(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jae    1225 <kernels_if+0xe5>
imul   $0x1f,-0x1c(%rbp),%edx
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    11fd <kernels_if+0xbd>
mov    $0x0,%al
call   1040 <omp_get_wtime@plt>
movsd  %xmm0,-0x30(%rbp)
mov    $0x0,%al
call   1040 <omp_get_wtime@plt>
movsd  %xmm0,-0x38(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jae    126c <kernels_if+0x12c>
imul   $0x1f,-0x1c(%rbp),%edx
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
mov    %edx,(%rax,%rcx,4)
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1244 <kernels_if+0x104>
mov    $0x0,%al
call   1040 <omp_get_wtime@plt>
movsd  %xmm0,-0x40(%rbp)
mov    -0x18(%rbp),%rdi
call   1030 <free@plt>
movsd  -0x30(%rbp),%xmm0
subsd  -0x28(%rbp),%xmm0
movsd  -0x40(%rbp),%xmm1
subsd  -0x38(%rbp),%xmm1
subsd  %xmm1,%xmm0
movsd  %xmm0,-0x8(%rbp)
movsd  -0x8(%rbp),%xmm0
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kernels_if>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
sub    $0x20,%rsp
mov    0x2e95(%rip),%rax
mov    (%rax),%r15d
mov    %r15d,%edi
and    $0xfffffffc,%edi
call   1050 <malloc@plt>
test   %rax,%rax
je     1187 <kernels_if+0x47>
mov    %rax,%rbx
mov    %r15d,%r14d
shr    $0x2,%r14d
cmp    $0x3,%r15d
ja     1194 <kernels_if+0x54>
xor    %eax,%eax
call   1040 <omp_get_wtime@plt>
movq   %xmm0,(%rsp)
jmp    12cf <kernels_if+0x18f>
movsd  0xe71(%rip),%xmm0
jmp    142f <kernels_if+0x2ef>
cmp    $0x2,%r14d
mov    $0x1,%r12d
cmovae %r14d,%r12d
xor    %ebp,%ebp
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
xor    %eax,%eax
call   1060 <rand@plt>
mov    %eax,(%rbx,%rbp,4)
add    $0x1,%rbp
cmp    %rbp,%r12
jne    11b0 <kernels_if+0x70>
xor    %eax,%eax
call   1040 <omp_get_wtime@plt>
cmp    $0x4,%r15d
movq   %xmm0,(%rsp)
jb     12cf <kernels_if+0x18f>
cmp    $0x8,%r12d
jae    11e6 <kernels_if+0xa6>
xor    %eax,%eax
jmp    12ad <kernels_if+0x16d>
mov    %r12d,%eax
and    $0xfffffff8,%eax
lea    -0x8(%rax),%rdx
mov    %rdx,%rcx
shr    $0x3,%rcx
add    $0x1,%rcx
test   %rdx,%rdx
je     1451 <kernels_if+0x311>
mov    %rcx,%rsi
and    $0xfffffffffffffffe,%rsi
movdqa 0xe0d(%rip),%xmm0
xor    %edx,%edx
movdqa 0xe13(%rip),%xmm1
movdqa 0xe1b(%rip),%xmm2
movdqa 0xe23(%rip),%xmm3
nopl   (%rax)
movdqa %xmm0,%xmm4
pslld  $0x5,%xmm4
psubd  %xmm0,%xmm4
movdqu %xmm4,(%rbx,%rdx,4)
paddd  %xmm1,%xmm4
movdqu %xmm4,0x10(%rbx,%rdx,4)
movdqa %xmm0,%xmm4
paddd  %xmm2,%xmm4
movdqa %xmm4,%xmm5
pslld  $0x5,%xmm5
psubd  %xmm4,%xmm5
movdqu %xmm5,0x20(%rbx,%rdx,4)
paddd  %xmm1,%xmm5
movdqu %xmm5,0x30(%rbx,%rdx,4)
add    $0x10,%rdx
paddd  %xmm3,%xmm0
add    $0xfffffffffffffffe,%rsi
jne    1230 <kernels_if+0xf0>
movdqa %xmm0,%xmm1
pslld  $0x5,%xmm1
psubd  %xmm0,%xmm1
test   $0x1,%cl
je     12a8 <kernels_if+0x168>
movdqa 0xd97(%rip),%xmm0
paddd  %xmm1,%xmm0
movdqu %xmm1,(%rbx,%rdx,4)
movdqu %xmm0,0x10(%rbx,%rdx,4)
cmp    %r12,%rax
je     12cf <kernels_if+0x18f>
mov    %eax,%ecx
shl    $0x5,%ecx
sub    %eax,%ecx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %ecx,(%rbx,%rax,4)
add    $0x1,%rax
add    $0x1f,%ecx
cmp    %rax,%r12
jne    12c0 <kernels_if+0x180>
xor    %eax,%eax
call   1040 <omp_get_wtime@plt>
movq   %xmm0,0x18(%rsp)
xor    %eax,%eax
call   1040 <omp_get_wtime@plt>
movq   %xmm0,0x10(%rsp)
cmp    $0x4,%r15d
jb     13ff <kernels_if+0x2bf>
cmp    $0x2,%r14d
mov    $0x1,%eax
cmovae %r14d,%eax
cmp    $0x8,%eax
jae    130c <kernels_if+0x1cc>
xor    %ecx,%ecx
jmp    13dd <kernels_if+0x29d>
mov    %eax,%ecx
and    $0xfffffff8,%ecx
lea    -0x8(%rcx),%rsi
mov    %rsi,%rdx
shr    $0x3,%rdx
add    $0x1,%rdx
test   %rsi,%rsi
je     143c <kernels_if+0x2fc>
mov    %rdx,%rdi
and    $0xfffffffffffffffe,%rdi
movdqa 0xce8(%rip),%xmm0
xor    %esi,%esi
movdqa 0xcee(%rip),%xmm1
movdqa 0xcf6(%rip),%xmm2
movdqa 0xcfe(%rip),%xmm3
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm0,%xmm4
pslld  $0x5,%xmm4
psubd  %xmm0,%xmm4
movdqu %xmm4,(%rbx,%rsi,4)
paddd  %xmm1,%xmm4
movdqu %xmm4,0x10(%rbx,%rsi,4)
movdqa %xmm0,%xmm4
paddd  %xmm2,%xmm4
movdqa %xmm4,%xmm5
pslld  $0x5,%xmm5
psubd  %xmm4,%xmm5
movdqu %xmm5,0x20(%rbx,%rsi,4)
paddd  %xmm1,%xmm5
movdqu %xmm5,0x30(%rbx,%rsi,4)
add    $0x10,%rsi
paddd  %xmm3,%xmm0
add    $0xfffffffffffffffe,%rdi
jne    1360 <kernels_if+0x220>
movdqa %xmm0,%xmm1
pslld  $0x5,%xmm1
psubd  %xmm0,%xmm1
test   $0x1,%dl
je     13d8 <kernels_if+0x298>
movdqa 0xc67(%rip),%xmm0
paddd  %xmm1,%xmm0
movdqu %xmm1,(%rbx,%rsi,4)
movdqu %xmm0,0x10(%rbx,%rsi,4)
cmp    %rax,%rcx
je     13ff <kernels_if+0x2bf>
mov    %ecx,%edx
shl    $0x5,%edx
sub    %ecx,%edx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %edx,(%rbx,%rcx,4)
add    $0x1,%rcx
add    $0x1f,%edx
cmp    %rcx,%rax
jne    13f0 <kernels_if+0x2b0>
xor    %eax,%eax
call   1040 <omp_get_wtime@plt>
movq   %xmm0,0x8(%rsp)
mov    %rbx,%rdi
call   1030 <free@plt>
movsd  0x18(%rsp),%xmm0
subsd  (%rsp),%xmm0
movsd  0x8(%rsp),%xmm1
subsd  0x10(%rsp),%xmm1
subsd  %xmm1,%xmm0
add    $0x20,%rsp
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
movdqa 0xbcc(%rip),%xmm1
xor    %esi,%esi
test   $0x1,%dl
jne    13c1 <kernels_if+0x281>
jmp    13d8 <kernels_if+0x298>
movdqa 0xbb7(%rip),%xmm1
xor    %edx,%edx
test   $0x1,%cl
jne    1291 <kernels_if+0x151>
jmp    12a8 <kernels_if+0x168>

LLVM IR (-O0):
@datasize = external global i32
define double @kernels_if() {
%1 = alloca double
%2 = alloca i32
%3 = alloca i32*
%4 = alloca i32
%5 = alloca double
%6 = alloca double
%7 = alloca double
%8 = alloca double
%9 = load i32, i32* @datasize
%10 = zext i32 %9 to i64
%11 = udiv i64 %10, 4
%12 = trunc i64 %11 to i32
store i32 %12, i32* %2
store i32* null, i32** %3
store i32 0, i32* %4
store double 0.000000e+00, double* %5
store double 0.000000e+00, double* %6
store double 0.000000e+00, double* %7
store double 0.000000e+00, double* %8
%13 = load i32, i32* %2
%14 = zext i32 %13 to i64
%15 = mul i64 %14, 4
%16 = trunc i64 %15 to i32
%17 = call i64 @malloc(i32 %16)
%18 = inttoptr i64 %17 to i32*
store i32* %18, i32** %3
%19 = load i32*, i32** %3
%20 = icmp eq i32* %19, null
br i1 %20, label %21, label %22
21: ; preds = %0
store double -1.000000e+04, double* %1
br label %80
22: ; preds = %0
store i32 0, i32* %4
br label %23
23: ; preds = %33, %22
%24 = load i32, i32* %4
%25 = load i32, i32* %2
%26 = icmp ult i32 %24, %25
br i1 %26, label %27, label %36
27: ; preds = %23
%28 = call i32 (...) @rand()
%29 = load i32*, i32** %3
%30 = load i32, i32* %4
%31 = zext i32 %30 to i64
%32 = getelementptr inbounds i32, i32* %29, i64 %31
store i32 %28, i32* %32
br label %33
33: ; preds = %27
%34 = load i32, i32* %4
%35 = add i32 %34, 1
store i32 %35, i32* %4
br label %23
36: ; preds = %23
%37 = call double (...) @omp_get_wtime()
store double %37, double* %5
store i32 0, i32* %4
br label %38
38: ; preds = %49, %36
%39 = load i32, i32* %4
%40 = load i32, i32* %2
%41 = icmp ult i32 %39, %40
br i1 %41, label %42, label %52
42: ; preds = %38
%43 = load i32, i32* %4
%44 = mul i32 %43, 31
%45 = load i32*, i32** %3
%46 = load i32, i32* %4
%47 = zext i32 %46 to i64
%48 = getelementptr inbounds i32, i32* %45, i64 %47
store i32 %44, i32* %48
br label %49
49: ; preds = %42
%50 = load i32, i32* %4
%51 = add i32 %50, 1
store i32 %51, i32* %4
br label %38
52: ; preds = %38
%53 = call double (...) @omp_get_wtime()
store double %53, double* %6
%54 = call double (...) @omp_get_wtime()
store double %54, double* %7
store i32 0, i32* %4
br label %55
55: ; preds = %66, %52
%56 = load i32, i32* %4
%57 = load i32, i32* %2
%58 = icmp ult i32 %56, %57
br i1 %58, label %59, label %69
59: ; preds = %55
%60 = load i32, i32* %4
%61 = mul i32 %60, 31
%62 = load i32*, i32** %3
%63 = load i32, i32* %4
%64 = zext i32 %63 to i64
%65 = getelementptr inbounds i32, i32* %62, i64 %64
store i32 %61, i32* %65
br label %66
66: ; preds = %59
%67 = load i32, i32* %4
%68 = add i32 %67, 1
store i32 %68, i32* %4
br label %55
69: ; preds = %55
%70 = call double (...) @omp_get_wtime()
store double %70, double* %8
%71 = load i32*, i32** %3
%72 = call i32 @free(i32* %71)
%73 = load double, double* %6
%74 = load double, double* %5
%75 = fsub double %73, %74
%76 = load double, double* %8
%77 = load double, double* %7
%78 = fsub double %76, %77
%79 = fsub double %75, %78
store double %79, double* %1
br label %80
80: ; preds = %69, %21
%81 = load double, double* %1
ret double %81
}

LLVM IR (-O2):
@datasize = external global i32
define double @kernels_if() {
%1 = load i32, i32* @datasize
%2 = lshr i32 %1, 2
%3 = and i32 %1, -4
%4 = tail call i64 @malloc(i32 %3)
%5 = inttoptr i64 %4 to i32*
%6 = icmp eq i64 %4, 0
br i1 %6, label %152, label %7
7: ; preds = %0
%8 = icmp ult i32 %1, 4
br i1 %8, label %9, label %11
9: ; preds = %7
%10 = tail call double (...) @omp_get_wtime()
br label %82
11: ; preds = %7
%12 = call i32 @llvm.umax.i32(i32 %2, i32 1)
%13 = zext i32 %12 to i64
br label %14
14: ; preds = %11, %14
%15 = phi i64 [ 0, %11 ], [ %18, %14 ]
%16 = tail call i32 (...) @rand()
%17 = getelementptr inbounds i32, i32* %5, i64 %15
store i32 %16, i32* %17
%18 = add nuw nsw i64 %15, 1
%19 = icmp eq i64 %18, %13
br i1 %19, label %20, label %14
20: ; preds = %14
%21 = tail call double (...) @omp_get_wtime()
br i1 %8, label %82, label %22
22: ; preds = %20
%23 = call i32 @llvm.umax.i32(i32 %2, i32 1)
%24 = zext i32 %23 to i64
%25 = icmp ult i32 %12, 8
br i1 %25, label %73, label %26
26: ; preds = %22
%27 = and i64 %13, 1073741816
%28 = add nsw i64 %27, -8
%29 = lshr exact i64 %28, 3
%30 = add nuw nsw i64 %29, 1
%31 = and i64 %30, 1
%32 = icmp eq i64 %28, 0
br i1 %32, label %61, label %33
33: ; preds = %26
%34 = and i64 %30, 4611686018427387902
br label %35
35: ; preds = %35, %33
%36 = phi i64 [ 0, %33 ], [ %55, %35 ]
%37 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %33 ], [ %56, %35 ]
%38 = phi i64 [ 0, %33 ], [ %57, %35 ]
%39 = mul <4 x i32> %37, <i32 31, i32 31, i32 31, i32 31>
%40 = mul <4 x i32> %37, <i32 31, i32 31, i32 31, i32 31>
%41 = add <4 x i32> %40, <i32 124, i32 124, i32 124, i32 124>
%42 = getelementptr inbounds i32, i32* %5, i64 %36
%43 = bitcast i32* %42 to <4 x i32>*
store <4 x i32> %39, <4 x i32>* %43
%44 = getelementptr inbounds i32, i32* %42, i64 4
%45 = bitcast i32* %44 to <4 x i32>*
store <4 x i32> %41, <4 x i32>* %45
%46 = or i64 %36, 8
%47 = add <4 x i32> %37, <i32 8, i32 8, i32 8, i32 8>
%48 = mul <4 x i32> %47, <i32 31, i32 31, i32 31, i32 31>
%49 = mul <4 x i32> %47, <i32 31, i32 31, i32 31, i32 31>
%50 = add <4 x i32> %49, <i32 124, i32 124, i32 124, i32 124>
%51 = getelementptr inbounds i32, i32* %5, i64 %46
%52 = bitcast i32* %51 to <4 x i32>*
store <4 x i32> %48, <4 x i32>* %52
%53 = getelementptr inbounds i32, i32* %51, i64 4
%54 = bitcast i32* %53 to <4 x i32>*
store <4 x i32> %50, <4 x i32>* %54
%55 = add nuw i64 %36, 16
%56 = add <4 x i32> %37, <i32 16, i32 16, i32 16, i32 16>
%57 = add i64 %38, 2
%58 = icmp eq i64 %57, %34
br i1 %58, label %59, label %35
59: ; preds = %35
%60 = mul <4 x i32> %56, <i32 31, i32 31, i32 31, i32 31>
br label %61
61: ; preds = %59, %26
%62 = phi i64 [ 0, %26 ], [ %55, %59 ]
%63 = phi <4 x i32> [ <i32 0, i32 31, i32 62, i32 93>, %26 ], [ %60, %59 ]
%64 = icmp eq i64 %31, 0
br i1 %64, label %71, label %65
65: ; preds = %61
%66 = add <4 x i32> %63, <i32 124, i32 124, i32 124, i32 124>
%67 = getelementptr inbounds i32, i32* %5, i64 %62
%68 = bitcast i32* %67 to <4 x i32>*
store <4 x i32> %63, <4 x i32>* %68
%69 = getelementptr inbounds i32, i32* %67, i64 4
%70 = bitcast i32* %69 to <4 x i32>*
store <4 x i32> %66, <4 x i32>* %70
br label %71
71: ; preds = %61, %65
%72 = icmp eq i64 %27, %13
br i1 %72, label %82, label %73
73: ; preds = %22, %71
%74 = phi i64 [ 0, %22 ], [ %27, %71 ]
br label %75
75: ; preds = %73, %75
%76 = phi i64 [ %80, %75 ], [ %74, %73 ]
%77 = trunc i64 %76 to i32
%78 = mul i32 %77, 31
%79 = getelementptr inbounds i32, i32* %5, i64 %76
store i32 %78, i32* %79
%80 = add nuw nsw i64 %76, 1
%81 = icmp eq i64 %80, %24
br i1 %81, label %82, label %75
82: ; preds = %75, %71, %9, %20
%83 = phi double [ %10, %9 ], [ %21, %20 ], [ %21, %71 ], [ %21, %75 ]
%84 = tail call double (...) @omp_get_wtime()
%85 = tail call double (...) @omp_get_wtime()
br i1 %8, label %146, label %86
86: ; preds = %82
%87 = call i32 @llvm.umax.i32(i32 %2, i32 1)
%88 = zext i32 %87 to i64
%89 = icmp ult i32 %87, 8
br i1 %89, label %137, label %90
90: ; preds = %86
%91 = and i64 %88, 1073741816
%92 = add nsw i64 %91, -8
%93 = lshr exact i64 %92, 3
%94 = add nuw nsw i64 %93, 1
%95 = and i64 %94, 1
%96 = icmp eq i64 %92, 0
br i1 %96, label %125, label %97
97: ; preds = %90
%98 = and i64 %94, 4611686018427387902
br label %99
99: ; preds = %99, %97
%100 = phi i64 [ 0, %97 ], [ %119, %99 ]
%101 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %97 ], [ %120, %99 ]
%102 = phi i64 [ 0, %97 ], [ %121, %99 ]
%103 = mul <4 x i32> %101, <i32 31, i32 31, i32 31, i32 31>
%104 = mul <4 x i32> %101, <i32 31, i32 31, i32 31, i32 31>
%105 = add <4 x i32> %104, <i32 124, i32 124, i32 124, i32 124>
%106 = getelementptr inbounds i32, i32* %5, i64 %100
%107 = bitcast i32* %106 to <4 x i32>*
store <4 x i32> %103, <4 x i32>* %107
%108 = getelementptr inbounds i32, i32* %106, i64 4
%109 = bitcast i32* %108 to <4 x i32>*
store <4 x i32> %105, <4 x i32>* %109
%110 = or i64 %100, 8
%111 = add <4 x i32> %101, <i32 8, i32 8, i32 8, i32 8>
%112 = mul <4 x i32> %111, <i32 31, i32 31, i32 31, i32 31>
%113 = mul <4 x i32> %111, <i32 31, i32 31, i32 31, i32 31>
%114 = add <4 x i32> %113, <i32 124, i32 124, i32 124, i32 124>
%115 = getelementptr inbounds i32, i32* %5, i64 %110
%116 = bitcast i32* %115 to <4 x i32>*
store <4 x i32> %112, <4 x i32>* %116
%117 = getelementptr inbounds i32, i32* %115, i64 4
%118 = bitcast i32* %117 to <4 x i32>*
store <4 x i32> %114, <4 x i32>* %118
%119 = add nuw i64 %100, 16
%120 = add <4 x i32> %101, <i32 16, i32 16, i32 16, i32 16>
%121 = add i64 %102, 2
%122 = icmp eq i64 %121, %98
br i1 %122, label %123, label %99
123: ; preds = %99
%124 = mul <4 x i32> %120, <i32 31, i32 31, i32 31, i32 31>
br label %125
125: ; preds = %123, %90
%126 = phi i64 [ 0, %90 ], [ %119, %123 ]
%127 = phi <4 x i32> [ <i32 0, i32 31, i32 62, i32 93>, %90 ], [ %124, %123 ]
%128 = icmp eq i64 %95, 0
br i1 %128, label %135, label %129
129: ; preds = %125
%130 = add <4 x i32> %127, <i32 124, i32 124, i32 124, i32 124>
%131 = getelementptr inbounds i32, i32* %5, i64 %126
%132 = bitcast i32* %131 to <4 x i32>*
store <4 x i32> %127, <4 x i32>* %132
%133 = getelementptr inbounds i32, i32* %131, i64 4
%134 = bitcast i32* %133 to <4 x i32>*
store <4 x i32> %130, <4 x i32>* %134
br label %135
135: ; preds = %125, %129
%136 = icmp eq i64 %91, %88
br i1 %136, label %146, label %137
137: ; preds = %86, %135
%138 = phi i64 [ 0, %86 ], [ %91, %135 ]
br label %139
139: ; preds = %137, %139
%140 = phi i64 [ %144, %139 ], [ %138, %137 ]
%141 = trunc i64 %140 to i32
%142 = mul i32 %141, 31
%143 = getelementptr inbounds i32, i32* %5, i64 %140
store i32 %142, i32* %143
%144 = add nuw nsw i64 %140, 1
%145 = icmp eq i64 %144, %88
br i1 %145, label %146, label %139
146: ; preds = %139, %135, %82
%147 = tail call double (...) @omp_get_wtime()
%148 = tail call i32 @free(i32* %5)
%149 = fsub double %84, %83
%150 = fsub double %147, %85
%151 = fsub double %149, %150
br label %152
152: ; preds = %0, %146
%153 = phi double [ %151, %146 ], [ -1.000000e+04, %0 ]
ret double %153
}