void warpShort(short *segw, short *seg1, float *X, int m, int n, int o) {
  int sz = m * n * o;
  for (int k = 0; k < o; k++) {
    for (int j = 0; j < n; j++) {
      for (int i = 0; i < m; i++) {
        float y1 =
            (float)i * X[0] + (float)j * X[1] + (float)k * X[2] + (float)X[3];
        float x1 =
            (float)i * X[4] + (float)j * X[5] + (float)k * X[6] + (float)X[7];
        float z1 =
            (float)i * X[8] + (float)j * X[9] + (float)k * X[10] + (float)X[11];
        int x = round(x1);
        int y = round(y1);
        int z = round(z1);
        if ((y) >= 0 && (y) < m && (x) >= 0 && (x) < n && (z) >= 0 && (z) < o) {
          segw[i + j * m + k * m * n] = seg1[y + (x)*m + (z)*m * n];
        } else {
          segw[i + j * m + k * m * n] = 0;
        }
      }
    }
  }
}


x86 assembly (clang, -O0):
<warpShort>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %r9d,-0x24(%rbp)
mov    -0x1c(%rbp),%eax
imul   -0x20(%rbp),%eax
imul   -0x24(%rbp),%eax
mov    %eax,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    137a <warpShort+0x26a>
movl   $0x0,-0x30(%rbp)
mov    -0x30(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    1367 <warpShort+0x257>
movl   $0x0,-0x34(%rbp)
mov    -0x34(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    1354 <warpShort+0x244>
cvtsi2ssl -0x34(%rbp),%xmm1
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm2
cvtsi2ssl -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulss  0x4(%rax),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
cvtsi2ssl -0x2c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  0x8(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
addss  0xc(%rax),%xmm0
movss  %xmm0,-0x38(%rbp)
cvtsi2ssl -0x34(%rbp),%xmm1
mov    -0x18(%rbp),%rax
movss  0x10(%rax),%xmm2
cvtsi2ssl -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulss  0x14(%rax),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
cvtsi2ssl -0x2c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  0x18(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
addss  0x1c(%rax),%xmm0
movss  %xmm0,-0x3c(%rbp)
cvtsi2ssl -0x34(%rbp),%xmm1
mov    -0x18(%rbp),%rax
movss  0x20(%rax),%xmm2
cvtsi2ssl -0x30(%rbp),%xmm0
mov    -0x18(%rbp),%rax
mulss  0x24(%rax),%xmm0
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
cvtsi2ssl -0x2c(%rbp),%xmm0
mov    -0x18(%rbp),%rax
movss  0x28(%rax),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x18(%rbp),%rax
addss  0x2c(%rax),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1030 <round@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x44(%rbp)
movss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1030 <round@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x48(%rbp)
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
call   1030 <round@plt>
cvttsd2si %xmm0,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x0,-0x48(%rbp)
jl     131b <warpShort+0x20b>
mov    -0x48(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    131b <warpShort+0x20b>
cmpl   $0x0,-0x44(%rbp)
jl     131b <warpShort+0x20b>
mov    -0x44(%rbp),%eax
cmp    -0x20(%rbp),%eax
jge    131b <warpShort+0x20b>
cmpl   $0x0,-0x4c(%rbp)
jl     131b <warpShort+0x20b>
mov    -0x4c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    131b <warpShort+0x20b>
mov    -0x10(%rbp),%rax
mov    -0x48(%rbp),%ecx
mov    -0x44(%rbp),%edx
imul   -0x1c(%rbp),%edx
add    %edx,%ecx
mov    -0x4c(%rbp),%edx
imul   -0x1c(%rbp),%edx
imul   -0x20(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,2),%dx
mov    -0x8(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x30(%rbp),%esi
imul   -0x1c(%rbp),%esi
add    %esi,%ecx
mov    -0x2c(%rbp),%esi
imul   -0x1c(%rbp),%esi
imul   -0x20(%rbp),%esi
add    %esi,%ecx
movslq %ecx,%rcx
mov    %dx,(%rax,%rcx,2)
jmp    1341 <warpShort+0x231>
mov    -0x8(%rbp),%rax
mov    -0x34(%rbp),%ecx
mov    -0x30(%rbp),%edx
imul   -0x1c(%rbp),%edx
add    %edx,%ecx
mov    -0x2c(%rbp),%edx
imul   -0x1c(%rbp),%edx
imul   -0x20(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
movw   $0x0,(%rax,%rcx,2)
jmp    1346 <warpShort+0x236>
mov    -0x34(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x34(%rbp)
jmp    116a <warpShort+0x5a>
jmp    1359 <warpShort+0x249>
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
jmp    1157 <warpShort+0x47>
jmp    136c <warpShort+0x25c>
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1144 <warpShort+0x34>
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<warpShort>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x78,%rsp
mov    %ecx,0x10(%rsp)
mov    %rdx,0x68(%rsp)
mov    %rsi,0x70(%rsp)
mov    %r9d,0x14(%rsp)
test   %r9d,%r9d
jle    139b <warpShort+0x28b>
mov    %r8d,%ebp
mov    %rdi,%rbx
mov    0x10(%rsp),%eax
mov    %eax,%r12d
mov    %r8d,%ecx
imul   %eax,%ecx
mov    %rcx,0x60(%rsp)
xor    %eax,%eax
mov    %rax,0x18(%rsp)
movl   $0x0,0x8(%rsp)
jmp    1194 <warpShort+0x84>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    0x8(%rsp),%ecx
add    $0x1,%ecx
mov    0x18(%rsp),%rax
add    0x60(%rsp),%rax
mov    %rax,0x18(%rsp)
mov    %ecx,0x8(%rsp)
cmp    0x14(%rsp),%ecx
je     139b <warpShort+0x28b>
test   %ebp,%ebp
jle    1170 <warpShort+0x60>
xorps  %xmm0,%xmm0
cvtsi2ssl 0x8(%rsp),%xmm0
movss  %xmm0,0x20(%rsp)
movl   $0x0,0xc(%rsp)
mov    0x18(%rsp),%r15
jmp    11d2 <warpShort+0xc2>
cs nopw 0x0(%rax,%rax,1)
mov    0xc(%rsp),%eax
add    $0x1,%eax
add    %r12,%r15
mov    %eax,0xc(%rsp)
cmp    %ebp,%eax
je     1170 <warpShort+0x60>
cmpl   $0x0,0x10(%rsp)
jle    11c0 <warpShort+0xb0>
xorps  %xmm0,%xmm0
cvtsi2ssl 0xc(%rsp),%xmm0
mov    0x68(%rsp),%rax
movss  (%rax),%xmm1
movss  %xmm1,0x4c(%rsp)
movss  0x8(%rax),%xmm1
movss  %xmm1,0x48(%rsp)
movss  0x4(%rax),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,0x44(%rsp)
movss  0xc(%rax),%xmm1
movss  %xmm1,0x40(%rsp)
movss  0x10(%rax),%xmm1
movss  %xmm1,0x3c(%rsp)
movss  0x14(%rax),%xmm1
mulss  %xmm0,%xmm1
movss  %xmm1,0x38(%rsp)
movss  0x18(%rax),%xmm1
movss  %xmm1,0x34(%rsp)
movss  0x1c(%rax),%xmm1
movss  %xmm1,0x30(%rsp)
mulss  0x24(%rax),%xmm0
movss  %xmm0,0x50(%rsp)
movss  0x20(%rax),%xmm0
movss  %xmm0,0x2c(%rsp)
movss  0x28(%rax),%xmm0
movss  %xmm0,0x28(%rsp)
movss  0x2c(%rax),%xmm0
movss  %xmm0,0x24(%rsp)
xor    %r13d,%r13d
jmp    1298 <warpShort+0x188>
nopw   0x0(%rax,%rax,1)
lea    (%r15,%r13,1),%ecx
movslq %ecx,%rcx
mov    %ax,(%rbx,%rcx,2)
add    $0x1,%r13
cmp    %r13,%r12
je     11c0 <warpShort+0xb0>
xorps  %xmm1,%xmm1
cvtsi2ss %r13d,%xmm1
movaps %xmm1,%xmm0
mulss  0x4c(%rsp),%xmm0
addss  0x44(%rsp),%xmm0
movss  0x20(%rsp),%xmm3
movaps %xmm3,%xmm2
mulss  0x48(%rsp),%xmm2
addss  %xmm0,%xmm2
movaps %xmm2,%xmm4
movaps %xmm1,%xmm2
mulss  0x3c(%rsp),%xmm2
addss  0x38(%rsp),%xmm2
movaps %xmm3,%xmm0
mulss  0x34(%rsp),%xmm0
addss  %xmm2,%xmm0
mulss  0x2c(%rsp),%xmm1
addss  0x50(%rsp),%xmm1
mulss  0x28(%rsp),%xmm3
addss  %xmm1,%xmm3
addss  0x40(%rsp),%xmm4
movss  %xmm4,0x58(%rsp)
addss  0x30(%rsp),%xmm0
addss  0x24(%rsp),%xmm3
movss  %xmm3,0x5c(%rsp)
call   1030 <roundf@plt>
movss  %xmm0,0x54(%rsp)
movss  0x58(%rsp),%xmm0
call   1030 <roundf@plt>
cvttss2si %xmm0,%r14d
movss  0x5c(%rsp),%xmm0
call   1030 <roundf@plt>
xor    %eax,%eax
test   %r14d,%r14d
js     1280 <warpShort+0x170>
cmp    %r12d,%r14d
jge    1280 <warpShort+0x170>
cvttss2si 0x54(%rsp),%ecx
test   %ecx,%ecx
js     1280 <warpShort+0x170>
xor    %eax,%eax
cmp    %ebp,%ecx
jge    1280 <warpShort+0x170>
cvttss2si %xmm0,%edx
test   %edx,%edx
js     1280 <warpShort+0x170>
cmp    0x14(%rsp),%edx
jge    1280 <warpShort+0x170>
imul   %ebp,%edx
add    %ecx,%edx
imul   0x10(%rsp),%edx
add    %r14d,%edx
movslq %edx,%rax
mov    0x70(%rsp),%rcx
movzwl (%rcx,%rax,2),%eax
jmp    1280 <warpShort+0x170>
add    $0x78,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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