void temporal_outliers(u, v, prev_u, prev_v, du, dv, s1, s2, s3, nx, ny, Ix, Iy,
                       It, err, discont) float *Ix,
    *Iy, *It, *u, *v, *du, *dv, *prev_u, *prev_v, *err, *discont;
int nx, ny;
float *s1, *s2, *s3;
{
  float image_abs_max(), variance(), mean();
  int index, nx_max, ny_max, i, j;
  float t3;
  for (i = 1; i < ny - 1; i++) {
    for (j = 1; j < nx - 1; j++) {
      index = i * nx + j;
      t3 = s3[index] * 1.4142136;
      if ((((u[index] - prev_u[index]) < 0
                ? -(u[index] - prev_u[index])
                : (u[index] - prev_u[index])) >= t3) ||
          (((v[index] - prev_v[index]) < 0 ? -(v[index] - prev_v[index])
                                           : (v[index] - prev_v[index])) >= t3))
        discont[index] = 0.0;
      else
        discont[index] = 1.0;
    }
  }
  ny_max = ny - 1;
  nx_max = nx - 1;
  for (i = 0; i < ny; i++) {
    discont[(i * nx)] = 1.0;
    discont[(i * nx) + nx_max] = 1.0;
  }
  for (j = 0; j < nx; j++) {
    discont[j] = 1.0;
    discont[(ny_max * nx) + j] = 1.0;
  }
}


x86 assembly (clang, -O0):
<temporal_outliers>:
push   %rbp
mov    %rsp,%rbp
mov    0x58(%rbp),%rax
mov    0x50(%rbp),%rax
mov    0x48(%rbp),%rax
mov    0x40(%rbp),%rax
mov    0x38(%rbp),%rax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
movl   $0x1,-0x40(%rbp)
mov    -0x40(%rbp),%eax
mov    0x30(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12ff <temporal_outliers+0x1ff>
movl   $0x1,-0x44(%rbp)
mov    -0x44(%rbp),%eax
mov    0x28(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    12ec <temporal_outliers+0x1ec>
mov    -0x40(%rbp),%eax
imul   0x28(%rbp),%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe70(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    11fc <temporal_outliers+0xfc>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x4c(%rbp)
jmp    121b <temporal_outliers+0x11b>
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x4c(%rbp),%xmm0
ucomiss -0x48(%rbp),%xmm0
jae    12af <temporal_outliers+0x1af>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm1
xorps  %xmm0,%xmm0
ucomiss %xmm1,%xmm0
jbe    1281 <temporal_outliers+0x181>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  %xmm0,-0x50(%rbp)
jmp    12a0 <temporal_outliers+0x1a0>
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x50(%rbp),%xmm0
ucomiss -0x48(%rbp),%xmm0
jb     12c4 <temporal_outliers+0x1c4>
mov    0x58(%rbp),%rax
movslq -0x34(%rbp),%rcx
xorps  %xmm0,%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    12d9 <temporal_outliers+0x1d9>
mov    0x58(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  0xd2c(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
jmp    12de <temporal_outliers+0x1de>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1161 <temporal_outliers+0x61>
jmp    12f1 <temporal_outliers+0x1f1>
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1149 <temporal_outliers+0x49>
mov    0x30(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    0x28(%rbp),%eax
sub    $0x1,%eax
mov    %eax,-0x38(%rbp)
movl   $0x0,-0x40(%rbp)
mov    -0x40(%rbp),%eax
cmp    0x30(%rbp),%eax
jge    136b <temporal_outliers+0x26b>
mov    0x58(%rbp),%rax
mov    -0x40(%rbp),%ecx
imul   0x28(%rbp),%ecx
movslq %ecx,%rcx
movss  0xcc6(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    0x58(%rbp),%rax
mov    -0x40(%rbp),%ecx
imul   0x28(%rbp),%ecx
add    -0x38(%rbp),%ecx
movslq %ecx,%rcx
movss  0xca8(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    1318 <temporal_outliers+0x218>
movl   $0x0,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    0x28(%rbp),%eax
jge    13bf <temporal_outliers+0x2bf>
mov    0x58(%rbp),%rax
movslq -0x44(%rbp),%rcx
movss  0xc72(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    0x58(%rbp),%rax
mov    -0x3c(%rbp),%ecx
imul   0x28(%rbp),%ecx
add    -0x44(%rbp),%ecx
movslq %ecx,%rcx
movss  0xc54(%rip),%xmm0
movss  %xmm0,(%rax,%rcx,4)
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1372 <temporal_outliers+0x272>
pop    %rbp
ret

x86 assembly (clang, -O2):
<temporal_outliers>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x80(%rsp),%r10
mov    0x58(%rsp),%r11d
mov    0x50(%rsp),%r8d
lea    -0x1(%r11),%eax
mov    %eax,-0x4(%rsp)
lea    -0x1(%r8),%eax
mov    %eax,-0x8(%rsp)
movslq %r8d,%r15
cmp    $0x3,%r11d
jl     124d <temporal_outliers+0x14d>
mov    0x48(%rsp),%rbx
mov    -0x4(%rsp),%r12d
mov    -0x8(%rsp),%eax
lea    (%r10,%r15,4),%rbp
add    $0x4,%rbp
lea    0x0(,%r15,4),%r13
lea    0x4(%rbx,%r15,4),%rbx
lea    0x4(%rdi,%r15,4),%rdi
lea    0x4(%rdx,%r15,4),%rdx
lea    0x4(%rsi,%r15,4),%rsi
lea    0x4(%rcx,%r15,4),%rcx
lea    -0x4(,%rax,4),%rax
ff
mov    $0x1,%r14d
movsd  0xe7a(%rip),%xmm0
movaps 0xe83(%rip),%xmm1
movss  0xe9b(%rip),%xmm2
jmp    11bf <temporal_outliers+0xbf>
nopw   0x0(%rax,%rax,1)
add    $0x1,%r14
add    %r13,%rbp
add    %r13,%rbx
add    %r13,%rdi
add    %r13,%rdx
add    %r13,%rsi
add    %r13,%rcx
cmp    %r12,%r14
je     124d <temporal_outliers+0x14d>
cmp    $0x3,%r8d
jl     11a0 <temporal_outliers+0xa0>
xor    %r9d,%r9d
jmp    11e0 <temporal_outliers+0xe0>
nopw   0x0(%rax,%rax,1)
movss  %xmm4,0x0(%rbp,%r9,1)
add    $0x4,%r9
cmp    %r9,%rax
je     11a0 <temporal_outliers+0xa0>
movss  (%rbx,%r9,1),%xmm3
cvtss2sd %xmm3,%xmm3
mulsd  %xmm0,%xmm3
cvtsd2ss %xmm3,%xmm3
movss  (%rdi,%r9,1),%xmm5
subss  (%rdx,%r9,1),%xmm5
movaps %xmm5,%xmm6
xorps  %xmm1,%xmm6
xorps  %xmm4,%xmm4
movaps %xmm5,%xmm7
cmpltss %xmm4,%xmm7
andps  %xmm7,%xmm6
andnps %xmm5,%xmm7
orps   %xmm6,%xmm7
ucomiss %xmm3,%xmm7
jae    11d0 <temporal_outliers+0xd0>
movss  (%rsi,%r9,1),%xmm5
subss  (%rcx,%r9,1),%xmm5
movaps %xmm5,%xmm6
xorps  %xmm1,%xmm6
xorps  %xmm4,%xmm4
movaps %xmm5,%xmm7
cmpltss %xmm4,%xmm7
andps  %xmm7,%xmm6
andnps %xmm5,%xmm7
orps   %xmm6,%xmm7
ucomiss %xmm3,%xmm7
jae    11d0 <temporal_outliers+0xd0>
movaps %xmm2,%xmm4
jmp    11d0 <temporal_outliers+0xd0>
test   %r11d,%r11d
jle    12c4 <temporal_outliers+0x1c4>
movslq -0x8(%rsp),%rax
mov    %r11d,%ecx
cmp    $0x1,%r11d
jne    1264 <temporal_outliers+0x164>
xor    %edx,%edx
jmp    12a8 <temporal_outliers+0x1a8>
mov    %ecx,%esi
and    $0xfffffffe,%esi
lea    (%r15,%rax,1),%rdi
lea    0x0(,%r15,8),%rbp
xor    %edx,%edx
mov    %r10,%rbx
nopw   0x0(%rax,%rax,1)
movl   $0x3f800000,(%rbx)
movl   $0x3f800000,(%rbx,%rax,4)
movl   $0x3f800000,(%rbx,%r15,4)
3f
movl   $0x3f800000,(%rbx,%rdi,4)
add    $0x2,%rdx
add    %rbp,%rbx
cmp    %rdx,%rsi
jne    1280 <temporal_outliers+0x180>
test   $0x1,%cl
je     12c4 <temporal_outliers+0x1c4>
imul   %r15,%rdx
movl   $0x3f800000,(%r10,%rdx,4)
3f
add    %rax,%rdx
movl   $0x3f800000,(%r10,%rdx,4)
3f
test   %r8d,%r8d
jle    1498 <temporal_outliers+0x398>
mov    -0x4(%rsp),%eax
imul   %r8d,%eax
movslq %eax,%r9
mov    %r8d,%eax
cmp    $0x8,%r8d
jb     1303 <temporal_outliers+0x203>
lea    (%r9,%rax,1),%rcx
lea    (%r10,%rcx,4),%rcx
cmp    %r10,%rcx
jbe    13a0 <temporal_outliers+0x2a0>
lea    (%r10,%rax,4),%rcx
lea    (%r10,%r9,4),%rdx
cmp    %rcx,%rdx
jae    13a0 <temporal_outliers+0x2a0>
xor    %edx,%edx
mov    %rdx,%rcx
not    %rcx
add    %rax,%rcx
mov    %rax,%rsi
and    $0x3,%rsi
je     1339 <temporal_outliers+0x239>
lea    (%r10,%r9,4),%rdi
nopl   0x0(%rax,%rax,1)
movl   $0x3f800000,(%r10,%rdx,4)
3f
movl   $0x3f800000,(%rdi,%rdx,4)
add    $0x1,%rdx
add    $0xffffffffffffffff,%rsi
jne    1320 <temporal_outliers+0x220>
cmp    $0x3,%rcx
jb     1498 <temporal_outliers+0x398>
lea    (%r10,%r9,4),%rcx
add    $0xc,%rcx
nopl   0x0(%rax,%rax,1)
movl   $0x3f800000,(%r10,%rdx,4)
3f
movl   $0x3f800000,-0xc(%rcx,%rdx,4)
3f
movl   $0x3f800000,0x4(%r10,%rdx,4)
80 3f
movl   $0x3f800000,-0x8(%rcx,%rdx,4)
3f
movl   $0x3f800000,0x8(%r10,%rdx,4)
80 3f
movl   $0x3f800000,-0x4(%rcx,%rdx,4)
3f
movl   $0x3f800000,0xc(%r10,%rdx,4)
80 3f
movl   $0x3f800000,(%rcx,%rdx,4)
add    $0x4,%rdx
cmp    %rdx,%rax
jne    1350 <temporal_outliers+0x250>
jmp    1498 <temporal_outliers+0x398>
mov    %eax,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rcx
mov    %rcx,%rdi
shr    $0x3,%rdi
add    $0x1,%rdi
mov    %edi,%esi
and    $0x3,%esi
cmp    $0x18,%rcx
jae    13c6 <temporal_outliers+0x2c6>
xor    %ebp,%ebp
jmp    1448 <temporal_outliers+0x348>
and    $0xfffffffffffffffc,%rdi
lea    0x70(%r10),%rbx
lea    (%r10,%r9,4),%rcx
add    $0x70,%rcx
xor    %ebp,%ebp
movapd 0xc40(%rip),%xmm0
movupd %xmm0,-0x70(%rbx,%rbp,4)
movupd %xmm0,-0x60(%rbx,%rbp,4)
movupd %xmm0,-0x70(%rcx,%rbp,4)
movupd %xmm0,-0x60(%rcx,%rbp,4)
movupd %xmm0,-0x50(%rbx,%rbp,4)
movupd %xmm0,-0x40(%rbx,%rbp,4)
movupd %xmm0,-0x50(%rcx,%rbp,4)
movupd %xmm0,-0x40(%rcx,%rbp,4)
movupd %xmm0,-0x30(%rbx,%rbp,4)
movupd %xmm0,-0x20(%rbx,%rbp,4)
movupd %xmm0,-0x30(%rcx,%rbp,4)
movupd %xmm0,-0x20(%rcx,%rbp,4)
movupd %xmm0,-0x10(%rbx,%rbp,4)
movupd %xmm0,(%rbx,%rbp,4)
movupd %xmm0,-0x10(%rcx,%rbp,4)
movupd %xmm0,(%rcx,%rbp,4)
add    $0x20,%rbp
add    $0xfffffffffffffffc,%rdi
jne    13e0 <temporal_outliers+0x2e0>
test   %rsi,%rsi
je     148f <temporal_outliers+0x38f>
lea    (%r9,%rbp,1),%rcx
lea    (%r10,%rcx,4),%rcx
add    $0x10,%rcx
lea    (%r10,%rbp,4),%rdi
add    $0x10,%rdi
shl    $0x5,%rsi
xor    %ebp,%ebp
movapd 0xbb1(%rip),%xmm0
nop
movupd %xmm0,-0x10(%rdi,%rbp,1)
movupd %xmm0,(%rdi,%rbp,1)
movupd %xmm0,-0x10(%rcx,%rbp,1)
movupd %xmm0,(%rcx,%rbp,1)
add    $0x20,%rbp
cmp    %rbp,%rsi
jne    1470 <temporal_outliers+0x370>
cmp    %rax,%rdx
jne    1305 <temporal_outliers+0x205>
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

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