#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 *malloc(int);
void get_scale_tables(int **column_table, int **row_table, int in_x1, int in_y1,
                      int in_x2, int in_y2, int out_x1, int out_y1, int out_x2,
                      int out_y2) {
  int y_out, i;
  float w_in = in_x2 - in_x1;
  float h_in = in_y2 - in_y1;
  int w_out = out_x2 - out_x1;
  int h_out = out_y2 - out_y1;
  float hscale = w_in / w_out;
  float vscale = h_in / h_out;
  (*column_table) = malloc(sizeof(int) * (w_out + 1));
  (*row_table) = malloc(sizeof(int) * h_out);
  for (i = 0; i < w_out; i++) {
    (*column_table)[i] = (int)(hscale * i) + in_x1;
  }
  for (i = 0; i < h_out; i++) {
    (*row_table)[i] = (int)(vscale * i) + in_y1;
  }
}


x86 assembly (clang, -O0):
<get_scale_tables>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%eax
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    %ecx,-0x18(%rbp)
mov    %r8d,-0x1c(%rbp)
mov    %r9d,-0x20(%rbp)
mov    -0x1c(%rbp),%eax
sub    -0x14(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x2c(%rbp)
mov    -0x20(%rbp),%eax
sub    -0x18(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x30(%rbp)
mov    0x20(%rbp),%eax
sub    0x10(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    0x28(%rbp),%eax
sub    0x18(%rbp),%eax
mov    %eax,-0x38(%rbp)
movss  -0x2c(%rbp),%xmm0
cvtsi2ssl -0x34(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x30(%rbp),%xmm0
cvtsi2ssl -0x38(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x40(%rbp)
mov    -0x34(%rbp),%eax
add    $0x1,%eax
cltq
shl    $0x2,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,%rcx
mov    -0x8(%rbp),%rax
mov    %rcx,(%rax)
movslq -0x38(%rbp),%rax
shl    $0x2,%rax
mov    %eax,%edi
call   1030 <malloc@plt>
mov    %rax,%rcx
mov    -0x10(%rbp),%rax
mov    %rcx,(%rax)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    120a <get_scale_tables+0xfa>
movss  -0x3c(%rbp),%xmm0
cvtsi2ssl -0x28(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%edx
add    -0x14(%rbp),%edx
mov    -0x8(%rbp),%rax
mov    (%rax),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    11cd <get_scale_tables+0xbd>
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x38(%rbp),%eax
jge    124e <get_scale_tables+0x13e>
movss  -0x40(%rbp),%xmm0
cvtsi2ssl -0x28(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%edx
add    -0x18(%rbp),%edx
mov    -0x10(%rbp),%rax
mov    (%rax),%rax
movslq -0x28(%rbp),%rcx
mov    %edx,(%rax,%rcx,4)
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1211 <get_scale_tables+0x101>
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<get_scale_tables>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %r9d,0x4(%rsp)
mov    %r8d,%ebx
mov    %ecx,%r12d
mov    %edx,%ebp
mov    %rsi,0x8(%rsp)
mov    %rdi,%r15
mov    0x60(%rsp),%r14d
sub    0x50(%rsp),%r14d
mov    0x68(%rsp),%r13d
sub    0x58(%rsp),%r13d
lea    0x4(,%r14,4),%edi
call   1030 <malloc@plt>
mov    %rax,(%r15)
mov    %r13,0x10(%rsp)
lea    0x0(,%r13,4),%edi
call   1030 <malloc@plt>
mov    0x8(%rsp),%rcx
mov    %rax,(%rcx)
test   %r14d,%r14d
jle    12dd <get_scale_tables+0x1cd>
sub    %ebp,%ebx
cvtsi2ss %ebx,%xmm0
cvtsi2ss %r14d,%xmm1
divss  %xmm1,%xmm0
mov    (%r15),%rcx
mov    %r14d,%edx
cmp    $0x8,%r14d
jae    119c <get_scale_tables+0x8c>
xor    %esi,%esi
jmp    12c0 <get_scale_tables+0x1b0>
mov    %edx,%esi
and    $0xfffffff8,%esi
movaps %xmm0,%xmm2
shufps $0x0,%xmm0,%xmm2
movd   %ebp,%xmm1
pshufd $0x0,%xmm1,%xmm1
lea    -0x8(%rsi),%rdi
mov    %rdi,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rdi,%rdi
je     146d <get_scale_tables+0x35d>
mov    %r8,%rbx
and    $0xfffffffffffffffe,%rbx
movdqa 0xe28(%rip),%xmm4
xor    %edi,%edi
movdqa 0xe2d(%rip),%xmm8
movdqa 0xe34(%rip),%xmm9
movdqa 0xe3c(%rip),%xmm6
movdqa 0xe44(%rip),%xmm7
nopl   0x0(%rax)
movdqa %xmm4,%xmm3
paddd  %xmm8,%xmm3
cvtdq2ps %xmm4,%xmm5
cvtdq2ps %xmm3,%xmm3
mulps  %xmm2,%xmm5
mulps  %xmm2,%xmm3
cvttps2dq %xmm5,%xmm5
cvttps2dq %xmm3,%xmm3
paddd  %xmm1,%xmm5
paddd  %xmm1,%xmm3
movdqu %xmm5,(%rcx,%rdi,4)
movdqu %xmm3,0x10(%rcx,%rdi,4)
movdqa %xmm4,%xmm3
paddd  %xmm9,%xmm3
movdqa %xmm4,%xmm5
paddd  %xmm6,%xmm5
cvtdq2ps %xmm3,%xmm3
cvtdq2ps %xmm5,%xmm5
mulps  %xmm2,%xmm3
mulps  %xmm2,%xmm5
cvttps2dq %xmm3,%xmm3
cvttps2dq %xmm5,%xmm5
paddd  %xmm1,%xmm3
paddd  %xmm1,%xmm5
movdqu %xmm3,0x20(%rcx,%rdi,4)
movdqu %xmm5,0x30(%rcx,%rdi,4)
add    $0x10,%rdi
paddd  %xmm7,%xmm4
add    $0xfffffffffffffffe,%rbx
jne    1200 <get_scale_tables+0xf0>
test   $0x1,%r8b
je     12ac <get_scale_tables+0x19c>
cvtdq2ps %xmm4,%xmm3
paddd  0xd88(%rip),%xmm4
cvtdq2ps %xmm4,%xmm4
mulps  %xmm2,%xmm3
mulps  %xmm2,%xmm4
cvttps2dq %xmm3,%xmm2
cvttps2dq %xmm4,%xmm3
paddd  %xmm1,%xmm2
paddd  %xmm1,%xmm3
movdqu %xmm2,(%rcx,%rdi,4)
movdqu %xmm3,0x10(%rcx,%rdi,4)
cmp    %rdx,%rsi
je     12dd <get_scale_tables+0x1cd>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
mulss  %xmm0,%xmm1
cvttss2si %xmm1,%edi
add    %ebp,%edi
mov    %edi,(%rcx,%rsi,4)
add    $0x1,%rsi
cmp    %rsi,%rdx
jne    12c0 <get_scale_tables+0x1b0>
mov    0x10(%rsp),%rdx
test   %edx,%edx
jle    145e <get_scale_tables+0x34e>
mov    0x4(%rsp),%ecx
sub    %r12d,%ecx
xorps  %xmm0,%xmm0
cvtsi2ss %ecx,%xmm0
xorps  %xmm1,%xmm1
cvtsi2ss %edx,%xmm1
divss  %xmm1,%xmm0
mov    %edx,%ecx
cmp    $0x8,%edx
jae    1311 <get_scale_tables+0x201>
xor    %edx,%edx
jmp    1440 <get_scale_tables+0x330>
mov    %ecx,%edx
and    $0xfffffff8,%edx
movaps %xmm0,%xmm2
shufps $0x0,%xmm0,%xmm2
movd   %r12d,%xmm1
pshufd $0x0,%xmm1,%xmm1
lea    -0x8(%rdx),%rsi
mov    %rsi,%rbp
shr    $0x3,%rbp
add    $0x1,%rbp
test   %rsi,%rsi
je     1486 <get_scale_tables+0x376>
mov    %rbp,%rdi
and    $0xfffffffffffffffe,%rdi
movdqa 0xcb2(%rip),%xmm4
xor    %esi,%esi
movdqa 0xcb7(%rip),%xmm8
movdqa 0xcbe(%rip),%xmm9
movdqa 0xcc6(%rip),%xmm6
movdqa 0xcce(%rip),%xmm7
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movdqa %xmm4,%xmm3
paddd  %xmm8,%xmm3
cvtdq2ps %xmm4,%xmm5
cvtdq2ps %xmm3,%xmm3
mulps  %xmm2,%xmm5
mulps  %xmm2,%xmm3
cvttps2dq %xmm5,%xmm5
cvttps2dq %xmm3,%xmm3
paddd  %xmm1,%xmm5
paddd  %xmm1,%xmm3
movdqu %xmm5,(%rax,%rsi,4)
movdqu %xmm3,0x10(%rax,%rsi,4)
movdqa %xmm4,%xmm3
paddd  %xmm9,%xmm3
movdqa %xmm4,%xmm5
paddd  %xmm6,%xmm5
cvtdq2ps %xmm3,%xmm3
cvtdq2ps %xmm5,%xmm5
mulps  %xmm2,%xmm3
mulps  %xmm2,%xmm5
cvttps2dq %xmm3,%xmm3
cvttps2dq %xmm5,%xmm5
paddd  %xmm1,%xmm3
paddd  %xmm1,%xmm5
movdqu %xmm3,0x20(%rax,%rsi,4)
movdqu %xmm5,0x30(%rax,%rsi,4)
add    $0x10,%rsi
paddd  %xmm7,%xmm4
add    $0xfffffffffffffffe,%rdi
jne    1380 <get_scale_tables+0x270>
test   $0x1,%bpl
je     142c <get_scale_tables+0x31c>
cvtdq2ps %xmm4,%xmm3
paddd  0xc08(%rip),%xmm4
cvtdq2ps %xmm4,%xmm4
mulps  %xmm2,%xmm3
mulps  %xmm2,%xmm4
cvttps2dq %xmm3,%xmm2
cvttps2dq %xmm4,%xmm3
paddd  %xmm1,%xmm2
paddd  %xmm1,%xmm3
movdqu %xmm2,(%rax,%rsi,4)
movdqu %xmm3,0x10(%rax,%rsi,4)
cmp    %rcx,%rdx
je     145e <get_scale_tables+0x34e>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
xorps  %xmm1,%xmm1
cvtsi2ss %edx,%xmm1
mulss  %xmm0,%xmm1
cvttss2si %xmm1,%esi
add    %r12d,%esi
mov    %esi,(%rax,%rdx,4)
add    $0x1,%rdx
cmp    %rdx,%rcx
jne    1440 <get_scale_tables+0x330>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
movdqa 0xb8b(%rip),%xmm4
xor    %edi,%edi
test   $0x1,%r8b
jne    127d <get_scale_tables+0x16d>
jmp    12ac <get_scale_tables+0x19c>
movdqa 0xb72(%rip),%xmm4
xor    %esi,%esi
test   $0x1,%bpl
jne    13fd <get_scale_tables+0x2ed>
jmp    142c <get_scale_tables+0x31c>

LLVM IR (-O0):
define void @get_scale_tables(i32** %0, i32** %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9) {
%11 = alloca i32**
%12 = alloca i32**
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca float
%24 = alloca float
%25 = alloca i32
%26 = alloca i32
%27 = alloca float
%28 = alloca float
store i32** %0, i32*** %11
store i32** %1, i32*** %12
store i32 %2, i32* %13
store i32 %3, i32* %14
store i32 %4, i32* %15
store i32 %5, i32* %16
store i32 %6, i32* %17
store i32 %7, i32* %18
store i32 %8, i32* %19
store i32 %9, i32* %20
%29 = load i32, i32* %15
%30 = load i32, i32* %13
%31 = sub nsw i32 %29, %30
%32 = sitofp i32 %31 to float
store float %32, float* %23
%33 = load i32, i32* %16
%34 = load i32, i32* %14
%35 = sub nsw i32 %33, %34
%36 = sitofp i32 %35 to float
store float %36, float* %24
%37 = load i32, i32* %19
%38 = load i32, i32* %17
%39 = sub nsw i32 %37, %38
store i32 %39, i32* %25
%40 = load i32, i32* %20
%41 = load i32, i32* %18
%42 = sub nsw i32 %40, %41
store i32 %42, i32* %26
%43 = load float, float* %23
%44 = load i32, i32* %25
%45 = sitofp i32 %44 to float
%46 = fdiv float %43, %45
store float %46, float* %27
%47 = load float, float* %24
%48 = load i32, i32* %26
%49 = sitofp i32 %48 to float
%50 = fdiv float %47, %49
store float %50, float* %28
%51 = load i32, i32* %25
%52 = add nsw i32 %51, 1
%53 = sext i32 %52 to i64
%54 = mul i64 4, %53
%55 = trunc i64 %54 to i32
%56 = call i32* @malloc(i32 %55)
%57 = load i32**, i32*** %11
store i32* %56, i32** %57
%58 = load i32, i32* %26
%59 = sext i32 %58 to i64
%60 = mul i64 4, %59
%61 = trunc i64 %60 to i32
%62 = call i32* @malloc(i32 %61)
%63 = load i32**, i32*** %12
store i32* %62, i32** %63
store i32 0, i32* %22
br label %64
64: ; preds = %81, %10
%65 = load i32, i32* %22
%66 = load i32, i32* %25
%67 = icmp slt i32 %65, %66
br i1 %67, label %68, label %84
68: ; preds = %64
%69 = load float, float* %27
%70 = load i32, i32* %22
%71 = sitofp i32 %70 to float
%72 = fmul float %69, %71
%73 = fptosi float %72 to i32
%74 = load i32, i32* %13
%75 = add nsw i32 %73, %74
%76 = load i32**, i32*** %11
%77 = load i32*, i32** %76
%78 = load i32, i32* %22
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds i32, i32* %77, i64 %79
store i32 %75, i32* %80
br label %81
81: ; preds = %68
%82 = load i32, i32* %22
%83 = add nsw i32 %82, 1
store i32 %83, i32* %22
br label %64
84: ; preds = %64
store i32 0, i32* %22
br label %85
85: ; preds = %102, %84
%86 = load i32, i32* %22
%87 = load i32, i32* %26
%88 = icmp slt i32 %86, %87
br i1 %88, label %89, label %105
89: ; preds = %85
%90 = load float, float* %28
%91 = load i32, i32* %22
%92 = sitofp i32 %91 to float
%93 = fmul float %90, %92
%94 = fptosi float %93 to i32
%95 = load i32, i32* %14
%96 = add nsw i32 %94, %95
%97 = load i32**, i32*** %12
%98 = load i32*, i32** %97
%99 = load i32, i32* %22
%100 = sext i32 %99 to i64
%101 = getelementptr inbounds i32, i32* %98, i64 %100
store i32 %96, i32* %101
br label %102
102: ; preds = %89
%103 = load i32, i32* %22
%104 = add nsw i32 %103, 1
store i32 %104, i32* %22
br label %85
105: ; preds = %85
ret void
}

LLVM IR (-O2):
define void @get_scale_tables(i32** nocapture %0, i32** nocapture %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9) {
%11 = sub nsw i32 %4, %2
%12 = sitofp i32 %11 to float
%13 = sub nsw i32 %5, %3
%14 = sitofp i32 %13 to float
%15 = sub nsw i32 %8, %6
%16 = sub nsw i32 %9, %7
%17 = sitofp i32 %15 to float
%18 = fdiv float %12, %17
%19 = sitofp i32 %16 to float
%20 = fdiv float %14, %19
%21 = shl i32 %15, 2
%22 = add i32 %21, 4
%23 = tail call i32* @malloc(i32 %22)
store i32* %23, i32** %0
%24 = shl i32 %16, 2
%25 = tail call i32* @malloc(i32 %24)
store i32* %25, i32** %1
%26 = icmp sgt i32 %15, 0
br i1 %26, label %27, label %106
27: ; preds = %10
%28 = load i32*, i32** %0
%29 = zext i32 %15 to i64
%30 = icmp ult i32 %15, 8
br i1 %30, label %104, label %31
31: ; preds = %27
%32 = and i64 %29, 4294967288
%33 = insertelement <4 x float> poison, float %18, i64 0
%34 = shufflevector <4 x float> %33, <4 x float> poison, <4 x i32> zeroinitializer
%35 = insertelement <4 x float> poison, float %18, i64 0
%36 = shufflevector <4 x float> %35, <4 x float> poison, <4 x i32> zeroinitializer
%37 = insertelement <4 x i32> poison, i32 %2, i64 0
%38 = shufflevector <4 x i32> %37, <4 x i32> poison, <4 x i32> zeroinitializer
%39 = insertelement <4 x i32> poison, i32 %2, i64 0
%40 = shufflevector <4 x i32> %39, <4 x i32> poison, <4 x i32> zeroinitializer
%41 = add nsw i64 %32, -8
%42 = lshr exact i64 %41, 3
%43 = add nuw nsw i64 %42, 1
%44 = and i64 %43, 1
%45 = icmp eq i64 %41, 0
br i1 %45, label %84, label %46
46: ; preds = %31
%47 = and i64 %43, 4611686018427387902
br label %48
48: ; preds = %48, %46
%49 = phi i64 [ 0, %46 ], [ %80, %48 ]
%50 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %46 ], [ %81, %48 ]
%51 = phi i64 [ 0, %46 ], [ %82, %48 ]
%52 = add <4 x i32> %50, <i32 4, i32 4, i32 4, i32 4>
%53 = sitofp <4 x i32> %50 to <4 x float>
%54 = sitofp <4 x i32> %52 to <4 x float>
%55 = fmul <4 x float> %34, %53
%56 = fmul <4 x float> %36, %54
%57 = fptosi <4 x float> %55 to <4 x i32>
%58 = fptosi <4 x float> %56 to <4 x i32>
%59 = add nsw <4 x i32> %38, %57
%60 = add nsw <4 x i32> %40, %58
%61 = getelementptr inbounds i32, i32* %28, i64 %49
%62 = bitcast i32* %61 to <4 x i32>*
store <4 x i32> %59, <4 x i32>* %62
%63 = getelementptr inbounds i32, i32* %61, i64 4
%64 = bitcast i32* %63 to <4 x i32>*
store <4 x i32> %60, <4 x i32>* %64
%65 = or i64 %49, 8
%66 = add <4 x i32> %50, <i32 8, i32 8, i32 8, i32 8>
%67 = add <4 x i32> %50, <i32 12, i32 12, i32 12, i32 12>
%68 = sitofp <4 x i32> %66 to <4 x float>
%69 = sitofp <4 x i32> %67 to <4 x float>
%70 = fmul <4 x float> %34, %68
%71 = fmul <4 x float> %36, %69
%72 = fptosi <4 x float> %70 to <4 x i32>
%73 = fptosi <4 x float> %71 to <4 x i32>
%74 = add nsw <4 x i32> %38, %72
%75 = add nsw <4 x i32> %40, %73
%76 = getelementptr inbounds i32, i32* %28, i64 %65
%77 = bitcast i32* %76 to <4 x i32>*
store <4 x i32> %74, <4 x i32>* %77
%78 = getelementptr inbounds i32, i32* %76, i64 4
%79 = bitcast i32* %78 to <4 x i32>*
store <4 x i32> %75, <4 x i32>* %79
%80 = add nuw i64 %49, 16
%81 = add <4 x i32> %50, <i32 16, i32 16, i32 16, i32 16>
%82 = add i64 %51, 2
%83 = icmp eq i64 %82, %47
br i1 %83, label %84, label %48
84: ; preds = %48, %31
%85 = phi i64 [ 0, %31 ], [ %80, %48 ]
%86 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %31 ], [ %81, %48 ]
%87 = icmp eq i64 %44, 0
br i1 %87, label %102, label %88
88: ; preds = %84
%89 = add <4 x i32> %86, <i32 4, i32 4, i32 4, i32 4>
%90 = sitofp <4 x i32> %86 to <4 x float>
%91 = sitofp <4 x i32> %89 to <4 x float>
%92 = fmul <4 x float> %34, %90
%93 = fmul <4 x float> %36, %91
%94 = fptosi <4 x float> %92 to <4 x i32>
%95 = fptosi <4 x float> %93 to <4 x i32>
%96 = add nsw <4 x i32> %38, %94
%97 = add nsw <4 x i32> %40, %95
%98 = getelementptr inbounds i32, i32* %28, i64 %85
%99 = bitcast i32* %98 to <4 x i32>*
store <4 x i32> %96, <4 x i32>* %99
%100 = getelementptr inbounds i32, i32* %98, i64 4
%101 = bitcast i32* %100 to <4 x i32>*
store <4 x i32> %97, <4 x i32>* %101
br label %102
102: ; preds = %84, %88
%103 = icmp eq i64 %32, %29
br i1 %103, label %106, label %104
104: ; preds = %27, %102
%105 = phi i64 [ 0, %27 ], [ %32, %102 ]
br label %186
106: ; preds = %186, %102, %10
%107 = icmp sgt i32 %16, 0
br i1 %107, label %108, label %206
108: ; preds = %106
%109 = zext i32 %16 to i64
%110 = icmp ult i32 %16, 8
br i1 %110, label %184, label %111
111: ; preds = %108
%112 = and i64 %109, 4294967288
%113 = insertelement <4 x float> poison, float %20, i64 0
%114 = shufflevector <4 x float> %113, <4 x float> poison, <4 x i32> zeroinitializer
%115 = insertelement <4 x float> poison, float %20, i64 0
%116 = shufflevector <4 x float> %115, <4 x float> poison, <4 x i32> zeroinitializer
%117 = insertelement <4 x i32> poison, i32 %3, i64 0
%118 = shufflevector <4 x i32> %117, <4 x i32> poison, <4 x i32> zeroinitializer
%119 = insertelement <4 x i32> poison, i32 %3, i64 0
%120 = shufflevector <4 x i32> %119, <4 x i32> poison, <4 x i32> zeroinitializer
%121 = add nsw i64 %112, -8
%122 = lshr exact i64 %121, 3
%123 = add nuw nsw i64 %122, 1
%124 = and i64 %123, 1
%125 = icmp eq i64 %121, 0
br i1 %125, label %164, label %126
126: ; preds = %111
%127 = and i64 %123, 4611686018427387902
br label %128
128: ; preds = %128, %126
%129 = phi i64 [ 0, %126 ], [ %160, %128 ]
%130 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %126 ], [ %161, %128 ]
%131 = phi i64 [ 0, %126 ], [ %162, %128 ]
%132 = add <4 x i32> %130, <i32 4, i32 4, i32 4, i32 4>
%133 = sitofp <4 x i32> %130 to <4 x float>
%134 = sitofp <4 x i32> %132 to <4 x float>
%135 = fmul <4 x float> %114, %133
%136 = fmul <4 x float> %116, %134
%137 = fptosi <4 x float> %135 to <4 x i32>
%138 = fptosi <4 x float> %136 to <4 x i32>
%139 = add nsw <4 x i32> %118, %137
%140 = add nsw <4 x i32> %120, %138
%141 = getelementptr inbounds i32, i32* %25, i64 %129
%142 = bitcast i32* %141 to <4 x i32>*
store <4 x i32> %139, <4 x i32>* %142
%143 = getelementptr inbounds i32, i32* %141, i64 4
%144 = bitcast i32* %143 to <4 x i32>*
store <4 x i32> %140, <4 x i32>* %144
%145 = or i64 %129, 8
%146 = add <4 x i32> %130, <i32 8, i32 8, i32 8, i32 8>
%147 = add <4 x i32> %130, <i32 12, i32 12, i32 12, i32 12>
%148 = sitofp <4 x i32> %146 to <4 x float>
%149 = sitofp <4 x i32> %147 to <4 x float>
%150 = fmul <4 x float> %114, %148
%151 = fmul <4 x float> %116, %149
%152 = fptosi <4 x float> %150 to <4 x i32>
%153 = fptosi <4 x float> %151 to <4 x i32>
%154 = add nsw <4 x i32> %118, %152
%155 = add nsw <4 x i32> %120, %153
%156 = getelementptr inbounds i32, i32* %25, i64 %145
%157 = bitcast i32* %156 to <4 x i32>*
store <4 x i32> %154, <4 x i32>* %157
%158 = getelementptr inbounds i32, i32* %156, i64 4
%159 = bitcast i32* %158 to <4 x i32>*
store <4 x i32> %155, <4 x i32>* %159
%160 = add nuw i64 %129, 16
%161 = add <4 x i32> %130, <i32 16, i32 16, i32 16, i32 16>
%162 = add i64 %131, 2
%163 = icmp eq i64 %162, %127
br i1 %163, label %164, label %128
164: ; preds = %128, %111
%165 = phi i64 [ 0, %111 ], [ %160, %128 ]
%166 = phi <4 x i32> [ <i32 0, i32 1, i32 2, i32 3>, %111 ], [ %161, %128 ]
%167 = icmp eq i64 %124, 0
br i1 %167, label %182, label %168
168: ; preds = %164
%169 = add <4 x i32> %166, <i32 4, i32 4, i32 4, i32 4>
%170 = sitofp <4 x i32> %166 to <4 x float>
%171 = sitofp <4 x i32> %169 to <4 x float>
%172 = fmul <4 x float> %114, %170
%173 = fmul <4 x float> %116, %171
%174 = fptosi <4 x float> %172 to <4 x i32>
%175 = fptosi <4 x float> %173 to <4 x i32>
%176 = add nsw <4 x i32> %118, %174
%177 = add nsw <4 x i32> %120, %175
%178 = getelementptr inbounds i32, i32* %25, i64 %165
%179 = bitcast i32* %178 to <4 x i32>*
store <4 x i32> %176, <4 x i32>* %179
%180 = getelementptr inbounds i32, i32* %178, i64 4
%181 = bitcast i32* %180 to <4 x i32>*
store <4 x i32> %177, <4 x i32>* %181
br label %182
182: ; preds = %164, %168
%183 = icmp eq i64 %112, %109
br i1 %183, label %206, label %184
184: ; preds = %108, %182
%185 = phi i64 [ 0, %108 ], [ %112, %182 ]
br label %196
186: ; preds = %104, %186
%187 = phi i64 [ %194, %186 ], [ %105, %104 ]
%188 = trunc i64 %187 to i32
%189 = sitofp i32 %188 to float
%190 = fmul float %18, %189
%191 = fptosi float %190 to i32
%192 = add nsw i32 %191, %2
%193 = getelementptr inbounds i32, i32* %28, i64 %187
store i32 %192, i32* %193
%194 = add nuw nsw i64 %187, 1
%195 = icmp eq i64 %194, %29
br i1 %195, label %106, label %186
196: ; preds = %184, %196
%197 = phi i64 [ %204, %196 ], [ %185, %184 ]
%198 = trunc i64 %197 to i32
%199 = sitofp i32 %198 to float
%200 = fmul float %20, %199
%201 = fptosi float %200 to i32
%202 = add nsw i32 %201, %3
%203 = getelementptr inbounds i32, i32* %25, i64 %197
store i32 %202, i32* %203
%204 = add nuw nsw i64 %197, 1
%205 = icmp eq i64 %204, %109
br i1 %205, label %206, label %196
206: ; preds = %196, %182, %106
ret void
}