reflect2(filt, x_dim, y_dim, x_pos, y_pos, result, f_or_e) register float *filt,
    *result;
register int x_dim;
int y_dim, x_pos, y_pos, f_or_e;
{
  register int y_filt, x_filt, y_edge, x_edge;
  register int x_base = (x_pos > 0) ? (x_dim - 1) : 0;
  register int y_base = (y_pos > 0) ? (x_dim * (y_dim - 1)) : 0;
  int filt_sz = x_dim * y_dim;
  int x_edge_dist = (x_pos > 0) ? (x_pos - x_dim - 1) : (x_pos + 1);
  int y_edge_dist = x_dim * ((y_pos > 0) ? (y_pos - y_dim - 1) : (y_pos + 1));
  int i;
  for (i = 0; i < filt_sz; i++)
    result[i] = 0.0;
  for (y_filt = 0, y_edge = y_edge_dist; y_filt < filt_sz;
       y_filt += x_dim, y_edge += x_dim) {
    if (y_edge == 0)
      y_edge += x_dim;
    for (x_filt = y_filt, x_edge = x_edge_dist; x_filt < y_filt + x_dim;
         x_filt++, x_edge++) {
      if (x_edge == 0)
        x_edge++;
      result[(y_base - (y_edge >= 0 ? y_edge : -(y_edge)) + x_dim >= 0
                  ? y_base - (y_edge >= 0 ? y_edge : -(y_edge)) + x_dim
                  : -(y_base - (y_edge >= 0 ? y_edge : -(y_edge)) + x_dim)) +
             (x_base - (x_edge >= 0 ? x_edge : -(x_edge)) + 1 >= 0
                  ? x_base - (x_edge >= 0 ? x_edge : -(x_edge)) + 1
                  : -(x_base - (x_edge >= 0 ? x_edge : -(x_edge)) + 1))] +=
          filt[x_filt];
    }
  }
}


x86 assembly (clang, -O0):
<reflect2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    0x10(%rbp),%eax
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %ecx,-0x1c(%rbp)
mov    %r8d,-0x20(%rbp)
mov    %r9,-0x28(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    1138 <reflect2+0x38>
mov    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    1142 <reflect2+0x42>
xor    %eax,%eax
mov    %eax,-0x54(%rbp)
jmp    1142 <reflect2+0x42>
mov    -0x54(%rbp),%eax
mov    %eax,-0x3c(%rbp)
cmpl   $0x0,-0x20(%rbp)
jle    1166 <reflect2+0x66>
mov    -0x14(%rbp),%eax
mov    -0x18(%rbp),%ecx
sub    $0x1,%ecx
imul   %ecx,%eax
mov    %eax,-0x58(%rbp)
jmp    1170 <reflect2+0x70>
xor    %eax,%eax
mov    %eax,-0x58(%rbp)
jmp    1170 <reflect2+0x70>
mov    -0x58(%rbp),%eax
mov    %eax,-0x40(%rbp)
mov    -0x14(%rbp),%eax
imul   -0x18(%rbp),%eax
mov    %eax,-0x44(%rbp)
cmpl   $0x0,-0x1c(%rbp)
jle    119b <reflect2+0x9b>
mov    -0x1c(%rbp),%eax
sub    -0x14(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x5c(%rbp)
jmp    11a4 <reflect2+0xa4>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x14(%rbp),%eax
mov    %eax,-0x60(%rbp)
cmpl   $0x0,-0x20(%rbp)
jle    11cb <reflect2+0xcb>
mov    -0x20(%rbp),%eax
sub    -0x18(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x64(%rbp)
jmp    11d4 <reflect2+0xd4>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x64(%rbp)
mov    -0x60(%rbp),%eax
mov    -0x64(%rbp),%ecx
imul   %ecx,%eax
mov    %eax,-0x4c(%rbp)
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    1211 <reflect2+0x111>
mov    -0x28(%rbp),%rax
movslq -0x50(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    11e7 <reflect2+0xe7>
movl   $0x0,-0x2c(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
cmp    -0x44(%rbp),%eax
jge    1476 <reflect2+0x376>
cmpl   $0x0,-0x34(%rbp)
jne    123d <reflect2+0x13d>
mov    -0x14(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x2c(%rbp),%eax
mov    %eax,-0x30(%rbp)
mov    -0x48(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x30(%rbp),%eax
mov    -0x2c(%rbp),%ecx
add    -0x14(%rbp),%ecx
cmp    %ecx,%eax
jge    145a <reflect2+0x35a>
cmpl   $0x0,-0x38(%rbp)
jne    126d <reflect2+0x16d>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x30(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x74(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x70(%rbp)
mov    -0x40(%rbp),%eax
mov    %eax,-0x68(%rbp)
cmpl   $0x0,-0x34(%rbp)
jl     12a2 <reflect2+0x1a2>
mov    -0x34(%rbp),%eax
mov    %eax,-0x78(%rbp)
jmp    12aa <reflect2+0x1aa>
xor    %eax,%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x78(%rbp)
mov    -0x68(%rbp),%eax
mov    -0x78(%rbp),%ecx
sub    %ecx,%eax
add    -0x14(%rbp),%eax
cmp    $0x0,%eax
jl     12f7 <reflect2+0x1f7>
mov    -0x40(%rbp),%eax
mov    %eax,-0x7c(%rbp)
cmpl   $0x0,-0x34(%rbp)
jl     12d9 <reflect2+0x1d9>
mov    -0x34(%rbp),%eax
mov    %eax,-0x80(%rbp)
jmp    12e1 <reflect2+0x1e1>
xor    %eax,%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x80(%rbp)
mov    -0x7c(%rbp),%eax
mov    -0x80(%rbp),%ecx
sub    %ecx,%eax
add    -0x14(%rbp),%eax
mov    %eax,-0x84(%rbp)
jmp    133e <reflect2+0x23e>
mov    -0x40(%rbp),%eax
mov    %eax,-0x88(%rbp)
cmpl   $0x0,-0x34(%rbp)
jl     1318 <reflect2+0x218>
mov    -0x34(%rbp),%eax
mov    %eax,-0x8c(%rbp)
jmp    1323 <reflect2+0x223>
xor    %eax,%eax
sub    -0x34(%rbp),%eax
mov    %eax,-0x8c(%rbp)
mov    -0x88(%rbp),%ecx
mov    -0x8c(%rbp),%eax
sub    %eax,%ecx
add    -0x14(%rbp),%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0x84(%rbp)
mov    -0x84(%rbp),%eax
mov    %eax,-0x94(%rbp)
mov    -0x3c(%rbp),%eax
mov    %eax,-0x90(%rbp)
cmpl   $0x0,-0x38(%rbp)
jl     136b <reflect2+0x26b>
mov    -0x38(%rbp),%eax
mov    %eax,-0x98(%rbp)
jmp    1376 <reflect2+0x276>
xor    %eax,%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0x98(%rbp)
mov    -0x90(%rbp),%eax
mov    -0x98(%rbp),%ecx
sub    %ecx,%eax
add    $0x1,%eax
cmp    $0x0,%eax
jl     13d8 <reflect2+0x2d8>
mov    -0x3c(%rbp),%eax
mov    %eax,-0x9c(%rbp)
cmpl   $0x0,-0x38(%rbp)
jl     13b1 <reflect2+0x2b1>
mov    -0x38(%rbp),%eax
mov    %eax,-0xa0(%rbp)
jmp    13bc <reflect2+0x2bc>
xor    %eax,%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0xa0(%rbp)
mov    -0x9c(%rbp),%eax
mov    -0xa0(%rbp),%ecx
sub    %ecx,%eax
add    $0x1,%eax
mov    %eax,-0xa4(%rbp)
jmp    141f <reflect2+0x31f>
mov    -0x3c(%rbp),%eax
mov    %eax,-0xa8(%rbp)
cmpl   $0x0,-0x38(%rbp)
jl     13f9 <reflect2+0x2f9>
mov    -0x38(%rbp),%eax
mov    %eax,-0xac(%rbp)
jmp    1404 <reflect2+0x304>
xor    %eax,%eax
sub    -0x38(%rbp),%eax
mov    %eax,-0xac(%rbp)
mov    -0xa8(%rbp),%ecx
mov    -0xac(%rbp),%eax
sub    %eax,%ecx
add    $0x1,%ecx
xor    %eax,%eax
sub    %ecx,%eax
mov    %eax,-0xa4(%rbp)
mov    -0x70(%rbp),%rax
movss  -0x74(%rbp),%xmm0
mov    -0x94(%rbp),%ecx
mov    -0xa4(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
addss  (%rax,%rcx,4),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1249 <reflect2+0x149>
jmp    145f <reflect2+0x35f>
mov    -0x14(%rbp),%eax
add    -0x2c(%rbp),%eax
mov    %eax,-0x2c(%rbp)
mov    -0x14(%rbp),%eax
add    -0x34(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    121e <reflect2+0x11e>
mov    -0x4(%rbp),%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<reflect2>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %r9,%r13
mov    %edx,%r14d
mov    %esi,%r9d
lea    -0x1(%r9),%ebx
imul   %esi,%edx
xor    %ebp,%ebp
test   %ecx,%ecx
cmovle %ebp,%ebx
mov    %esi,%eax
not    %eax
mov    $0x1,%r15d
cmovle %r15d,%eax
test   %edx,%edx
jle    1235 <reflect2+0x125>
mov    %rdi,%r12
add    %ecx,%eax
mov    %eax,0x4(%rsp)
lea    -0x1(%r14),%eax
imul   %r9d,%eax
test   %r8d,%r8d
not    %r14d
cmovle %r15d,%r14d
cmovle %ebp,%eax
mov    %eax,(%rsp)
add    %r8d,%r14d
imul   %r9d,%r14d
mov    %edx,%eax
mov    %rax,0x10(%rsp)
lea    0x0(,%rax,4),%rdx
mov    %r13,%rdi
xor    %esi,%esi
mov    %r9,0x8(%rsp)
call   1030 <memset@plt>
mov    (%rsp),%r11d
mov    0x4(%rsp),%r10d
mov    0x8(%rsp),%r9
add    %r9d,%r11d
movslq %r9d,%r8
jmp    11bd <reflect2+0xad>
nopw   0x0(%rax,%rax,1)
add    %r9d,%r14d
mov    %rcx,%rbp
cmp    0x10(%rsp),%rcx
jge    1235 <reflect2+0x125>
test   %r14d,%r14d
cmove  %r9d,%r14d
lea    (%r8,%rbp,1),%rcx
test   %r9d,%r9d
jle    11b0 <reflect2+0xa0>
mov    %r14d,%esi
neg    %esi
cmovns %r14d,%esi
add    %r11d,%esi
mov    %esi,%edx
neg    %edx
cmovs  %esi,%edx
mov    %r10d,%esi
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
test   %esi,%esi
cmove  %r15d,%esi
movss  (%r12,%rbp,4),%xmm0
mov    %esi,%edi
neg    %edi
cmovns %esi,%edi
lea    (%rbx,%rdi,1),%eax
cmp    $0xffffffff,%eax
lea    0x1(%rbx,%rdi,1),%edi
not    %eax
cmovge %edi,%eax
add    %edx,%eax
cltq
addss  0x0(%r13,%rax,4),%xmm0
movss  %xmm0,0x0(%r13,%rax,4)
add    $0x1,%rbp
add    $0x1,%esi
cmp    %rcx,%rbp
jl     11f0 <reflect2+0xe0>
jmp    11b0 <reflect2+0xa0>
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
define i32 @reflect2(float* nocapture %0, i32 %1, i32 %2, i32 %3, i32 %4, float* nocapture %5, i32 %6) {
%8 = icmp sgt i32 %3, 0
%9 = add nsw i32 %1, -1
%10 = select i1 %8, i32 %9, i32 0
%11 = icmp sgt i32 %4, 0
%12 = mul i32 %2, %1
%13 = xor i32 %1, -1
%14 = select i1 %8, i32 %13, i32 1
%15 = add i32 %14, %3
%16 = icmp sgt i32 %12, 0
br i1 %16, label %17, label %66
17: ; preds = %7
%18 = xor i32 %2, -1
%19 = select i1 %11, i32 %18, i32 1
%20 = add i32 %19, %4
%21 = mul nsw i32 %20, %1
%22 = add nsw i32 %2, -1
%23 = mul nsw i32 %22, %1
%24 = select i1 %11, i32 %23, i32 0
%25 = bitcast float* %5 to i8*
%26 = zext i32 %12 to i64
%27 = shl nuw nsw i64 %26, 2
%28 = add i32 %24, %1
%29 = sext i32 %1 to i64
%30 = zext i32 %12 to i64
%31 = icmp sgt i32 %1, 0
br label %32
32: ; preds = %17, %63
%33 = phi i64 [ 0, %17 ], [ %37, %63 ]
%34 = phi i32 [ %21, %17 ], [ %64, %63 ]
%35 = icmp eq i32 %34, 0
%36 = select i1 %35, i32 %1, i32 %34
%37 = add i64 %33, %29
br i1 %31, label %38, label %63
38: ; preds = %32
%39 = tail call i32 @llvm.abs.i32(i32 %36, i1 true)
%40 = sub i32 %28, %39
%41 = tail call i32 @llvm.abs.i32(i32 %40, i1 true)
br label %42
42: ; preds = %38, %42
%43 = phi i64 [ %33, %38 ], [ %60, %42 ]
%44 = phi i32 [ %15, %38 ], [ %61, %42 ]
%45 = icmp eq i32 %44, 0
%46 = select i1 %45, i32 1, i32 %44
%47 = getelementptr inbounds float, float* %0, i64 %43
%48 = load float, float* %47
%49 = tail call i32 @llvm.abs.i32(i32 %46, i1 true)
%50 = sub nsw i32 %10, %49
%51 = icmp sgt i32 %50, -2
%52 = add nsw i32 %50, 1
%53 = xor i32 %50, -1
%54 = select i1 %51, i32 %52, i32 %53
%55 = add nsw i32 %54, %41
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds float, float* %5, i64 %56
%58 = load float, float* %57
%59 = fadd float %48, %58
store float %59, float* %57
%60 = add nsw i64 %43, 1
%61 = add nsw i32 %46, 1
%62 = icmp slt i64 %60, %37
br i1 %62, label %42, label %63
63: ; preds = %42, %32
%64 = add nsw i32 %36, %1
%65 = icmp slt i64 %37, %30
br i1 %65, label %32, label %66
66: ; preds = %63, %7
ret i32 undef
}