#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 int32_t;
typedef int int16_t;

/* Variables and functions */
int32_t gsm0610_max_cross_corr(const int16_t *wt, const int16_t *dp,
                               int16_t *index_out) {
  int32_t max;
  int32_t index;
  int32_t res;
  int i;
  max = 0;
  index = 40;
  for (i = 40; i <= 120; i++) {
    res =
        (wt[0] * dp[0 - i]) + (wt[1] * dp[1 - i]) + (wt[2] * dp[2 - i]) +
        (wt[3] * dp[3 - i]) + (wt[4] * dp[4 - i]) + (wt[5] * dp[5 - i]) +
        (wt[6] * dp[6 - i]) + (wt[7] * dp[7 - i]) + (wt[8] * dp[8 - i]) +
        (wt[9] * dp[9 - i]) + (wt[10] * dp[10 - i]) + (wt[11] * dp[11 - i]) +
        (wt[12] * dp[12 - i]) + (wt[13] * dp[13 - i]) + (wt[14] * dp[14 - i]) +
        (wt[15] * dp[15 - i]) + (wt[16] * dp[16 - i]) + (wt[17] * dp[17 - i]) +
        (wt[18] * dp[18 - i]) + (wt[19] * dp[19 - i]) + (wt[20] * dp[20 - i]) +
        (wt[21] * dp[21 - i]) + (wt[22] * dp[22 - i]) + (wt[23] * dp[23 - i]) +
        (wt[24] * dp[24 - i]) + (wt[25] * dp[25 - i]) + (wt[26] * dp[26 - i]) +
        (wt[27] * dp[27 - i]) + (wt[28] * dp[28 - i]) + (wt[29] * dp[29 - i]) +
        (wt[30] * dp[30 - i]) + (wt[31] * dp[31 - i]) + (wt[32] * dp[32 - i]) +
        (wt[33] * dp[33 - i]) + (wt[34] * dp[34 - i]) + (wt[35] * dp[35 - i]) +
        (wt[36] * dp[36 - i]) + (wt[37] * dp[37 - i]) + (wt[38] * dp[38 - i]) +
        (wt[39] * dp[39 - i]);
    if (res > max) {
      max = res;
      index = i;
    }
  }
  *index_out = index;
  return max;
}


x86 assembly (clang, -O0):
<gsm0610_max_cross_corr>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
movl   $0x28,-0x20(%rbp)
movl   $0x28,-0x28(%rbp)
cmpl   $0x78,-0x28(%rbp)
jg     15cf <gsm0610_max_cross_corr+0x4cf>
mov    -0x8(%rbp),%rax
mov    (%rax),%eax
mov    -0x10(%rbp),%rcx
xor    %edx,%edx
sub    -0x28(%rbp),%edx
movslq %edx,%rdx
imul   (%rcx,%rdx,4),%eax
mov    -0x8(%rbp),%rcx
mov    0x4(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x8(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x2,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0xc(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x3,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x10(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x4,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x14(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x5,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x18(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x6,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x1c(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x7,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x20(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x8,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x24(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x9,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x28(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0xa,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x2c(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0xb,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x30(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0xc,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x34(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0xd,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x38(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0xe,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x3c(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0xf,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x40(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x10,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x44(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x11,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x48(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x12,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x4c(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x13,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x50(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x14,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x54(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x15,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x58(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x16,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x5c(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x17,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x60(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x18,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x64(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x19,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x68(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1a,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x6c(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1b,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x70(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1c,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x74(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1d,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x78(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1e,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x7c(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x1f,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x80(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x20,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x84(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x21,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x88(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x22,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x8c(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x23,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x90(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x24,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x94(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x25,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x98(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x26,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    -0x8(%rbp),%rcx
mov    0x9c(%rcx),%ecx
mov    -0x10(%rbp),%rdx
mov    $0x27,%esi
sub    -0x28(%rbp),%esi
movslq %esi,%rsi
imul   (%rdx,%rsi,4),%ecx
add    %ecx,%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jle    15bc <gsm0610_max_cross_corr+0x4bc>
mov    -0x24(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x28(%rbp),%eax
mov    %eax,-0x20(%rbp)
jmp    15c1 <gsm0610_max_cross_corr+0x4c1>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1125 <gsm0610_max_cross_corr+0x25>
mov    -0x20(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x1c(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<gsm0610_max_cross_corr>:
movdqu 0x70(%rdi),%xmm12
movdqu 0x60(%rdi),%xmm0
movdqu 0x50(%rdi),%xmm13
movdqu 0x40(%rdi),%xmm2
movdqu (%rdi),%xmm4
movdqu 0x10(%rdi),%xmm14
movdqu 0x20(%rdi),%xmm5
movdqu 0x30(%rdi),%xmm6
movdqu 0x90(%rdi),%xmm1
movdqu 0x80(%rdi),%xmm3
xor    %ecx,%ecx
mov    $0x28,%r9d
movdqa %xmm5,-0x28(%rsp)
pshufd $0xf5,%xmm5,%xmm5
movdqa %xmm5,-0x48(%rsp)
movdqa %xmm0,-0x18(%rsp)
pshufd $0xf5,%xmm0,%xmm0
movdqa %xmm0,-0x58(%rsp)
movdqa %xmm4,-0x38(%rsp)
pshufd $0xf5,%xmm4,%xmm0
movdqa %xmm0,-0x68(%rsp)
movdqa %xmm2,%xmm15
pshufd $0xf5,%xmm2,%xmm0
movdqa %xmm0,-0x78(%rsp)
movdqa %xmm6,%xmm10
pshufd $0xf5,%xmm6,%xmm11
xor    %eax,%eax
mov    $0x28,%r8d
nopl   0x0(%rax,%rax,1)
movdqu -0x50(%rsi,%rcx,4),%xmm7
movdqu -0x30(%rsi,%rcx,4),%xmm8
movdqu -0x60(%rsi,%rcx,4),%xmm4
movdqu -0x40(%rsi,%rcx,4),%xmm6
movdqu -0x80(%rsi,%rcx,4),%xmm0
pshufd $0xf5,%xmm0,%xmm2
pmuludq -0x28(%rsp),%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq -0x48(%rsp),%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
pshufd $0xf5,%xmm6,%xmm2
pmuludq -0x18(%rsp),%xmm6
pshufd $0xe8,%xmm6,%xmm6
pmuludq -0x58(%rsp),%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm6
movdqu -0xa0(%rsi,%rcx,4),%xmm2
ff ff
paddd  %xmm0,%xmm6
pshufd $0xf5,%xmm2,%xmm0
pmuludq -0x38(%rsp),%xmm2
pshufd $0xe8,%xmm2,%xmm2
pmuludq -0x68(%rsp),%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm2
pshufd $0xf5,%xmm4,%xmm0
pmuludq %xmm15,%xmm4
pshufd $0xe8,%xmm4,%xmm9
pmuludq -0x78(%rsp),%xmm0
pshufd $0xe8,%xmm0,%xmm0
punpckldq %xmm0,%xmm9
movdqu -0x70(%rsi,%rcx,4),%xmm0
paddd  %xmm2,%xmm9
paddd  %xmm6,%xmm9
pshufd $0xf5,%xmm0,%xmm2
pmuludq %xmm10,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pmuludq %xmm11,%xmm2
pshufd $0xe8,%xmm2,%xmm2
punpckldq %xmm2,%xmm0
pshufd $0xf5,%xmm8,%xmm2
pshufd $0xf5,%xmm12,%xmm4
pmuludq %xmm2,%xmm4
movdqu -0x90(%rsi,%rcx,4),%xmm2
ff ff
pmuludq %xmm12,%xmm8
pshufd $0xe8,%xmm8,%xmm6
pshufd $0xe8,%xmm4,%xmm4
punpckldq %xmm4,%xmm6
paddd  %xmm0,%xmm6
pshufd $0xf5,%xmm2,%xmm0
pmuludq %xmm14,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pshufd $0xf5,%xmm14,%xmm4
pmuludq %xmm0,%xmm4
pshufd $0xe8,%xmm4,%xmm0
punpckldq %xmm0,%xmm2
pshufd $0xf5,%xmm7,%xmm0
pshufd $0xf5,%xmm13,%xmm5
pmuludq %xmm0,%xmm5
pmuludq %xmm13,%xmm7
pshufd $0xe8,%xmm7,%xmm4
pshufd $0xe8,%xmm5,%xmm0
punpckldq %xmm0,%xmm4
paddd  %xmm2,%xmm4
paddd  %xmm6,%xmm4
paddd  %xmm9,%xmm4
movdqu -0x20(%rsi,%rcx,4),%xmm0
movdqu -0x10(%rsi,%rcx,4),%xmm2
pshufd $0xf5,%xmm2,%xmm5
pmuludq %xmm1,%xmm2
pshufd $0xe8,%xmm2,%xmm2
pshufd $0xf5,%xmm1,%xmm6
pmuludq %xmm5,%xmm6
pshufd $0xe8,%xmm6,%xmm5
punpckldq %xmm5,%xmm2
pshufd $0xf5,%xmm0,%xmm5
pshufd $0xf5,%xmm3,%xmm6
pmuludq %xmm5,%xmm6
pmuludq %xmm3,%xmm0
pshufd $0xe8,%xmm0,%xmm0
pshufd $0xe8,%xmm6,%xmm5
punpckldq %xmm5,%xmm0
paddd  %xmm2,%xmm0
pshufd $0xee,%xmm4,%xmm2
paddd  %xmm4,%xmm2
pshufd $0x55,%xmm2,%xmm4
paddd  %xmm2,%xmm4
movd   %xmm4,%r10d
pshufd $0xee,%xmm0,%xmm2
paddd  %xmm0,%xmm2
pshufd $0x55,%xmm2,%xmm0
paddd  %xmm2,%xmm0
mov    %eax,%edi
movd   %xmm0,%eax
add    %r10d,%eax
cmp    %edi,%eax
cmovg  %r9d,%r8d
cmovle %edi,%eax
add    $0xffffffffffffffff,%rcx
add    $0x1,%r9d
cmp    $0xffffffffffffffaf,%rcx
jne    11a0 <gsm0610_max_cross_corr+0xa0>
mov    %r8d,(%rdx)
ret

LLVM IR (-O0):
define i32 @gsm0610_max_cross_corr(i32* %0, i32* %1, i32* %2) {
%4 = alloca i32*
%5 = alloca i32*
%6 = alloca i32*
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i32* %0, i32** %4
store i32* %1, i32** %5
store i32* %2, i32** %6
store i32 0, i32* %7
store i32 40, i32* %8
store i32 40, i32* %10
br label %11
11: ; preds = %461, %3
%12 = load i32, i32* %10
%13 = icmp sle i32 %12, 120
br i1 %13, label %14, label %464
14: ; preds = %11
%15 = load i32*, i32** %4
%16 = getelementptr inbounds i32, i32* %15, i64 0
%17 = load i32, i32* %16
%18 = load i32*, i32** %5
%19 = load i32, i32* %10
%20 = sub nsw i32 0, %19
%21 = sext i32 %20 to i64
%22 = getelementptr inbounds i32, i32* %18, i64 %21
%23 = load i32, i32* %22
%24 = mul nsw i32 %17, %23
%25 = load i32*, i32** %4
%26 = getelementptr inbounds i32, i32* %25, i64 1
%27 = load i32, i32* %26
%28 = load i32*, i32** %5
%29 = load i32, i32* %10
%30 = sub nsw i32 1, %29
%31 = sext i32 %30 to i64
%32 = getelementptr inbounds i32, i32* %28, i64 %31
%33 = load i32, i32* %32
%34 = mul nsw i32 %27, %33
%35 = add nsw i32 %24, %34
%36 = load i32*, i32** %4
%37 = getelementptr inbounds i32, i32* %36, i64 2
%38 = load i32, i32* %37
%39 = load i32*, i32** %5
%40 = load i32, i32* %10
%41 = sub nsw i32 2, %40
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds i32, i32* %39, i64 %42
%44 = load i32, i32* %43
%45 = mul nsw i32 %38, %44
%46 = add nsw i32 %35, %45
%47 = load i32*, i32** %4
%48 = getelementptr inbounds i32, i32* %47, i64 3
%49 = load i32, i32* %48
%50 = load i32*, i32** %5
%51 = load i32, i32* %10
%52 = sub nsw i32 3, %51
%53 = sext i32 %52 to i64
%54 = getelementptr inbounds i32, i32* %50, i64 %53
%55 = load i32, i32* %54
%56 = mul nsw i32 %49, %55
%57 = add nsw i32 %46, %56
%58 = load i32*, i32** %4
%59 = getelementptr inbounds i32, i32* %58, i64 4
%60 = load i32, i32* %59
%61 = load i32*, i32** %5
%62 = load i32, i32* %10
%63 = sub nsw i32 4, %62
%64 = sext i32 %63 to i64
%65 = getelementptr inbounds i32, i32* %61, i64 %64
%66 = load i32, i32* %65
%67 = mul nsw i32 %60, %66
%68 = add nsw i32 %57, %67
%69 = load i32*, i32** %4
%70 = getelementptr inbounds i32, i32* %69, i64 5
%71 = load i32, i32* %70
%72 = load i32*, i32** %5
%73 = load i32, i32* %10
%74 = sub nsw i32 5, %73
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds i32, i32* %72, i64 %75
%77 = load i32, i32* %76
%78 = mul nsw i32 %71, %77
%79 = add nsw i32 %68, %78
%80 = load i32*, i32** %4
%81 = getelementptr inbounds i32, i32* %80, i64 6
%82 = load i32, i32* %81
%83 = load i32*, i32** %5
%84 = load i32, i32* %10
%85 = sub nsw i32 6, %84
%86 = sext i32 %85 to i64
%87 = getelementptr inbounds i32, i32* %83, i64 %86
%88 = load i32, i32* %87
%89 = mul nsw i32 %82, %88
%90 = add nsw i32 %79, %89
%91 = load i32*, i32** %4
%92 = getelementptr inbounds i32, i32* %91, i64 7
%93 = load i32, i32* %92
%94 = load i32*, i32** %5
%95 = load i32, i32* %10
%96 = sub nsw i32 7, %95
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds i32, i32* %94, i64 %97
%99 = load i32, i32* %98
%100 = mul nsw i32 %93, %99
%101 = add nsw i32 %90, %100
%102 = load i32*, i32** %4
%103 = getelementptr inbounds i32, i32* %102, i64 8
%104 = load i32, i32* %103
%105 = load i32*, i32** %5
%106 = load i32, i32* %10
%107 = sub nsw i32 8, %106
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds i32, i32* %105, i64 %108
%110 = load i32, i32* %109
%111 = mul nsw i32 %104, %110
%112 = add nsw i32 %101, %111
%113 = load i32*, i32** %4
%114 = getelementptr inbounds i32, i32* %113, i64 9
%115 = load i32, i32* %114
%116 = load i32*, i32** %5
%117 = load i32, i32* %10
%118 = sub nsw i32 9, %117
%119 = sext i32 %118 to i64
%120 = getelementptr inbounds i32, i32* %116, i64 %119
%121 = load i32, i32* %120
%122 = mul nsw i32 %115, %121
%123 = add nsw i32 %112, %122
%124 = load i32*, i32** %4
%125 = getelementptr inbounds i32, i32* %124, i64 10
%126 = load i32, i32* %125
%127 = load i32*, i32** %5
%128 = load i32, i32* %10
%129 = sub nsw i32 10, %128
%130 = sext i32 %129 to i64
%131 = getelementptr inbounds i32, i32* %127, i64 %130
%132 = load i32, i32* %131
%133 = mul nsw i32 %126, %132
%134 = add nsw i32 %123, %133
%135 = load i32*, i32** %4
%136 = getelementptr inbounds i32, i32* %135, i64 11
%137 = load i32, i32* %136
%138 = load i32*, i32** %5
%139 = load i32, i32* %10
%140 = sub nsw i32 11, %139
%141 = sext i32 %140 to i64
%142 = getelementptr inbounds i32, i32* %138, i64 %141
%143 = load i32, i32* %142
%144 = mul nsw i32 %137, %143
%145 = add nsw i32 %134, %144
%146 = load i32*, i32** %4
%147 = getelementptr inbounds i32, i32* %146, i64 12
%148 = load i32, i32* %147
%149 = load i32*, i32** %5
%150 = load i32, i32* %10
%151 = sub nsw i32 12, %150
%152 = sext i32 %151 to i64
%153 = getelementptr inbounds i32, i32* %149, i64 %152
%154 = load i32, i32* %153
%155 = mul nsw i32 %148, %154
%156 = add nsw i32 %145, %155
%157 = load i32*, i32** %4
%158 = getelementptr inbounds i32, i32* %157, i64 13
%159 = load i32, i32* %158
%160 = load i32*, i32** %5
%161 = load i32, i32* %10
%162 = sub nsw i32 13, %161
%163 = sext i32 %162 to i64
%164 = getelementptr inbounds i32, i32* %160, i64 %163
%165 = load i32, i32* %164
%166 = mul nsw i32 %159, %165
%167 = add nsw i32 %156, %166
%168 = load i32*, i32** %4
%169 = getelementptr inbounds i32, i32* %168, i64 14
%170 = load i32, i32* %169
%171 = load i32*, i32** %5
%172 = load i32, i32* %10
%173 = sub nsw i32 14, %172
%174 = sext i32 %173 to i64
%175 = getelementptr inbounds i32, i32* %171, i64 %174
%176 = load i32, i32* %175
%177 = mul nsw i32 %170, %176
%178 = add nsw i32 %167, %177
%179 = load i32*, i32** %4
%180 = getelementptr inbounds i32, i32* %179, i64 15
%181 = load i32, i32* %180
%182 = load i32*, i32** %5
%183 = load i32, i32* %10
%184 = sub nsw i32 15, %183
%185 = sext i32 %184 to i64
%186 = getelementptr inbounds i32, i32* %182, i64 %185
%187 = load i32, i32* %186
%188 = mul nsw i32 %181, %187
%189 = add nsw i32 %178, %188
%190 = load i32*, i32** %4
%191 = getelementptr inbounds i32, i32* %190, i64 16
%192 = load i32, i32* %191
%193 = load i32*, i32** %5
%194 = load i32, i32* %10
%195 = sub nsw i32 16, %194
%196 = sext i32 %195 to i64
%197 = getelementptr inbounds i32, i32* %193, i64 %196
%198 = load i32, i32* %197
%199 = mul nsw i32 %192, %198
%200 = add nsw i32 %189, %199
%201 = load i32*, i32** %4
%202 = getelementptr inbounds i32, i32* %201, i64 17
%203 = load i32, i32* %202
%204 = load i32*, i32** %5
%205 = load i32, i32* %10
%206 = sub nsw i32 17, %205
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds i32, i32* %204, i64 %207
%209 = load i32, i32* %208
%210 = mul nsw i32 %203, %209
%211 = add nsw i32 %200, %210
%212 = load i32*, i32** %4
%213 = getelementptr inbounds i32, i32* %212, i64 18
%214 = load i32, i32* %213
%215 = load i32*, i32** %5
%216 = load i32, i32* %10
%217 = sub nsw i32 18, %216
%218 = sext i32 %217 to i64
%219 = getelementptr inbounds i32, i32* %215, i64 %218
%220 = load i32, i32* %219
%221 = mul nsw i32 %214, %220
%222 = add nsw i32 %211, %221
%223 = load i32*, i32** %4
%224 = getelementptr inbounds i32, i32* %223, i64 19
%225 = load i32, i32* %224
%226 = load i32*, i32** %5
%227 = load i32, i32* %10
%228 = sub nsw i32 19, %227
%229 = sext i32 %228 to i64
%230 = getelementptr inbounds i32, i32* %226, i64 %229
%231 = load i32, i32* %230
%232 = mul nsw i32 %225, %231
%233 = add nsw i32 %222, %232
%234 = load i32*, i32** %4
%235 = getelementptr inbounds i32, i32* %234, i64 20
%236 = load i32, i32* %235
%237 = load i32*, i32** %5
%238 = load i32, i32* %10
%239 = sub nsw i32 20, %238
%240 = sext i32 %239 to i64
%241 = getelementptr inbounds i32, i32* %237, i64 %240
%242 = load i32, i32* %241
%243 = mul nsw i32 %236, %242
%244 = add nsw i32 %233, %243
%245 = load i32*, i32** %4
%246 = getelementptr inbounds i32, i32* %245, i64 21
%247 = load i32, i32* %246
%248 = load i32*, i32** %5
%249 = load i32, i32* %10
%250 = sub nsw i32 21, %249
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds i32, i32* %248, i64 %251
%253 = load i32, i32* %252
%254 = mul nsw i32 %247, %253
%255 = add nsw i32 %244, %254
%256 = load i32*, i32** %4
%257 = getelementptr inbounds i32, i32* %256, i64 22
%258 = load i32, i32* %257
%259 = load i32*, i32** %5
%260 = load i32, i32* %10
%261 = sub nsw i32 22, %260
%262 = sext i32 %261 to i64
%263 = getelementptr inbounds i32, i32* %259, i64 %262
%264 = load i32, i32* %263
%265 = mul nsw i32 %258, %264
%266 = add nsw i32 %255, %265
%267 = load i32*, i32** %4
%268 = getelementptr inbounds i32, i32* %267, i64 23
%269 = load i32, i32* %268
%270 = load i32*, i32** %5
%271 = load i32, i32* %10
%272 = sub nsw i32 23, %271
%273 = sext i32 %272 to i64
%274 = getelementptr inbounds i32, i32* %270, i64 %273
%275 = load i32, i32* %274
%276 = mul nsw i32 %269, %275
%277 = add nsw i32 %266, %276
%278 = load i32*, i32** %4
%279 = getelementptr inbounds i32, i32* %278, i64 24
%280 = load i32, i32* %279
%281 = load i32*, i32** %5
%282 = load i32, i32* %10
%283 = sub nsw i32 24, %282
%284 = sext i32 %283 to i64
%285 = getelementptr inbounds i32, i32* %281, i64 %284
%286 = load i32, i32* %285
%287 = mul nsw i32 %280, %286
%288 = add nsw i32 %277, %287
%289 = load i32*, i32** %4
%290 = getelementptr inbounds i32, i32* %289, i64 25
%291 = load i32, i32* %290
%292 = load i32*, i32** %5
%293 = load i32, i32* %10
%294 = sub nsw i32 25, %293
%295 = sext i32 %294 to i64
%296 = getelementptr inbounds i32, i32* %292, i64 %295
%297 = load i32, i32* %296
%298 = mul nsw i32 %291, %297
%299 = add nsw i32 %288, %298
%300 = load i32*, i32** %4
%301 = getelementptr inbounds i32, i32* %300, i64 26
%302 = load i32, i32* %301
%303 = load i32*, i32** %5
%304 = load i32, i32* %10
%305 = sub nsw i32 26, %304
%306 = sext i32 %305 to i64
%307 = getelementptr inbounds i32, i32* %303, i64 %306
%308 = load i32, i32* %307
%309 = mul nsw i32 %302, %308
%310 = add nsw i32 %299, %309
%311 = load i32*, i32** %4
%312 = getelementptr inbounds i32, i32* %311, i64 27
%313 = load i32, i32* %312
%314 = load i32*, i32** %5
%315 = load i32, i32* %10
%316 = sub nsw i32 27, %315
%317 = sext i32 %316 to i64
%318 = getelementptr inbounds i32, i32* %314, i64 %317
%319 = load i32, i32* %318
%320 = mul nsw i32 %313, %319
%321 = add nsw i32 %310, %320
%322 = load i32*, i32** %4
%323 = getelementptr inbounds i32, i32* %322, i64 28
%324 = load i32, i32* %323
%325 = load i32*, i32** %5
%326 = load i32, i32* %10
%327 = sub nsw i32 28, %326
%328 = sext i32 %327 to i64
%329 = getelementptr inbounds i32, i32* %325, i64 %328
%330 = load i32, i32* %329
%331 = mul nsw i32 %324, %330
%332 = add nsw i32 %321, %331
%333 = load i32*, i32** %4
%334 = getelementptr inbounds i32, i32* %333, i64 29
%335 = load i32, i32* %334
%336 = load i32*, i32** %5
%337 = load i32, i32* %10
%338 = sub nsw i32 29, %337
%339 = sext i32 %338 to i64
%340 = getelementptr inbounds i32, i32* %336, i64 %339
%341 = load i32, i32* %340
%342 = mul nsw i32 %335, %341
%343 = add nsw i32 %332, %342
%344 = load i32*, i32** %4
%345 = getelementptr inbounds i32, i32* %344, i64 30
%346 = load i32, i32* %345
%347 = load i32*, i32** %5
%348 = load i32, i32* %10
%349 = sub nsw i32 30, %348
%350 = sext i32 %349 to i64
%351 = getelementptr inbounds i32, i32* %347, i64 %350
%352 = load i32, i32* %351
%353 = mul nsw i32 %346, %352
%354 = add nsw i32 %343, %353
%355 = load i32*, i32** %4
%356 = getelementptr inbounds i32, i32* %355, i64 31
%357 = load i32, i32* %356
%358 = load i32*, i32** %5
%359 = load i32, i32* %10
%360 = sub nsw i32 31, %359
%361 = sext i32 %360 to i64
%362 = getelementptr inbounds i32, i32* %358, i64 %361
%363 = load i32, i32* %362
%364 = mul nsw i32 %357, %363
%365 = add nsw i32 %354, %364
%366 = load i32*, i32** %4
%367 = getelementptr inbounds i32, i32* %366, i64 32
%368 = load i32, i32* %367
%369 = load i32*, i32** %5
%370 = load i32, i32* %10
%371 = sub nsw i32 32, %370
%372 = sext i32 %371 to i64
%373 = getelementptr inbounds i32, i32* %369, i64 %372
%374 = load i32, i32* %373
%375 = mul nsw i32 %368, %374
%376 = add nsw i32 %365, %375
%377 = load i32*, i32** %4
%378 = getelementptr inbounds i32, i32* %377, i64 33
%379 = load i32, i32* %378
%380 = load i32*, i32** %5
%381 = load i32, i32* %10
%382 = sub nsw i32 33, %381
%383 = sext i32 %382 to i64
%384 = getelementptr inbounds i32, i32* %380, i64 %383
%385 = load i32, i32* %384
%386 = mul nsw i32 %379, %385
%387 = add nsw i32 %376, %386
%388 = load i32*, i32** %4
%389 = getelementptr inbounds i32, i32* %388, i64 34
%390 = load i32, i32* %389
%391 = load i32*, i32** %5
%392 = load i32, i32* %10
%393 = sub nsw i32 34, %392
%394 = sext i32 %393 to i64
%395 = getelementptr inbounds i32, i32* %391, i64 %394
%396 = load i32, i32* %395
%397 = mul nsw i32 %390, %396
%398 = add nsw i32 %387, %397
%399 = load i32*, i32** %4
%400 = getelementptr inbounds i32, i32* %399, i64 35
%401 = load i32, i32* %400
%402 = load i32*, i32** %5
%403 = load i32, i32* %10
%404 = sub nsw i32 35, %403
%405 = sext i32 %404 to i64
%406 = getelementptr inbounds i32, i32* %402, i64 %405
%407 = load i32, i32* %406
%408 = mul nsw i32 %401, %407
%409 = add nsw i32 %398, %408
%410 = load i32*, i32** %4
%411 = getelementptr inbounds i32, i32* %410, i64 36
%412 = load i32, i32* %411
%413 = load i32*, i32** %5
%414 = load i32, i32* %10
%415 = sub nsw i32 36, %414
%416 = sext i32 %415 to i64
%417 = getelementptr inbounds i32, i32* %413, i64 %416
%418 = load i32, i32* %417
%419 = mul nsw i32 %412, %418
%420 = add nsw i32 %409, %419
%421 = load i32*, i32** %4
%422 = getelementptr inbounds i32, i32* %421, i64 37
%423 = load i32, i32* %422
%424 = load i32*, i32** %5
%425 = load i32, i32* %10
%426 = sub nsw i32 37, %425
%427 = sext i32 %426 to i64
%428 = getelementptr inbounds i32, i32* %424, i64 %427
%429 = load i32, i32* %428
%430 = mul nsw i32 %423, %429
%431 = add nsw i32 %420, %430
%432 = load i32*, i32** %4
%433 = getelementptr inbounds i32, i32* %432, i64 38
%434 = load i32, i32* %433
%435 = load i32*, i32** %5
%436 = load i32, i32* %10
%437 = sub nsw i32 38, %436
%438 = sext i32 %437 to i64
%439 = getelementptr inbounds i32, i32* %435, i64 %438
%440 = load i32, i32* %439
%441 = mul nsw i32 %434, %440
%442 = add nsw i32 %431, %441
%443 = load i32*, i32** %4
%444 = getelementptr inbounds i32, i32* %443, i64 39
%445 = load i32, i32* %444
%446 = load i32*, i32** %5
%447 = load i32, i32* %10
%448 = sub nsw i32 39, %447
%449 = sext i32 %448 to i64
%450 = getelementptr inbounds i32, i32* %446, i64 %449
%451 = load i32, i32* %450
%452 = mul nsw i32 %445, %451
%453 = add nsw i32 %442, %452
store i32 %453, i32* %9
%454 = load i32, i32* %9
%455 = load i32, i32* %7
%456 = icmp sgt i32 %454, %455
br i1 %456, label %457, label %460
457: ; preds = %14
%458 = load i32, i32* %9
store i32 %458, i32* %7
%459 = load i32, i32* %10
store i32 %459, i32* %8
br label %460
460: ; preds = %457, %14
br label %461
461: ; preds = %460
%462 = load i32, i32* %10
%463 = add nsw i32 %462, 1
store i32 %463, i32* %10
br label %11
464: ; preds = %11
%465 = load i32, i32* %8
%466 = load i32*, i32** %6
store i32 %465, i32* %466
%467 = load i32, i32* %7
ret i32 %467
}

LLVM IR (-O2):
define i32 @gsm0610_max_cross_corr(i32* %0, i32* %1, i32* nocapture writeonly %2) {
%4 = bitcast i32* %0 to <32 x i32>*
%5 = load <32 x i32>, <32 x i32>* %4
%6 = getelementptr inbounds i32, i32* %0, i64 32
%7 = bitcast i32* %6 to <8 x i32>*
%8 = load <8 x i32>, <8 x i32>* %7
br label %9
9: ; preds = %3, %9
%10 = phi i64 [ 40, %3 ], [ %30, %9 ]
%11 = phi i32 [ 0, %3 ], [ %29, %9 ]
%12 = phi i32 [ 40, %3 ], [ %28, %9 ]
%13 = sub nsw i64 0, %10
%14 = getelementptr inbounds i32, i32* %1, i64 %13
%15 = bitcast i32* %14 to <32 x i32>*
%16 = load <32 x i32>, <32 x i32>* %15
%17 = mul nsw <32 x i32> %16, %5
%18 = sub nsw i64 32, %10
%19 = getelementptr inbounds i32, i32* %1, i64 %18
%20 = bitcast i32* %19 to <8 x i32>*
%21 = load <8 x i32>, <8 x i32>* %20
%22 = mul nsw <8 x i32> %21, %8
%23 = call i32 @llvm.vector.reduce.add.v32i32(<32 x i32> %17)
%24 = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> %22)
%25 = add nsw i32 %23, %24
%26 = icmp sgt i32 %25, %11
%27 = trunc i64 %10 to i32
%28 = select i1 %26, i32 %27, i32 %12
%29 = select i1 %26, i32 %25, i32 %11
%30 = add nuw nsw i64 %10, 1
%31 = icmp eq i64 %30, 121
br i1 %31, label %32, label %9
32: ; preds = %9
store i32 %28, i32* %2
ret i32 %29
}