#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*/ buscar_correlacion(float *, float *, int, int, int, int,
                                      int *, int *);
int /*<<< orphan*/ copiar_ventana(float *, float *, int, int, int, int);
int /*<<< orphan*/ free(float *);
float *laplaciano(float *, int, int);
scalar_t__ malloc(int);
int /*<<< orphan*/ normalizar(float *, int);
void aan_correlacion(float *a, float *b, int width, int height,
                     float *horizontal, float *vertical) {
  int i, j;
  float *area = (float *)malloc(sizeof(float) * 9 * 9);
  float *lap;
  for (i = 0; i < width * height; i++) {
    vertical[i] = 0.5;
    horizontal[i] = 0.5;
  }
  lap = laplaciano(a, width, height);
  for (i = 9 / 2; i < width - (9 / 2); i++) {
    for (j = 9 / 2; j < height - (9 / 2); j++) {
      int x = -1, y = -1;
      if (lap[width * j + i] < 0.5)
        continue;
      copiar_ventana(a, area, width, height, i, j);
      buscar_correlacion(area, b, width, height, i, j, &x, &y);
      if (x == -1 || y == -1)
        continue;
      vertical[j * width + i] = (float)x;
      horizontal[j * width + i] = (float)y;
    }
  }
  normalizar(vertical, width * height);
  normalizar(horizontal, width * height);
  free(lap);
  free(area);
}


x86 assembly (clang, -O0):
<aan_correlacion>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
mov    $0x144,%edi
call   1070 <malloc@plt>
mov    %rax,-0x38(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
imul   -0x18(%rbp),%ecx
cmp    %ecx,%eax
jge    11dd <aan_correlacion+0x7d>
mov    -0x28(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  0xe53(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movss  0xe3e(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1193 <aan_correlacion+0x33>
mov    -0x8(%rbp),%rdi
mov    -0x14(%rbp),%esi
mov    -0x18(%rbp),%edx
call   1040 <laplaciano@plt>
mov    %rax,-0x40(%rbp)
movl   $0x4,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    -0x14(%rbp),%ecx
sub    $0x4,%ecx
cmp    %ecx,%eax
jge    1316 <aan_correlacion+0x1b6>
movl   $0x4,-0x30(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x18(%rbp),%ecx
sub    $0x4,%ecx
cmp    %ecx,%eax
jge    1303 <aan_correlacion+0x1a3>
movl   $0xffffffff,-0x44(%rbp)
movl   $0xffffffff,-0x48(%rbp)
mov    -0x40(%rbp),%rax
mov    -0x14(%rbp),%ecx
imul   -0x30(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdb0(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    125f <aan_correlacion+0xff>
jmp    12f5 <aan_correlacion+0x195>
mov    -0x8(%rbp),%rdi
mov    -0x38(%rbp),%rsi
mov    -0x14(%rbp),%edx
mov    -0x18(%rbp),%ecx
mov    -0x2c(%rbp),%r8d
mov    -0x30(%rbp),%r9d
call   1050 <copiar_ventana@plt>
mov    -0x38(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x14(%rbp),%edx
mov    -0x18(%rbp),%ecx
mov    -0x2c(%rbp),%r8d
mov    -0x30(%rbp),%r9d
lea    -0x44(%rbp),%r10
lea    -0x48(%rbp),%rax
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
call   1080 <buscar_correlacion@plt>
cmpl   $0xffffffff,-0x44(%rbp)
je     12ba <aan_correlacion+0x15a>
cmpl   $0xffffffff,-0x48(%rbp)
jne    12bf <aan_correlacion+0x15f>
jmp    12f5 <aan_correlacion+0x195>
cvtsi2ssl -0x44(%rbp),%xmm0
mov    -0x28(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
cvtsi2ssl -0x48(%rbp),%xmm0
mov    -0x20(%rbp),%rax
mov    -0x30(%rbp),%ecx
imul   -0x14(%rbp),%ecx
add    -0x2c(%rbp),%ecx
movslq %ecx,%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    120f <aan_correlacion+0xaf>
jmp    1308 <aan_correlacion+0x1a8>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11f7 <aan_correlacion+0x97>
mov    -0x28(%rbp),%rdi
mov    -0x14(%rbp),%esi
imul   -0x18(%rbp),%esi
call   1060 <normalizar@plt>
mov    -0x20(%rbp),%rdi
mov    -0x14(%rbp),%esi
imul   -0x18(%rbp),%esi
call   1060 <normalizar@plt>
mov    -0x40(%rbp),%rdi
call   1030 <free@plt>
mov    -0x38(%rbp),%rdi
call   1030 <free@plt>
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<aan_correlacion>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x88,%rsp
mov    %r9,%r14
mov    %r8,%rbx
mov    %ecx,%ebp
mov    %edx,%r15d
mov    %rsi,0x78(%rsp)
mov    %rdi,0x50(%rsp)
mov    $0x144,%edi
call   1070 <malloc@plt>
mov    %rax,0x58(%rsp)
mov    %rbp,%rax
mov    %rbp,0x8(%rsp)
mov    %ebp,%r8d
mov    %r15,0x10(%rsp)
imul   %r15d,%r8d
test   %r8d,%r8d
jle    1354 <aan_correlacion+0x1f4>
mov    %r8d,%eax
cmp    $0x8,%r8d
jb     11d5 <aan_correlacion+0x75>
lea    (%rbx,%rax,4),%rcx
cmp    %r14,%rcx
jbe    1270 <aan_correlacion+0x110>
lea    (%r14,%rax,4),%rcx
cmp    %rbx,%rcx
jbe    1270 <aan_correlacion+0x110>
xor    %ecx,%ecx
mov    %rcx,%rdx
not    %rdx
add    %rax,%rdx
mov    %rax,%rsi
and    $0x3,%rsi
je     1209 <aan_correlacion+0xa9>
nopl   0x0(%rax)
movl   $0x3f000000,(%r14,%rcx,4)
3f
movl   $0x3f000000,(%rbx,%rcx,4)
add    $0x1,%rcx
add    $0xffffffffffffffff,%rsi
jne    11f0 <aan_correlacion+0x90>
cmp    $0x3,%rdx
jb     1354 <aan_correlacion+0x1f4>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movl   $0x3f000000,(%r14,%rcx,4)
3f
movl   $0x3f000000,(%rbx,%rcx,4)
movl   $0x3f000000,0x4(%r14,%rcx,4)
movl   $0x3f000000,0x4(%rbx,%rcx,4)
3f
movl   $0x3f000000,0x8(%r14,%rcx,4)
movl   $0x3f000000,0x8(%rbx,%rcx,4)
3f
movl   $0x3f000000,0xc(%r14,%rcx,4)
movl   $0x3f000000,0xc(%rbx,%rcx,4)
3f
add    $0x4,%rcx
cmp    %rcx,%rax
jne    1220 <aan_correlacion+0xc0>
jmp    1354 <aan_correlacion+0x1f4>
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    1293 <aan_correlacion+0x133>
xor    %edi,%edi
jmp    1300 <aan_correlacion+0x1a0>
and    $0xfffffffffffffffc,%rsi
xor    %edi,%edi
movaps 0xd60(%rip),%xmm0
movups %xmm0,(%r14,%rdi,4)
movups %xmm0,0x10(%r14,%rdi,4)
movups %xmm0,(%rbx,%rdi,4)
movups %xmm0,0x10(%rbx,%rdi,4)
movups %xmm0,0x20(%r14,%rdi,4)
movups %xmm0,0x30(%r14,%rdi,4)
movups %xmm0,0x20(%rbx,%rdi,4)
movups %xmm0,0x30(%rbx,%rdi,4)
movups %xmm0,0x40(%r14,%rdi,4)
movups %xmm0,0x50(%r14,%rdi,4)
movups %xmm0,0x40(%rbx,%rdi,4)
movups %xmm0,0x50(%rbx,%rdi,4)
movups %xmm0,0x60(%r14,%rdi,4)
movups %xmm0,0x70(%r14,%rdi,4)
movups %xmm0,0x60(%rbx,%rdi,4)
movups %xmm0,0x70(%rbx,%rdi,4)
add    $0x20,%rdi
add    $0xfffffffffffffffc,%rsi
jne    12a0 <aan_correlacion+0x140>
test   %rdx,%rdx
je     134b <aan_correlacion+0x1eb>
lea    (%rbx,%rdi,4),%rsi
add    $0x10,%rsi
lea    (%r14,%rdi,4),%rdi
add    $0x10,%rdi
shl    $0x5,%rdx
xor    %ebp,%ebp
movaps 0xcde(%rip),%xmm0
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movups %xmm0,-0x10(%rdi,%rbp,1)
movups %xmm0,(%rdi,%rbp,1)
movups %xmm0,-0x10(%rsi,%rbp,1)
movups %xmm0,(%rsi,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%rdx
jne    1330 <aan_correlacion+0x1d0>
cmp    %rax,%rcx
jne    11d7 <aan_correlacion+0x77>
mov    %r8d,0x24(%rsp)
mov    %r14,0x30(%rsp)
mov    %rbx,0x38(%rsp)
mov    0x50(%rsp),%rdi
mov    0x10(%rsp),%rbx
mov    %ebx,%esi
mov    0x8(%rsp),%rdx
call   1040 <laplaciano@plt>
mov    %rax,0x28(%rsp)
cmp    $0x9,%ebx
jl     1523 <aan_correlacion+0x3c3>
mov    0x10(%rsp),%rcx
lea    -0x4(%rcx),%eax
mov    %rax,0x60(%rsp)
mov    0x8(%rsp),%rax
lea    -0x4(%rax),%edx
mov    %ecx,%eax
lea    0x0(,%rax,4),%rsi
shl    $0x4,%rax
mov    0x28(%rsp),%rcx
lea    (%rcx,%rax,1),%rdi
add    $0x10,%rdi
mov    0x30(%rsp),%rcx
lea    0x10(%rcx,%rax,1),%rcx
mov    %rcx,0x48(%rsp)
mov    0x38(%rsp),%rcx
lea    0x10(%rcx,%rax,1),%rax
mov    %rax,0x40(%rsp)
mov    $0x4,%eax
mov    %rax,0x18(%rsp)
movss  0xc29(%rip),%xmm1
mov    %rsi,0x70(%rsp)
mov    %rdx,0x68(%rsp)
mov    0x58(%rsp),%r14
mov    0x10(%rsp),%r13
mov    0x8(%rsp),%r12
jmp    1439 <aan_correlacion+0x2d9>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
mov    0x18(%rsp),%rax
add    $0x1,%rax
add    $0x4,%rdi
addq   $0x4,0x48(%rsp)
addq   $0x4,0x40(%rsp)
mov    %rax,0x18(%rsp)
cmp    0x60(%rsp),%rax
je     1523 <aan_correlacion+0x3c3>
cmpl   $0x9,0x8(%rsp)
jl     1410 <aan_correlacion+0x2b0>
mov    $0x4,%ebp
xor    %ebx,%ebx
mov    %rdi,0x80(%rsp)
jmp    146c <aan_correlacion+0x30c>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rbp
add    %rsi,%rbx
cmp    %rbp,%rdx
je     1410 <aan_correlacion+0x2b0>
movl   $0xffffffff,0x4(%rsp)
ff
movl   $0xffffffff,(%rsp)
ucomiss (%rdi,%rbx,1),%xmm1
ja     1460 <aan_correlacion+0x300>
mov    0x50(%rsp),%rdi
mov    %r14,%rsi
mov    %r13d,%edx
mov    %r12d,%ecx
mov    0x18(%rsp),%r15
mov    %r15d,%r8d
mov    %ebp,%r9d
call   1050 <copiar_ventana@plt>
mov    %r14,%rdi
mov    0x78(%rsp),%rsi
mov    %r13d,%edx
mov    %r12d,%ecx
mov    %r15d,%r8d
mov    %ebp,%r9d
mov    %rsp,%rax
push   %rax
lea    0xc(%rsp),%rax
push   %rax
call   1080 <buscar_correlacion@plt>
movss  0xb46(%rip),%xmm1
mov    0x90(%rsp),%rdi
mov    0x80(%rsp),%rsi
mov    0x78(%rsp),%rdx
add    $0x10,%rsp
mov    0x4(%rsp),%eax
cmp    $0xffffffff,%eax
je     1460 <aan_correlacion+0x300>
mov    (%rsp),%ecx
cmp    $0xffffffff,%ecx
je     1460 <aan_correlacion+0x300>
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
mov    0x48(%rsp),%rax
movss  %xmm0,(%rax,%rbx,1)
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
mov    0x40(%rsp),%rax
movss  %xmm0,(%rax,%rbx,1)
jmp    1460 <aan_correlacion+0x300>
mov    0x30(%rsp),%rdi
mov    0x24(%rsp),%ebx
mov    %ebx,%esi
call   1060 <normalizar@plt>
mov    0x38(%rsp),%rdi
mov    %ebx,%esi
call   1060 <normalizar@plt>
mov    0x28(%rsp),%rdi
call   1030 <free@plt>
mov    0x58(%rsp),%rdi
call   1030 <free@plt>
add    $0x88,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @aan_correlacion(float* %0, float* %1, i32 %2, i32 %3, float* %4, float* %5) {
%7 = alloca float*
%8 = alloca float*
%9 = alloca i32
%10 = alloca i32
%11 = alloca float*
%12 = alloca float*
%13 = alloca i32
%14 = alloca i32
%15 = alloca float*
%16 = alloca float*
%17 = alloca i32
%18 = alloca i32
store float* %0, float** %7
store float* %1, float** %8
store i32 %2, i32* %9
store i32 %3, i32* %10
store float* %4, float** %11
store float* %5, float** %12
%19 = call i64 @malloc(i32 324)
%20 = inttoptr i64 %19 to float*
store float* %20, float** %15
store i32 0, i32* %13
br label %21
21: ; preds = %36, %6
%22 = load i32, i32* %13
%23 = load i32, i32* %9
%24 = load i32, i32* %10
%25 = mul nsw i32 %23, %24
%26 = icmp slt i32 %22, %25
br i1 %26, label %27, label %39
27: ; preds = %21
%28 = load float*, float** %12
%29 = load i32, i32* %13
%30 = sext i32 %29 to i64
%31 = getelementptr inbounds float, float* %28, i64 %30
store float 5.000000e-01, float* %31
%32 = load float*, float** %11
%33 = load i32, i32* %13
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds float, float* %32, i64 %34
store float 5.000000e-01, float* %35
br label %36
36: ; preds = %27
%37 = load i32, i32* %13
%38 = add nsw i32 %37, 1
store i32 %38, i32* %13
br label %21
39: ; preds = %21
%40 = load float*, float** %7
%41 = load i32, i32* %9
%42 = load i32, i32* %10
%43 = call float* @laplaciano(float* %40, i32 %41, i32 %42)
store float* %43, float** %16
store i32 4, i32* %13
br label %44
44: ; preds = %114, %39
%45 = load i32, i32* %13
%46 = load i32, i32* %9
%47 = sub nsw i32 %46, 4
%48 = icmp slt i32 %45, %47
br i1 %48, label %49, label %117
49: ; preds = %44
store i32 4, i32* %14
br label %50
50: ; preds = %110, %49
%51 = load i32, i32* %14
%52 = load i32, i32* %10
%53 = sub nsw i32 %52, 4
%54 = icmp slt i32 %51, %53
br i1 %54, label %55, label %113
55: ; preds = %50
store i32 -1, i32* %17
store i32 -1, i32* %18
%56 = load float*, float** %16
%57 = load i32, i32* %9
%58 = load i32, i32* %14
%59 = mul nsw i32 %57, %58
%60 = load i32, i32* %13
%61 = add nsw i32 %59, %60
%62 = sext i32 %61 to i64
%63 = getelementptr inbounds float, float* %56, i64 %62
%64 = load float, float* %63
%65 = fpext float %64 to double
%66 = fcmp olt double %65, 5.000000e-01
br i1 %66, label %67, label %68
67: ; preds = %55
br label %110
68: ; preds = %55
%69 = load float*, float** %7
%70 = load float*, float** %15
%71 = load i32, i32* %9
%72 = load i32, i32* %10
%73 = load i32, i32* %13
%74 = load i32, i32* %14
%75 = call i32 @copiar_ventana(float* %69, float* %70, i32 %71, i32 %72, i32 %73, i32 %74)
%76 = load float*, float** %15
%77 = load float*, float** %8
%78 = load i32, i32* %9
%79 = load i32, i32* %10
%80 = load i32, i32* %13
%81 = load i32, i32* %14
%82 = call i32 @buscar_correlacion(float* %76, float* %77, i32 %78, i32 %79, i32 %80, i32 %81, i32* %17, i32* %18)
%83 = load i32, i32* %17
%84 = icmp eq i32 %83, -1
br i1 %84, label %88, label %85
85: ; preds = %68
%86 = load i32, i32* %18
%87 = icmp eq i32 %86, -1
br i1 %87, label %88, label %89
88: ; preds = %85, %68
br label %110
89: ; preds = %85
%90 = load i32, i32* %17
%91 = sitofp i32 %90 to float
%92 = load float*, float** %12
%93 = load i32, i32* %14
%94 = load i32, i32* %9
%95 = mul nsw i32 %93, %94
%96 = load i32, i32* %13
%97 = add nsw i32 %95, %96
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds float, float* %92, i64 %98
store float %91, float* %99
%100 = load i32, i32* %18
%101 = sitofp i32 %100 to float
%102 = load float*, float** %11
%103 = load i32, i32* %14
%104 = load i32, i32* %9
%105 = mul nsw i32 %103, %104
%106 = load i32, i32* %13
%107 = add nsw i32 %105, %106
%108 = sext i32 %107 to i64
%109 = getelementptr inbounds float, float* %102, i64 %108
store float %101, float* %109
br label %110
110: ; preds = %89, %88, %67
%111 = load i32, i32* %14
%112 = add nsw i32 %111, 1
store i32 %112, i32* %14
br label %50
113: ; preds = %50
br label %114
114: ; preds = %113
%115 = load i32, i32* %13
%116 = add nsw i32 %115, 1
store i32 %116, i32* %13
br label %44
117: ; preds = %44
%118 = load float*, float** %12
%119 = load i32, i32* %9
%120 = load i32, i32* %10
%121 = mul nsw i32 %119, %120
%122 = call i32 @normalizar(float* %118, i32 %121)
%123 = load float*, float** %11
%124 = load i32, i32* %9
%125 = load i32, i32* %10
%126 = mul nsw i32 %124, %125
%127 = call i32 @normalizar(float* %123, i32 %126)
%128 = load float*, float** %16
%129 = call i32 @free(float* %128)
%130 = load float*, float** %15
%131 = call i32 @free(float* %130)
ret void
}

LLVM IR (-O2):
define void @aan_correlacion(float* %0, float* %1, i32 %2, i32 %3, float* %4, float* %5) {
%7 = alloca i32
%8 = alloca i32
%9 = tail call i64 @malloc(i32 324)
%10 = inttoptr i64 %9 to float*
%11 = mul i32 %3, %2
%12 = icmp sgt i32 %11, 0
br i1 %12, label %13, label %123
13: ; preds = %6
%14 = zext i32 %11 to i64
%15 = icmp ult i32 %11, 8
br i1 %15, label %91, label %16
16: ; preds = %13
%17 = getelementptr float, float* %5, i64 %14
%18 = getelementptr float, float* %4, i64 %14
%19 = icmp ugt float* %18, %5
%20 = icmp ugt float* %17, %4
%21 = and i1 %19, %20
br i1 %21, label %91, label %22
22: ; preds = %16
%23 = and i64 %14, 4294967288
%24 = add nsw i64 %23, -8
%25 = lshr exact i64 %24, 3
%26 = add nuw nsw i64 %25, 1
%27 = and i64 %26, 3
%28 = icmp ult i64 %24, 24
br i1 %28, label %72, label %29
29: ; preds = %22
%30 = and i64 %26, 4611686018427387900
br label %31
31: ; preds = %31, %29
%32 = phi i64 [ 0, %29 ], [ %69, %31 ]
%33 = phi i64 [ 0, %29 ], [ %70, %31 ]
%34 = getelementptr inbounds float, float* %5, i64 %32
%35 = bitcast float* %34 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %35
%36 = getelementptr inbounds float, float* %34, i64 4
%37 = bitcast float* %36 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %37
%38 = getelementptr inbounds float, float* %4, i64 %32
%39 = bitcast float* %38 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %39
%40 = getelementptr inbounds float, float* %38, i64 4
%41 = bitcast float* %40 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %41
%42 = or i64 %32, 8
%43 = getelementptr inbounds float, float* %5, i64 %42
%44 = bitcast float* %43 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %44
%45 = getelementptr inbounds float, float* %43, i64 4
%46 = bitcast float* %45 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %46
%47 = getelementptr inbounds float, float* %4, i64 %42
%48 = bitcast float* %47 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %48
%49 = getelementptr inbounds float, float* %47, i64 4
%50 = bitcast float* %49 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %50
%51 = or i64 %32, 16
%52 = getelementptr inbounds float, float* %5, i64 %51
%53 = bitcast float* %52 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %53
%54 = getelementptr inbounds float, float* %52, i64 4
%55 = bitcast float* %54 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %55
%56 = getelementptr inbounds float, float* %4, i64 %51
%57 = bitcast float* %56 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %57
%58 = getelementptr inbounds float, float* %56, i64 4
%59 = bitcast float* %58 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %59
%60 = or i64 %32, 24
%61 = getelementptr inbounds float, float* %5, i64 %60
%62 = bitcast float* %61 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %62
%63 = getelementptr inbounds float, float* %61, i64 4
%64 = bitcast float* %63 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %64
%65 = getelementptr inbounds float, float* %4, i64 %60
%66 = bitcast float* %65 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %66
%67 = getelementptr inbounds float, float* %65, i64 4
%68 = bitcast float* %67 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %68
%69 = add nuw i64 %32, 32
%70 = add i64 %33, 4
%71 = icmp eq i64 %70, %30
br i1 %71, label %72, label %31
72: ; preds = %31, %22
%73 = phi i64 [ 0, %22 ], [ %69, %31 ]
%74 = icmp eq i64 %27, 0
br i1 %74, label %89, label %75
75: ; preds = %72, %75
%76 = phi i64 [ %86, %75 ], [ %73, %72 ]
%77 = phi i64 [ %87, %75 ], [ 0, %72 ]
%78 = getelementptr inbounds float, float* %5, i64 %76
%79 = bitcast float* %78 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %79
%80 = getelementptr inbounds float, float* %78, i64 4
%81 = bitcast float* %80 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %81
%82 = getelementptr inbounds float, float* %4, i64 %76
%83 = bitcast float* %82 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %83
%84 = getelementptr inbounds float, float* %82, i64 4
%85 = bitcast float* %84 to <4 x float>*
store <4 x float> <float 5.000000e-01, float 5.000000e-01, float 5.000000e-01, float 5.000000e-01>, <4 x float>* %85
%86 = add nuw i64 %76, 8
%87 = add i64 %77, 1
%88 = icmp eq i64 %87, %27
br i1 %88, label %89, label %75
89: ; preds = %75, %72
%90 = icmp eq i64 %23, %14
br i1 %90, label %123, label %91
91: ; preds = %16, %13, %89
%92 = phi i64 [ 0, %16 ], [ 0, %13 ], [ %23, %89 ]
%93 = xor i64 %92, -1
%94 = add nsw i64 %93, %14
%95 = and i64 %14, 3
%96 = icmp eq i64 %95, 0
br i1 %96, label %105, label %97
97: ; preds = %91, %97
%98 = phi i64 [ %102, %97 ], [ %92, %91 ]
%99 = phi i64 [ %103, %97 ], [ 0, %91 ]
%100 = getelementptr inbounds float, float* %5, i64 %98
store float 5.000000e-01, float* %100
%101 = getelementptr inbounds float, float* %4, i64 %98
store float 5.000000e-01, float* %101
%102 = add nuw nsw i64 %98, 1
%103 = add i64 %99, 1
%104 = icmp eq i64 %103, %95
br i1 %104, label %105, label %97
105: ; preds = %97, %91
%106 = phi i64 [ %92, %91 ], [ %102, %97 ]
%107 = icmp ult i64 %94, 3
br i1 %107, label %123, label %108
108: ; preds = %105, %108
%109 = phi i64 [ %121, %108 ], [ %106, %105 ]
%110 = getelementptr inbounds float, float* %5, i64 %109
store float 5.000000e-01, float* %110
%111 = getelementptr inbounds float, float* %4, i64 %109
store float 5.000000e-01, float* %111
%112 = add nuw nsw i64 %109, 1
%113 = getelementptr inbounds float, float* %5, i64 %112
store float 5.000000e-01, float* %113
%114 = getelementptr inbounds float, float* %4, i64 %112
store float 5.000000e-01, float* %114
%115 = add nuw nsw i64 %109, 2
%116 = getelementptr inbounds float, float* %5, i64 %115
store float 5.000000e-01, float* %116
%117 = getelementptr inbounds float, float* %4, i64 %115
store float 5.000000e-01, float* %117
%118 = add nuw nsw i64 %109, 3
%119 = getelementptr inbounds float, float* %5, i64 %118
store float 5.000000e-01, float* %119
%120 = getelementptr inbounds float, float* %4, i64 %118
store float 5.000000e-01, float* %120
%121 = add nuw nsw i64 %109, 4
%122 = icmp eq i64 %121, %14
br i1 %122, label %123, label %108
123: ; preds = %105, %108, %89, %6
%124 = tail call float* @laplaciano(float* %0, i32 %2, i32 %3)
%125 = icmp sgt i32 %2, 8
br i1 %125, label %126, label %166
126: ; preds = %123
%127 = add nsw i32 %2, -4
%128 = add i32 %3, -4
%129 = icmp sgt i32 %3, 8
%130 = bitcast i32* %7 to i8*
%131 = bitcast i32* %8 to i8*
%132 = zext i32 %2 to i64
%133 = zext i32 %127 to i64
%134 = zext i32 %128 to i64
br label %135
135: ; preds = %126, %163
%136 = phi i64 [ 4, %126 ], [ %164, %163 ]
br i1 %129, label %137, label %163
137: ; preds = %135
%138 = trunc i64 %136 to i32
br label %139
139: ; preds = %137, %160
%140 = phi i64 [ 4, %137 ], [ %161, %160 ]
store i32 -1, i32* %7
store i32 -1, i32* %8
%141 = mul nsw i64 %140, %132
%142 = add nuw nsw i64 %141, %136
%143 = getelementptr inbounds float, float* %124, i64 %142
%144 = load float, float* %143
%145 = fcmp olt float %144, 5.000000e-01
br i1 %145, label %160, label %146
146: ; preds = %139
%147 = trunc i64 %140 to i32
%148 = call i32 @copiar_ventana(float* %0, float* %10, i32 %2, i32 %3, i32 %138, i32 %147)
%149 = call i32 @buscar_correlacion(float* %10, float* %1, i32 %2, i32 %3, i32 %138, i32 %147, i32* %7, i32* %8)
%150 = load i32, i32* %7
%151 = icmp eq i32 %150, -1
%152 = load i32, i32* %8
%153 = icmp eq i32 %152, -1
%154 = select i1 %151, i1 true, i1 %153
br i1 %154, label %160, label %155
155: ; preds = %146
%156 = sitofp i32 %150 to float
%157 = getelementptr inbounds float, float* %5, i64 %142
store float %156, float* %157
%158 = sitofp i32 %152 to float
%159 = getelementptr inbounds float, float* %4, i64 %142
store float %158, float* %159
br label %160
160: ; preds = %146, %139, %155
%161 = add nuw nsw i64 %140, 1
%162 = icmp eq i64 %161, %134
br i1 %162, label %163, label %139
163: ; preds = %160, %135
%164 = add nuw nsw i64 %136, 1
%165 = icmp eq i64 %164, %133
br i1 %165, label %166, label %135
166: ; preds = %163, %123
%167 = call i32 @normalizar(float* %5, i32 %11)
%168 = call i32 @normalizar(float* %4, i32 %11)
%169 = call i32 @free(float* %124)
%170 = call i32 @free(float* %10)
ret void
}