#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 */
float *malloc(int);
float *make_profile_new(float *prof, int *seq, float *gpoArray, float *gpeArray,
                        float *tgpeArray, int len, float **subm) {
  int i, j, c;
  int idx = 0;
  prof = malloc(sizeof(float) * (len + 2) * 64);
  prof += (64 * (len + 1));
  idx += (len + 1);
  for (i = 0; i < 64; i++) {
    prof[i] = 0;
  }
  prof[23 + 32] = -gpoArray[idx];
  prof[24 + 32] = -gpeArray[idx];
  prof[25 + 32] = -tgpeArray[idx];
  i = len;
  while (i--) {
    prof -= 64;
    idx -= 1;
    for (j = 0; j < 64; j++) {
      prof[j] = 0;
    }
    c = seq[i];
    prof[c] += 1;
    prof += 32;
    for (j = 23; j--;) {
      prof[j] = subm[c][j];
    }
    prof[23] = -gpoArray[idx];
    prof[24] = -gpeArray[idx];
    prof[25] = -tgpeArray[idx];
    prof -= 32;
  }
  prof -= 64;
  idx -= 1;
  for (i = 0; i < 64; i++) {
    prof[i] = 0;
  }
  prof[23 + 32] = -gpoArray[idx];
  prof[24 + 32] = -gpeArray[idx];
  prof[25 + 32] = -tgpeArray[idx];
  return prof;
}


x86 assembly (clang, -O0):
<make_profile_new>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9d,-0x2c(%rbp)
movl   $0x0,-0x3c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x2,%eax
cltq
shl    $0x2,%rax
shl    $0x6,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,-0x8(%rbp)
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
shl    $0x6,%ecx
mov    -0x8(%rbp),%rax
movslq %ecx,%rcx
shl    $0x2,%rcx
add    %rcx,%rax
mov    %rax,-0x8(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
movl   $0x0,-0x30(%rbp)
cmpl   $0x40,-0x30(%rbp)
jge    11ac <make_profile_new+0x9c>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1184 <make_profile_new+0x74>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0xdc(%rax)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0xe0(%rax)
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0xe4(%rax)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x30(%rbp)
cmp    $0x0,%eax
je     1370 <make_profile_new+0x260>
mov    -0x8(%rbp),%rax
add    $0xffffffffffffff00,%rax
mov    %rax,-0x8(%rbp)
mov    -0x3c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x0,-0x34(%rbp)
cmpl   $0x40,-0x34(%rbp)
jge    127e <make_profile_new+0x16e>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    1256 <make_profile_new+0x146>
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x38(%rbp),%rcx
movss  0xd64(%rip),%xmm0
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x8(%rbp),%rax
add    $0x80,%rax
mov    %rax,-0x8(%rbp)
movl   $0x17,-0x34(%rbp)
mov    -0x34(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x34(%rbp)
cmp    $0x0,%eax
je     12f6 <make_profile_new+0x1e6>
mov    0x10(%rbp),%rax
movslq -0x38(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
jmp    12bb <make_profile_new+0x1ab>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x5c(%rax)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x60(%rax)
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x64(%rax)
mov    -0x8(%rbp),%rax
add    $0xffffffffffffff80,%rax
mov    %rax,-0x8(%rbp)
jmp    1224 <make_profile_new+0x114>
mov    -0x8(%rbp),%rax
add    $0xffffffffffffff00,%rax
mov    %rax,-0x8(%rbp)
mov    -0x3c(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x3c(%rbp)
movl   $0x0,-0x30(%rbp)
cmpl   $0x40,-0x30(%rbp)
jge    13b6 <make_profile_new+0x2a6>
mov    -0x8(%rbp),%rax
movslq -0x30(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    138e <make_profile_new+0x27e>
mov    -0x18(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0xdc(%rax)
mov    -0x20(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0xe0(%rax)
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0xe4(%rax)
mov    -0x8(%rbp),%rax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<make_profile_new>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %r9d,%ebp
mov    %r8,%rbx
mov    %rcx,%r15
mov    %rdx,%r13
mov    %rsi,%r12
mov    %r9d,%edi
shl    $0x8,%edi
add    $0x200,%edi
call   1030 <malloc@plt>
mov    %ebp,%ecx
shl    $0x6,%ecx
add    $0x40,%ecx
movslq %ecx,%rcx
lea    (%rax,%rcx,4),%rdx
xorps  %xmm0,%xmm0
movups %xmm0,(%rax,%rcx,4)
movups %xmm0,0x10(%rax,%rcx,4)
movups %xmm0,0x20(%rax,%rcx,4)
movups %xmm0,0x30(%rax,%rcx,4)
movups %xmm0,0x40(%rax,%rcx,4)
movups %xmm0,0x50(%rax,%rcx,4)
movups %xmm0,0x60(%rax,%rcx,4)
movups %xmm0,0x70(%rax,%rcx,4)
movups %xmm0,0x80(%rax,%rcx,4)
movups %xmm0,0x90(%rax,%rcx,4)
movups %xmm0,0xa0(%rax,%rcx,4)
movups %xmm0,0xb0(%rax,%rcx,4)
movups %xmm0,0xc0(%rax,%rcx,4)
movups %xmm0,0xd0(%rax,%rcx,4)
movups %xmm0,0xe0(%rax,%rcx,4)
movups %xmm0,0xf0(%rax,%rcx,4)
movslq %ebp,%rdi
movss  0x4(%r13,%rdi,4),%xmm2
movaps 0xe3b(%rip),%xmm1
xorps  %xmm1,%xmm2
movss  %xmm2,0xdc(%rax,%rcx,4)
movss  0x4(%r15,%rdi,4),%xmm2
xorps  %xmm1,%xmm2
movss  %xmm2,0xe0(%rax,%rcx,4)
movss  0x4(%rbx,%rdi,4),%xmm2
xorps  %xmm1,%xmm2
movss  %xmm2,0xe4(%rax,%rcx,4)
test   %edi,%edi
je     1343 <make_profile_new+0x233>
mov    0x40(%rsp),%r8
mov    %edi,%r14d
mov    %rdi,%rcx
shl    $0x20,%rcx
lea    0x0(,%rdi,4),%r9
add    %r13,%r9
lea    (%r15,%rdi,4),%r11
mov    %rbx,(%rsp)
lea    (%rbx,%rdi,4),%rbx
lea    (%r12,%rdi,4),%rax
add    $0xfffffffffffffffc,%rax
shl    $0x2,%r14
xor    %edi,%edi
movss  0xdd6(%rip),%xmm2
movabs $0xffffffff00000000,%r10
ff ff ff
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    %r10,%rcx
movups %xmm0,-0x10(%rdx)
movups %xmm0,-0x20(%rdx)
movups %xmm0,-0x30(%rdx)
movups %xmm0,-0x40(%rdx)
movups %xmm0,-0x50(%rdx)
movups %xmm0,-0x60(%rdx)
movups %xmm0,-0x70(%rdx)
movups %xmm0,-0x80(%rdx)
movups %xmm0,-0x90(%rdx)
movups %xmm0,-0xa0(%rdx)
movups %xmm0,-0xb0(%rdx)
movups %xmm0,-0xc0(%rdx)
movups %xmm0,-0xd0(%rdx)
movups %xmm0,-0xe0(%rdx)
movups %xmm0,-0xf0(%rdx)
movups %xmm0,-0x100(%rdx)
movslq (%rax,%rdi,1),%rbp
movss  -0x100(%rdx,%rbp,4),%xmm3
ff ff
addss  %xmm2,%xmm3
movss  %xmm3,-0x100(%rdx,%rbp,4)
ff ff
mov    (%r8,%rbp,8),%rbp
movups 0x4c(%rbp),%xmm3
movups %xmm3,-0x34(%rdx)
movups 0x40(%rbp),%xmm3
movups %xmm3,-0x40(%rdx)
movups 0x0(%rbp),%xmm3
movups 0x10(%rbp),%xmm4
movups 0x20(%rbp),%xmm5
movups 0x30(%rbp),%xmm6
movups %xmm6,-0x50(%rdx)
movups %xmm5,-0x60(%rdx)
movups %xmm4,-0x70(%rdx)
movups %xmm3,-0x80(%rdx)
movss  (%r9,%rdi,1),%xmm3
xorps  %xmm1,%xmm3
movss  %xmm3,-0x24(%rdx)
movss  (%r11,%rdi,1),%xmm3
xorps  %xmm1,%xmm3
movss  %xmm3,-0x20(%rdx)
movss  (%rbx,%rdi,1),%xmm3
xorps  %xmm1,%xmm3
movss  %xmm3,-0x1c(%rdx)
add    $0xffffffffffffff00,%rdx
add    $0xfffffffffffffffc,%rdi
mov    %r14,%rsi
add    %rdi,%rsi
jne    1250 <make_profile_new+0x140>
sar    $0x20,%rcx
mov    (%rsp),%rbx
jmp    1345 <make_profile_new+0x235>
xor    %ecx,%ecx
lea    -0x100(%rdx),%rax
movups %xmm0,-0x10(%rdx)
movups %xmm0,-0x20(%rdx)
movups %xmm0,-0x30(%rdx)
movups %xmm0,-0x40(%rdx)
movups %xmm0,-0x50(%rdx)
movups %xmm0,-0x60(%rdx)
movups %xmm0,-0x70(%rdx)
movups %xmm0,-0x80(%rdx)
movups %xmm0,-0x90(%rdx)
movups %xmm0,-0xa0(%rdx)
movups %xmm0,-0xb0(%rdx)
movups %xmm0,-0xc0(%rdx)
movups %xmm0,-0xd0(%rdx)
movups %xmm0,-0xe0(%rdx)
movups %xmm0,-0xf0(%rdx)
movups %xmm0,-0x100(%rdx)
movss  0x0(%r13,%rcx,4),%xmm0
xorps  %xmm1,%xmm0
movss  %xmm0,-0x24(%rdx)
movss  (%r15,%rcx,4),%xmm0
xorps  %xmm1,%xmm0
movss  %xmm0,-0x20(%rdx)
movss  (%rbx,%rcx,4),%xmm0
xorps  %xmm1,%xmm0
movss  %xmm0,-0x1c(%rdx)
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define float* @make_profile_new(float* %0, i32* %1, float* %2, float* %3, float* %4, i32 %5, float** %6) {
%8 = alloca float*
%9 = alloca i32*
%10 = alloca float*
%11 = alloca float*
%12 = alloca float*
%13 = alloca i32
%14 = alloca float**
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
store float* %0, float** %8
store i32* %1, i32** %9
store float* %2, float** %10
store float* %3, float** %11
store float* %4, float** %12
store i32 %5, i32* %13
store float** %6, float*** %14
store i32 0, i32* %18
%19 = load i32, i32* %13
%20 = add nsw i32 %19, 2
%21 = sext i32 %20 to i64
%22 = mul i64 4, %21
%23 = mul i64 %22, 64
%24 = trunc i64 %23 to i32
%25 = call float* @malloc(i32 %24)
store float* %25, float** %8
%26 = load i32, i32* %13
%27 = add nsw i32 %26, 1
%28 = mul nsw i32 64, %27
%29 = load float*, float** %8
%30 = sext i32 %28 to i64
%31 = getelementptr inbounds float, float* %29, i64 %30
store float* %31, float** %8
%32 = load i32, i32* %13
%33 = add nsw i32 %32, 1
%34 = load i32, i32* %18
%35 = add nsw i32 %34, %33
store i32 %35, i32* %18
store i32 0, i32* %15
br label %36
36: ; preds = %44, %7
%37 = load i32, i32* %15
%38 = icmp slt i32 %37, 64
br i1 %38, label %39, label %47
39: ; preds = %36
%40 = load float*, float** %8
%41 = load i32, i32* %15
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds float, float* %40, i64 %42
store float 0.000000e+00, float* %43
br label %44
44: ; preds = %39
%45 = load i32, i32* %15
%46 = add nsw i32 %45, 1
store i32 %46, i32* %15
br label %36
47: ; preds = %36
%48 = load float*, float** %10
%49 = load i32, i32* %18
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds float, float* %48, i64 %50
%52 = load float, float* %51
%53 = fneg float %52
%54 = load float*, float** %8
%55 = getelementptr inbounds float, float* %54, i64 55
store float %53, float* %55
%56 = load float*, float** %11
%57 = load i32, i32* %18
%58 = sext i32 %57 to i64
%59 = getelementptr inbounds float, float* %56, i64 %58
%60 = load float, float* %59
%61 = fneg float %60
%62 = load float*, float** %8
%63 = getelementptr inbounds float, float* %62, i64 56
store float %61, float* %63
%64 = load float*, float** %12
%65 = load i32, i32* %18
%66 = sext i32 %65 to i64
%67 = getelementptr inbounds float, float* %64, i64 %66
%68 = load float, float* %67
%69 = fneg float %68
%70 = load float*, float** %8
%71 = getelementptr inbounds float, float* %70, i64 57
store float %69, float* %71
%72 = load i32, i32* %13
store i32 %72, i32* %15
br label %73
73: ; preds = %125, %47
%74 = load i32, i32* %15
%75 = add nsw i32 %74, -1
store i32 %75, i32* %15
%76 = icmp ne i32 %74, 0
br i1 %76, label %77, label %152
77: ; preds = %73
%78 = load float*, float** %8
%79 = getelementptr inbounds float, float* %78, i64 -64
store float* %79, float** %8
%80 = load i32, i32* %18
%81 = sub nsw i32 %80, 1
store i32 %81, i32* %18
store i32 0, i32* %16
br label %82
82: ; preds = %90, %77
%83 = load i32, i32* %16
%84 = icmp slt i32 %83, 64
br i1 %84, label %85, label %93
85: ; preds = %82
%86 = load float*, float** %8
%87 = load i32, i32* %16
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds float, float* %86, i64 %88
store float 0.000000e+00, float* %89
br label %90
90: ; preds = %85
%91 = load i32, i32* %16
%92 = add nsw i32 %91, 1
store i32 %92, i32* %16
br label %82
93: ; preds = %82
%94 = load i32*, i32** %9
%95 = load i32, i32* %15
%96 = sext i32 %95 to i64
%97 = getelementptr inbounds i32, i32* %94, i64 %96
%98 = load i32, i32* %97
store i32 %98, i32* %17
%99 = load float*, float** %8
%100 = load i32, i32* %17
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds float, float* %99, i64 %101
%103 = load float, float* %102
%104 = fadd float %103, 1.000000e+00
store float %104, float* %102
%105 = load float*, float** %8
%106 = getelementptr inbounds float, float* %105, i64 32
store float* %106, float** %8
store i32 23, i32* %16
br label %107
107: ; preds = %111, %93
%108 = load i32, i32* %16
%109 = add nsw i32 %108, -1
store i32 %109, i32* %16
%110 = icmp ne i32 %108, 0
br i1 %110, label %111, label %125
111: ; preds = %107
%112 = load float**, float*** %14
%113 = load i32, i32* %17
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds float*, float** %112, i64 %114
%116 = load float*, float** %115
%117 = load i32, i32* %16
%118 = sext i32 %117 to i64
%119 = getelementptr inbounds float, float* %116, i64 %118
%120 = load float, float* %119
%121 = load float*, float** %8
%122 = load i32, i32* %16
%123 = sext i32 %122 to i64
%124 = getelementptr inbounds float, float* %121, i64 %123
store float %120, float* %124
br label %107
125: ; preds = %107
%126 = load float*, float** %10
%127 = load i32, i32* %18
%128 = sext i32 %127 to i64
%129 = getelementptr inbounds float, float* %126, i64 %128
%130 = load float, float* %129
%131 = fneg float %130
%132 = load float*, float** %8
%133 = getelementptr inbounds float, float* %132, i64 23
store float %131, float* %133
%134 = load float*, float** %11
%135 = load i32, i32* %18
%136 = sext i32 %135 to i64
%137 = getelementptr inbounds float, float* %134, i64 %136
%138 = load float, float* %137
%139 = fneg float %138
%140 = load float*, float** %8
%141 = getelementptr inbounds float, float* %140, i64 24
store float %139, float* %141
%142 = load float*, float** %12
%143 = load i32, i32* %18
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds float, float* %142, i64 %144
%146 = load float, float* %145
%147 = fneg float %146
%148 = load float*, float** %8
%149 = getelementptr inbounds float, float* %148, i64 25
store float %147, float* %149
%150 = load float*, float** %8
%151 = getelementptr inbounds float, float* %150, i64 -32
store float* %151, float** %8
br label %73
152: ; preds = %73
%153 = load float*, float** %8
%154 = getelementptr inbounds float, float* %153, i64 -64
store float* %154, float** %8
%155 = load i32, i32* %18
%156 = sub nsw i32 %155, 1
store i32 %156, i32* %18
store i32 0, i32* %15
br label %157
157: ; preds = %165, %152
%158 = load i32, i32* %15
%159 = icmp slt i32 %158, 64
br i1 %159, label %160, label %168
160: ; preds = %157
%161 = load float*, float** %8
%162 = load i32, i32* %15
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds float, float* %161, i64 %163
store float 0.000000e+00, float* %164
br label %165
165: ; preds = %160
%166 = load i32, i32* %15
%167 = add nsw i32 %166, 1
store i32 %167, i32* %15
br label %157
168: ; preds = %157
%169 = load float*, float** %10
%170 = load i32, i32* %18
%171 = sext i32 %170 to i64
%172 = getelementptr inbounds float, float* %169, i64 %171
%173 = load float, float* %172
%174 = fneg float %173
%175 = load float*, float** %8
%176 = getelementptr inbounds float, float* %175, i64 55
store float %174, float* %176
%177 = load float*, float** %11
%178 = load i32, i32* %18
%179 = sext i32 %178 to i64
%180 = getelementptr inbounds float, float* %177, i64 %179
%181 = load float, float* %180
%182 = fneg float %181
%183 = load float*, float** %8
%184 = getelementptr inbounds float, float* %183, i64 56
store float %182, float* %184
%185 = load float*, float** %12
%186 = load i32, i32* %18
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds float, float* %185, i64 %187
%189 = load float, float* %188
%190 = fneg float %189
%191 = load float*, float** %8
%192 = getelementptr inbounds float, float* %191, i64 57
store float %190, float* %192
%193 = load float*, float** %8
ret float* %193
}

LLVM IR (-O2):
define noalias float* @make_profile_new(float* nocapture readnone %0, i32* nocapture %1, float* nocapture %2, float* nocapture %3, float* nocapture %4, i32 %5, float** nocapture %6) {
%8 = shl i32 %5, 8
%9 = add i32 %8, 512
%10 = tail call float* @malloc(i32 %9)
%11 = add nsw i32 %5, 1
%12 = shl nsw i32 %11, 6
%13 = sext i32 %12 to i64
%14 = getelementptr inbounds float, float* %10, i64 %13
%15 = bitcast float* %14 to i8*
%16 = sext i32 %11 to i64
%17 = getelementptr inbounds float, float* %2, i64 %16
%18 = load float, float* %17
%19 = fneg float %18
%20 = getelementptr inbounds float, float* %14, i64 55
store float %19, float* %20
%21 = getelementptr inbounds float, float* %3, i64 %16
%22 = load float, float* %21
%23 = fneg float %22
%24 = getelementptr inbounds float, float* %14, i64 56
store float %23, float* %24
%25 = getelementptr inbounds float, float* %4, i64 %16
%26 = load float, float* %25
%27 = fneg float %26
%28 = getelementptr inbounds float, float* %14, i64 57
store float %27, float* %28
%29 = icmp eq i32 %5, 0
br i1 %29, label %78, label %30
30: ; preds = %7
%31 = add nsw i64 %13, -64
%32 = add nsw i64 %13, -32
%33 = sext i32 %5 to i64
%34 = add nsw i64 %33, 1
%35 = zext i32 %5 to i64
br label %36
36: ; preds = %30, %36
%37 = phi i64 [ %34, %30 ], [ %59, %36 ]
%38 = phi i64 [ %33, %30 ], [ %49, %36 ]
%39 = phi i64 [ 0, %30 ], [ %72, %36 ]
%40 = phi float* [ %14, %30 ], [ %48, %36 ]
%41 = mul nsw i64 %39, -64
%42 = add nsw i64 %32, %41
%43 = getelementptr float, float* %10, i64 %42
%44 = bitcast float* %43 to i8*
%45 = add nsw i64 %31, %41
%46 = getelementptr float, float* %10, i64 %45
%47 = bitcast float* %46 to i8*
%48 = getelementptr inbounds float, float* %40, i64 -64
%49 = add nsw i64 %38, -1
%50 = getelementptr inbounds i32, i32* %1, i64 %49
%51 = load i32, i32* %50
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds float, float* %48, i64 %52
%54 = load float, float* %53
%55 = fadd float %54, 1.000000e+00
store float %55, float* %53
%56 = getelementptr inbounds float*, float** %6, i64 %52
%57 = bitcast float** %56 to i8**
%58 = load i8*, i8** %57
%59 = add nsw i64 %37, -1
%60 = getelementptr inbounds float, float* %2, i64 %59
%61 = load float, float* %60
%62 = fneg float %61
%63 = getelementptr inbounds float, float* %40, i64 -9
store float %62, float* %63
%64 = getelementptr inbounds float, float* %3, i64 %59
%65 = load float, float* %64
%66 = fneg float %65
%67 = getelementptr inbounds float, float* %40, i64 -8
store float %66, float* %67
%68 = getelementptr inbounds float, float* %4, i64 %59
%69 = load float, float* %68
%70 = fneg float %69
%71 = getelementptr inbounds float, float* %40, i64 -7
store float %70, float* %71
%72 = add nuw nsw i64 %39, 1
%73 = icmp eq i64 %72, %35
br i1 %73, label %74, label %36
74: ; preds = %36
%75 = shl i64 %37, 32
%76 = add i64 %75, -8589934592
%77 = ashr exact i64 %76, 32
br label %78
78: ; preds = %74, %7
%79 = phi float* [ %14, %7 ], [ %48, %74 ]
%80 = phi i64 [ 0, %7 ], [ %77, %74 ]
%81 = getelementptr inbounds float, float* %79, i64 -64
%82 = bitcast float* %81 to i8*
%83 = getelementptr inbounds float, float* %2, i64 %80
%84 = load float, float* %83
%85 = fneg float %84
%86 = getelementptr inbounds float, float* %79, i64 -9
store float %85, float* %86
%87 = getelementptr inbounds float, float* %3, i64 %80
%88 = load float, float* %87
%89 = fneg float %88
%90 = getelementptr inbounds float, float* %79, i64 -8
store float %89, float* %90
%91 = getelementptr inbounds float, float* %4, i64 %80
%92 = load float, float* %91
%93 = fneg float %92
%94 = getelementptr inbounds float, float* %79, i64 -7
store float %93, float* %94
ret float* %81
}