Verify(npatch, coeff, diag, rhs, result) int npatch;
double coeff[][8192], diag[][8192], rhs[][8192], result[][8192];
{
  double tmp1, tmp2;
  double anorm, xnorm;
  int i, j, m;
  tmp1 = 0.0;
  for (m = 0; m < 3; m++) {
    for (i = 0; i < npatch; i++) {
      coeff[i][i] = diag[m][i];
      for (j = 0; j < i; j++) {
        coeff[i][j] = coeff[j][i];
      }
    }
    anorm = xnorm = 0.0;
    for (j = 0; j < npatch; j++) {
      tmp2 = rhs[m][j];
      for (i = 0; i < npatch; i++) {
        tmp2 -= (coeff[j][i] * result[m][i]);
        anorm =
            (((anorm) > (fabs(coeff[j][i]))) ? (anorm) : (fabs(coeff[j][i])));
      }
      xnorm =
          (((xnorm) > (fabs(result[m][j]))) ? (xnorm) : (fabs(result[m][j])));
      tmp1 += fabs(tmp2);
    }
  }
  tmp1 /= (anorm * xnorm);
  if (tmp1 > 3 * (0.5e-8)) {
    printf("Residual is too large: %lg\n", tmp1);
    return ((1 == 0));
  }
  return ((!(1 == 0)));
}


x86 assembly (clang, -O0):
<Verify>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x30(%rbp)
movl   $0x0,-0x54(%rbp)
cmpl   $0x3,-0x54(%rbp)
jge    13c6 <Verify+0x2b6>
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    11eb <Verify+0xdb>
mov    -0x18(%rbp),%rax
movslq -0x54(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x4c(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x4c(%rbp),%eax
jge    11d8 <Verify+0xc8>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x4c(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x50(%rbp),%rcx
movsd  %xmm0,(%rax,%rcx,8)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    118e <Verify+0x7e>
jmp    11dd <Verify+0xcd>
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    114b <Verify+0x3b>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x48(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movl   $0x0,-0x50(%rbp)
mov    -0x50(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    13b3 <Verify+0x2a3>
mov    -0x20(%rbp),%rax
movslq -0x54(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movsd  %xmm0,-0x38(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x4c(%rbp),%eax
cmp    -0x8(%rbp),%eax
jge    1318 <Verify+0x208>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm2
movsd  -0x38(%rbp),%xmm1
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
movsd  %xmm0,-0x38(%rbp)
movsd  -0x40(%rbp),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movaps 0xd55(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    12d8 <Verify+0x1c8>
movsd  -0x40(%rbp),%xmm0
movsd  %xmm0,-0x60(%rbp)
jmp    1300 <Verify+0x1f0>
mov    -0x10(%rbp),%rax
movslq -0x50(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x4c(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xd19(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x60(%rbp)
movsd  -0x60(%rbp),%xmm0
movsd  %xmm0,-0x40(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
jmp    1232 <Verify+0x122>
movsd  -0x48(%rbp),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm1
movaps 0xcd4(%rip),%xmm2
pand   %xmm2,%xmm1
ucomisd %xmm1,%xmm0
jbe    1359 <Verify+0x249>
movsd  -0x48(%rbp),%xmm0
movsd  %xmm0,-0x68(%rbp)
jmp    1381 <Verify+0x271>
mov    -0x28(%rbp),%rax
movslq -0x54(%rbp),%rcx
shl    $0x10,%rcx
add    %rcx,%rax
movslq -0x50(%rbp),%rcx
movsd  (%rax,%rcx,8),%xmm0
movaps 0xc98(%rip),%xmm1
pand   %xmm1,%xmm0
movsd  %xmm0,-0x68(%rbp)
movsd  -0x68(%rbp),%xmm0
movsd  %xmm0,-0x48(%rbp)
movsd  -0x38(%rbp),%xmm0
movaps 0xc79(%rip),%xmm1
pand   %xmm1,%xmm0
addsd  -0x30(%rbp),%xmm0
movsd  %xmm0,-0x30(%rbp)
mov    -0x50(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x50(%rbp)
jmp    1202 <Verify+0xf2>
jmp    13b8 <Verify+0x2a8>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    113a <Verify+0x2a>
movsd  -0x40(%rbp),%xmm1
mulsd  -0x48(%rbp),%xmm1
movsd  -0x30(%rbp),%xmm0
divsd  %xmm1,%xmm0
movsd  %xmm0,-0x30(%rbp)
movsd  -0x30(%rbp),%xmm0
movsd  0xc15(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1414 <Verify+0x304>
movsd  -0x30(%rbp),%xmm0
lea    0xc1f(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
movl   $0x0,-0x4(%rbp)
jmp    141b <Verify+0x30b>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Verify>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r8,%r9
mov    %rdx,0x40(%rsp)
mov    %edi,%r8d
mov    %r8d,%r13d
and    $0xfffffffe,%r13d
lea    0x30000(%rsi),%rax
mov    %rax,0x30(%rsp)
lea    0x18(%rsi),%rax
mov    %rax,0x28(%rsp)
lea    0x8(%rsi),%rax
mov    %rax,0x10(%rsp)
lea    0x8(%r9),%rbx
xorpd  %xmm0,%xmm0
xor    %eax,%eax
mov    %rax,(%rsp)
movapd 0xe9c(%rip),%xmm1
movapd 0xe93(%rip),%xmm8
mov    %rsi,0x38(%rsp)
mov    %rcx,0x20(%rsp)
mov    %r9,0x18(%rsp)
mov    %edi,0xc(%rsp)
jmp    11b8 <Verify+0xa8>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
xorpd  %xmm4,%xmm4
xorpd  %xmm3,%xmm3
mov    (%rsp),%rdx
add    $0x1,%rdx
add    $0x10000,%rbx
mov    %rdx,%rax
mov    %rdx,(%rsp)
cmp    $0x3,%rdx
je     13b7 <Verify+0x2a7>
test   %edi,%edi
jle    1190 <Verify+0x80>
mov    %rsi,%r9
mov    %rsi,%rbp
mov    0x28(%rsp),%r11
mov    0x30(%rsp),%r10
xor    %edi,%edi
jmp    11f3 <Verify+0xe3>
add    $0x1,%rdi
add    $0x8,%r10
add    $0x10000,%r11
add    $0x10000,%rbp
add    $0x8,%r9
cmp    %r8,%rdi
je     12d0 <Verify+0x1c0>
mov    (%rsp),%r12
shl    $0x10,%r12
mov    0x40(%rsp),%rax
add    %r12,%rax
movsd  (%rax,%rdi,8),%xmm3
mov    %rdi,%rax
shl    $0x10,%rax
add    %rsi,%rax
movsd  %xmm3,(%rax,%rdi,8)
test   %rdi,%rdi
je     11d0 <Verify+0xc0>
lea    -0x1(%rdi),%rax
cmp    $0x3,%rax
jae    1230 <Verify+0x120>
xor    %r15d,%r15d
jmp    1287 <Verify+0x177>
nopl   0x0(%rax,%rax,1)
mov    %rdi,%r14
and    $0xfffffffffffffffc,%r14
mov    %r10,%rcx
xor    %r15d,%r15d
nopl   (%rax)
movsd  -0x30000(%rcx),%xmm3
ff
movsd  %xmm3,-0x18(%r11,%r15,8)
movsd  -0x20000(%rcx),%xmm3
ff
movsd  %xmm3,-0x10(%r11,%r15,8)
movsd  -0x10000(%rcx),%xmm3
ff
movsd  %xmm3,-0x8(%r11,%r15,8)
movsd  (%rcx),%xmm3
movsd  %xmm3,(%r11,%r15,8)
add    $0x4,%r15
add    $0x40000,%rcx
cmp    %r15,%r14
jne    1240 <Verify+0x130>
test   $0x3,%dil
mov    0x38(%rsp),%rsi
je     11d0 <Verify+0xc0>
mov    %edi,%ecx
and    $0x3,%ecx
lea    0x0(,%r15,8),%rax
add    %rbp,%rax
shl    $0x10,%r15
add    %r9,%r15
xor    %edx,%edx
nop
movsd  (%r15),%xmm3
movsd  %xmm3,(%rax,%rdx,8)
add    $0x1,%rdx
add    $0x10000,%r15
cmp    %rdx,%rcx
jne    12b0 <Verify+0x1a0>
jmp    11d0 <Verify+0xc0>
nop
mov    0xc(%rsp),%edi
test   %edi,%edi
jle    1190 <Verify+0x80>
xorpd  %xmm3,%xmm3
mov    0x10(%rsp),%rax
xor    %r10d,%r10d
xorpd  %xmm4,%xmm4
mov    0x18(%rsp),%r9
mov    0x20(%rsp),%rcx
jmp    132d <Verify+0x21d>
nopl   0x0(%rax,%rax,1)
lea    (%r9,%r12,1),%rdx
movsd  (%rdx,%r10,8),%xmm2
andpd  %xmm1,%xmm2
maxsd  %xmm2,%xmm3
andpd  %xmm1,%xmm5
addsd  %xmm5,%xmm0
add    $0x1,%r10
add    $0x10000,%rax
cmp    %r8,%r10
je     1198 <Verify+0x88>
lea    (%rcx,%r12,1),%rdx
movsd  (%rdx,%r10,8),%xmm5
xor    %ebp,%ebp
cmp    $0x1,%edi
je     137f <Verify+0x26f>
xchg   %ax,%ax
movsd  -0x8(%rax,%rbp,8),%xmm6
movsd  (%rax,%rbp,8),%xmm7
movsd  -0x8(%rbx,%rbp,8),%xmm2
mulsd  %xmm6,%xmm2
subsd  %xmm2,%xmm5
andpd  %xmm1,%xmm6
maxsd  %xmm6,%xmm4
movsd  (%rbx,%rbp,8),%xmm2
mulsd  %xmm7,%xmm2
subsd  %xmm2,%xmm5
andpd  %xmm1,%xmm7
maxsd  %xmm7,%xmm4
add    $0x2,%rbp
cmp    %rbp,%r13
jne    1340 <Verify+0x230>
test   $0x1,%r8b
je     1300 <Verify+0x1f0>
mov    %r10,%rdx
shl    $0x10,%rdx
add    %rsi,%rdx
movsd  (%rdx,%rbp,8),%xmm2
lea    (%r9,%r12,1),%rdx
movsd  (%rdx,%rbp,8),%xmm6
mulsd  %xmm2,%xmm6
subsd  %xmm6,%xmm5
andpd  %xmm8,%xmm2
maxsd  %xmm2,%xmm4
jmp    1300 <Verify+0x1f0>
mulsd  %xmm3,%xmm4
divsd  %xmm4,%xmm0
mov    $0x1,%eax
ucomisd 0xc44(%rip),%xmm0
jbe    13de <Verify+0x2ce>
lea    0xc43(%rip),%rdi
mov    $0x1,%al
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [28 x i8] c"Residual is too large: %lg\0A\00"
define i32 @Verify(i32 %0, [8192 x double]* nocapture %1, [8192 x double]* nocapture %2, [8192 x double]* nocapture %3, [8192 x double]* nocapture %4) {
%6 = icmp sgt i32 %0, 0
%7 = zext i32 %0 to i64
%8 = zext i32 %0 to i64
%9 = and i64 %7, 1
%10 = icmp eq i32 %0, 1
%11 = and i64 %7, 4294967294
%12 = icmp eq i64 %9, 0
br label %13
13: ; preds = %5, %127
%14 = phi i64 [ 0, %5 ], [ %131, %127 ]
%15 = phi double [ 0.000000e+00, %5 ], [ %128, %127 ]
br i1 %6, label %17, label %127
16: ; preds = %62
br i1 %6, label %65, label %127
17: ; preds = %13, %62
%18 = phi i64 [ %63, %62 ], [ 0, %13 ]
%19 = getelementptr inbounds [8192 x double], [8192 x double]* %2, i64 %14, i64 %18
%20 = load double, double* %19
%21 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %18, i64 %18
store double %20, double* %21
%22 = icmp eq i64 %18, 0
br i1 %22, label %62, label %23
23: ; preds = %17
%24 = add nsw i64 %18, -1
%25 = and i64 %18, 3
%26 = icmp ult i64 %24, 3
br i1 %26, label %50, label %27
27: ; preds = %23
%28 = and i64 %18, 9223372036854775804
br label %29
29: ; preds = %29, %27
%30 = phi i64 [ 0, %27 ], [ %47, %29 ]
%31 = phi i64 [ 0, %27 ], [ %48, %29 ]
%32 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %30, i64 %18
%33 = load double, double* %32
%34 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %18, i64 %30
store double %33, double* %34
%35 = or i64 %30, 1
%36 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %35, i64 %18
%37 = load double, double* %36
%38 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %18, i64 %35
store double %37, double* %38
%39 = or i64 %30, 2
%40 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %39, i64 %18
%41 = load double, double* %40
%42 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %18, i64 %39
store double %41, double* %42
%43 = or i64 %30, 3
%44 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %43, i64 %18
%45 = load double, double* %44
%46 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %18, i64 %43
store double %45, double* %46
%47 = add nuw nsw i64 %30, 4
%48 = add i64 %31, 4
%49 = icmp eq i64 %48, %28
br i1 %49, label %50, label %29
50: ; preds = %29, %23
%51 = phi i64 [ 0, %23 ], [ %47, %29 ]
%52 = icmp eq i64 %25, 0
br i1 %52, label %62, label %53
53: ; preds = %50, %53
%54 = phi i64 [ %59, %53 ], [ %51, %50 ]
%55 = phi i64 [ %60, %53 ], [ 0, %50 ]
%56 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %54, i64 %18
%57 = load double, double* %56
%58 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %18, i64 %54
store double %57, double* %58
%59 = add nuw nsw i64 %54, 1
%60 = add i64 %55, 1
%61 = icmp eq i64 %60, %25
br i1 %61, label %62, label %53
62: ; preds = %50, %53, %17
%63 = add nuw nsw i64 %18, 1
%64 = icmp eq i64 %63, %7
br i1 %64, label %16, label %17
65: ; preds = %16, %115
%66 = phi i64 [ %125, %115 ], [ 0, %16 ]
%67 = phi double [ %122, %115 ], [ 0.000000e+00, %16 ]
%68 = phi double [ %117, %115 ], [ 0.000000e+00, %16 ]
%69 = phi double [ %124, %115 ], [ %15, %16 ]
%70 = getelementptr inbounds [8192 x double], [8192 x double]* %3, i64 %14, i64 %66
%71 = load double, double* %70
br i1 %10, label %99, label %72
72: ; preds = %65, %72
%73 = phi i64 [ %96, %72 ], [ 0, %65 ]
%74 = phi double [ %95, %72 ], [ %68, %65 ]
%75 = phi double [ %92, %72 ], [ %71, %65 ]
%76 = phi i64 [ %97, %72 ], [ 0, %65 ]
%77 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %66, i64 %73
%78 = load double, double* %77
%79 = getelementptr inbounds [8192 x double], [8192 x double]* %4, i64 %14, i64 %73
%80 = load double, double* %79
%81 = fneg double %78
%82 = tail call double @llvm.fmuladd.f64(double %81, double %80, double %75)
%83 = tail call double @llvm.fabs.f64(double %78)
%84 = fcmp ogt double %74, %83
%85 = select i1 %84, double %74, double %83
%86 = or i64 %73, 1
%87 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %66, i64 %86
%88 = load double, double* %87
%89 = getelementptr inbounds [8192 x double], [8192 x double]* %4, i64 %14, i64 %86
%90 = load double, double* %89
%91 = fneg double %88
%92 = tail call double @llvm.fmuladd.f64(double %91, double %90, double %82)
%93 = tail call double @llvm.fabs.f64(double %88)
%94 = fcmp ogt double %85, %93
%95 = select i1 %94, double %85, double %93
%96 = add nuw nsw i64 %73, 2
%97 = add i64 %76, 2
%98 = icmp eq i64 %97, %11
br i1 %98, label %99, label %72
99: ; preds = %72, %65
%100 = phi double [ undef, %65 ], [ %92, %72 ]
%101 = phi double [ undef, %65 ], [ %95, %72 ]
%102 = phi i64 [ 0, %65 ], [ %96, %72 ]
%103 = phi double [ %68, %65 ], [ %95, %72 ]
%104 = phi double [ %71, %65 ], [ %92, %72 ]
br i1 %12, label %115, label %105
105: ; preds = %99
%106 = getelementptr inbounds [8192 x double], [8192 x double]* %1, i64 %66, i64 %102
%107 = load double, double* %106
%108 = getelementptr inbounds [8192 x double], [8192 x double]* %4, i64 %14, i64 %102
%109 = load double, double* %108
%110 = fneg double %107
%111 = tail call double @llvm.fmuladd.f64(double %110, double %109, double %104)
%112 = tail call double @llvm.fabs.f64(double %107)
%113 = fcmp ogt double %103, %112
%114 = select i1 %113, double %103, double %112
br label %115
115: ; preds = %99, %105
%116 = phi double [ %100, %99 ], [ %111, %105 ]
%117 = phi double [ %101, %99 ], [ %114, %105 ]
%118 = getelementptr inbounds [8192 x double], [8192 x double]* %4, i64 %14, i64 %66
%119 = load double, double* %118
%120 = tail call double @llvm.fabs.f64(double %119)
%121 = fcmp ogt double %67, %120
%122 = select i1 %121, double %67, double %120
%123 = tail call double @llvm.fabs.f64(double %116)
%124 = fadd double %69, %123
%125 = add nuw nsw i64 %66, 1
%126 = icmp eq i64 %125, %8
br i1 %126, label %127, label %65
127: ; preds = %115, %13, %16
%128 = phi double [ %15, %16 ], [ %15, %13 ], [ %124, %115 ]
%129 = phi double [ 0.000000e+00, %16 ], [ 0.000000e+00, %13 ], [ %117, %115 ]
%130 = phi double [ 0.000000e+00, %16 ], [ 0.000000e+00, %13 ], [ %122, %115 ]
%131 = add nuw nsw i64 %14, 1
%132 = icmp eq i64 %131, 3
br i1 %132, label %133, label %13
133: ; preds = %127
%134 = fmul double %129, %130
%135 = fdiv double %128, %134
%136 = fcmp ogt double %135, 0x3E501B2B29A4692C
br i1 %136, label %137, label %139
137: ; preds = %133
%138 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @.str, i64 0, i64 0), double %135)
br label %139
139: ; preds = %133, %137
%140 = phi i32 [ 0, %137 ], [ 1, %133 ]
ret i32 %140
}