int compvals(float x1[50][1], float x2[50][1], int n) {
  int flag = 0;
  int i;
  for (i = 0; i < n; i++) {
    if ((x1[i][0] - x2[i][0]) > 0.001)
      flag = 1;
  }
  return (flag);
}


x86 assembly (clang, -O0):
<compvals>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
movl   $0x0,-0x18(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1173 <compvals+0x73>
mov    -0x8(%rbp),%rax
movslq -0x1c(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x10(%rbp),%rax
movslq -0x1c(%rbp),%rcx
subss  (%rax,%rcx,4),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xeb1(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1160 <compvals+0x60>
movl   $0x1,-0x18(%rbp)
jmp    1165 <compvals+0x65>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    111d <compvals+0x1d>
mov    -0x18(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<compvals>:
test   %edx,%edx
jle    1115 <compvals+0x15>
mov    %edx,%r9d
cmp    $0x8,%edx
jae    1118 <compvals+0x18>
xor    %edx,%edx
xor    %eax,%eax
jmp    12e7 <compvals+0x1e7>
xor    %eax,%eax
ret
mov    %r9d,%edx
and    $0xfffffff8,%edx
lea    -0x8(%rdx),%rax
mov    %rax,%r8
shr    $0x3,%r8
add    $0x1,%r8
test   %rax,%rax
je     1328 <compvals+0x228>
mov    %r8,%rcx
and    $0xfffffffffffffffe,%rcx
xorps  %xmm9,%xmm9
xor    %eax,%eax
movapd 0xeb4(%rip),%xmm8
xorps  %xmm10,%xmm10
movups (%rdi,%rax,4),%xmm5
movups 0x10(%rdi,%rax,4),%xmm6
movups 0x20(%rdi,%rax,4),%xmm3
movups 0x30(%rdi,%rax,4),%xmm1
movups (%rsi,%rax,4),%xmm7
subps  %xmm7,%xmm5
movups 0x10(%rsi,%rax,4),%xmm7
subps  %xmm7,%xmm6
movups 0x20(%rsi,%rax,4),%xmm7
subps  %xmm7,%xmm3
cvtps2pd %xmm5,%xmm7
movups 0x30(%rsi,%rax,4),%xmm0
movhlps %xmm5,%xmm5
cvtps2pd %xmm5,%xmm5
subps  %xmm0,%xmm1
cvtps2pd %xmm6,%xmm0
movhlps %xmm6,%xmm6
cvtps2pd %xmm6,%xmm6
movapd %xmm8,%xmm2
cmpltpd %xmm5,%xmm2
movapd %xmm8,%xmm5
cmpltpd %xmm7,%xmm5
movapd %xmm8,%xmm7
cmpltpd %xmm6,%xmm7
movapd %xmm8,%xmm6
cvtps2pd %xmm3,%xmm4
movhlps %xmm3,%xmm3
cvtps2pd %xmm3,%xmm3
cvtps2pd %xmm1,%xmm11
cmpltpd %xmm0,%xmm6
movhlps %xmm1,%xmm1
cvtps2pd %xmm1,%xmm0
movapd %xmm8,%xmm1
cmpltpd %xmm3,%xmm1
orpd   %xmm2,%xmm1
movapd %xmm8,%xmm2
cmpltpd %xmm4,%xmm2
orpd   %xmm5,%xmm2
shufps $0x88,%xmm1,%xmm2
movapd %xmm8,%xmm1
cmpltpd %xmm0,%xmm1
orpd   %xmm7,%xmm1
movapd %xmm8,%xmm0
cmpltpd %xmm11,%xmm0
orpd   %xmm6,%xmm0
shufps $0x88,%xmm1,%xmm0
movaps %xmm2,%xmm1
andnps %xmm9,%xmm1
psubd  %xmm2,%xmm1
movaps %xmm0,%xmm3
andnps %xmm10,%xmm3
psubd  %xmm0,%xmm3
add    $0x10,%rax
movdqa %xmm1,%xmm9
movdqa %xmm3,%xmm10
add    $0xfffffffffffffffe,%rcx
jne    1150 <compvals+0x50>
test   $0x1,%r8b
je     12ba <compvals+0x1ba>
movups (%rdi,%rax,4),%xmm0
movups 0x10(%rdi,%rax,4),%xmm2
movups (%rsi,%rax,4),%xmm4
subps  %xmm4,%xmm0
movups 0x10(%rsi,%rax,4),%xmm4
subps  %xmm4,%xmm2
cvtps2pd %xmm0,%xmm4
movhlps %xmm0,%xmm0
cvtps2pd %xmm0,%xmm0
cvtps2pd %xmm2,%xmm5
movhlps %xmm2,%xmm2
cvtps2pd %xmm2,%xmm2
movapd 0xd8a(%rip),%xmm6
movapd %xmm6,%xmm7
cmpltpd %xmm4,%xmm7
movapd %xmm6,%xmm4
cmpltpd %xmm0,%xmm4
shufps $0x88,%xmm4,%xmm7
movapd %xmm6,%xmm0
cmpltpd %xmm5,%xmm0
cmpltpd %xmm2,%xmm6
shufps $0x88,%xmm6,%xmm0
movaps %xmm7,%xmm2
andnps %xmm1,%xmm2
psubd  %xmm7,%xmm2
movaps %xmm0,%xmm4
andnps %xmm3,%xmm4
psubd  %xmm0,%xmm4
movdqa %xmm2,%xmm1
movdqa %xmm4,%xmm3
pxor   %xmm0,%xmm0
movdqa %xmm1,%xmm2
pcmpeqd %xmm0,%xmm2
pand   %xmm2,%xmm3
pandn  %xmm1,%xmm2
por    %xmm3,%xmm2
pcmpeqd %xmm0,%xmm2
movmskps %xmm2,%ecx
xor    %eax,%eax
cmp    $0xf,%ecx
setne  %al
cmp    %r9,%rdx
jne    12e7 <compvals+0x1e7>
ret
movsd  0xd21(%rip),%xmm0
mov    %eax,%ecx
jmp    130b <compvals+0x20b>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
add    $0x1,%rdx
mov    %eax,%ecx
cmp    %rdx,%r9
je     12e6 <compvals+0x1e6>
movss  (%rdi,%rdx,4),%xmm1
subss  (%rsi,%rdx,4),%xmm1
cvtss2sd %xmm1,%xmm1
ucomisd %xmm0,%xmm1
mov    $0x1,%eax
ja     1300 <compvals+0x200>
mov    %ecx,%eax
jmp    1300 <compvals+0x200>
pxor   %xmm1,%xmm1
xor    %eax,%eax
pxor   %xmm3,%xmm3
test   $0x1,%r8b
jne    1244 <compvals+0x144>
jmp    12ba <compvals+0x1ba>

LLVM IR (-O0):
define i32 @compvals([1 x float]* %0, [1 x float]* %1, i32 %2) {
%4 = alloca [1 x float]*
%5 = alloca [1 x float]*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
store [1 x float]* %0, [1 x float]** %4
store [1 x float]* %1, [1 x float]** %5
store i32 %2, i32* %6
store i32 0, i32* %7
store i32 0, i32* %8
br label %9
9: ; preds = %31, %3
%10 = load i32, i32* %8
%11 = load i32, i32* %6
%12 = icmp slt i32 %10, %11
br i1 %12, label %13, label %34
13: ; preds = %9
%14 = load [1 x float]*, [1 x float]** %4
%15 = load i32, i32* %8
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds [1 x float], [1 x float]* %14, i64 %16
%18 = getelementptr inbounds [1 x float], [1 x float]* %17, i64 0, i64 0
%19 = load float, float* %18
%20 = load [1 x float]*, [1 x float]** %5
%21 = load i32, i32* %8
%22 = sext i32 %21 to i64
%23 = getelementptr inbounds [1 x float], [1 x float]* %20, i64 %22
%24 = getelementptr inbounds [1 x float], [1 x float]* %23, i64 0, i64 0
%25 = load float, float* %24
%26 = fsub float %19, %25
%27 = fpext float %26 to double
%28 = fcmp ogt double %27, 1.000000e-03
br i1 %28, label %29, label %30
29: ; preds = %13
store i32 1, i32* %7
br label %30
30: ; preds = %29, %13
br label %31
31: ; preds = %30
%32 = load i32, i32* %8
%33 = add nsw i32 %32, 1
store i32 %33, i32* %8
br label %9
34: ; preds = %9
%35 = load i32, i32* %7
ret i32 %35
}

LLVM IR (-O2):
define i32 @compvals([1 x float]* nocapture %0, [1 x float]* nocapture %1, i32 %2) {
%4 = icmp sgt i32 %2, 0
br i1 %4, label %5, label %120
5: ; preds = %3
%6 = zext i32 %2 to i64
%7 = icmp ult i32 %2, 8
br i1 %7, label %104, label %8
8: ; preds = %5
%9 = and i64 %6, 4294967288
%10 = add nsw i64 %9, -8
%11 = lshr exact i64 %10, 3
%12 = add nuw nsw i64 %11, 1
%13 = and i64 %12, 1
%14 = icmp eq i64 %10, 0
br i1 %14, label %66, label %15
15: ; preds = %8
%16 = and i64 %12, 4611686018427387902
br label %17
17: ; preds = %17, %15
%18 = phi i64 [ 0, %15 ], [ %63, %17 ]
%19 = phi <4 x i32> [ zeroinitializer, %15 ], [ %60, %17 ]
%20 = phi <4 x i32> [ zeroinitializer, %15 ], [ %62, %17 ]
%21 = phi i64 [ 0, %15 ], [ %64, %17 ]
%22 = getelementptr inbounds [1 x float], [1 x float]* %0, i64 %18, i64 0
%23 = bitcast float* %22 to <4 x float>*
%24 = load <4 x float>, <4 x float>* %23
%25 = getelementptr inbounds [1 x float], [1 x float]* %0, i64 %18, i64 4
%26 = bitcast float* %25 to <4 x float>*
%27 = load <4 x float>, <4 x float>* %26
%28 = getelementptr inbounds [1 x float], [1 x float]* %1, i64 %18, i64 0
%29 = bitcast float* %28 to <4 x float>*
%30 = load <4 x float>, <4 x float>* %29
%31 = getelementptr inbounds [1 x float], [1 x float]* %1, i64 %18, i64 4
%32 = bitcast float* %31 to <4 x float>*
%33 = load <4 x float>, <4 x float>* %32
%34 = fsub <4 x float> %24, %30
%35 = fsub <4 x float> %27, %33
%36 = fpext <4 x float> %34 to <4 x double>
%37 = fpext <4 x float> %35 to <4 x double>
%38 = fcmp ogt <4 x double> %36, <double 1.000000e-03, double 1.000000e-03, double 1.000000e-03, double 1.000000e-03>
%39 = fcmp ogt <4 x double> %37, <double 1.000000e-03, double 1.000000e-03, double 1.000000e-03, double 1.000000e-03>
%40 = or i64 %18, 8
%41 = getelementptr inbounds [1 x float], [1 x float]* %0, i64 %40, i64 0
%42 = bitcast float* %41 to <4 x float>*
%43 = load <4 x float>, <4 x float>* %42
%44 = getelementptr inbounds [1 x float], [1 x float]* %0, i64 %40, i64 4
%45 = bitcast float* %44 to <4 x float>*
%46 = load <4 x float>, <4 x float>* %45
%47 = getelementptr inbounds [1 x float], [1 x float]* %1, i64 %40, i64 0
%48 = bitcast float* %47 to <4 x float>*
%49 = load <4 x float>, <4 x float>* %48
%50 = getelementptr inbounds [1 x float], [1 x float]* %1, i64 %40, i64 4
%51 = bitcast float* %50 to <4 x float>*
%52 = load <4 x float>, <4 x float>* %51
%53 = fsub <4 x float> %43, %49
%54 = fsub <4 x float> %46, %52
%55 = fpext <4 x float> %53 to <4 x double>
%56 = fpext <4 x float> %54 to <4 x double>
%57 = fcmp ogt <4 x double> %55, <double 1.000000e-03, double 1.000000e-03, double 1.000000e-03, double 1.000000e-03>
%58 = fcmp ogt <4 x double> %56, <double 1.000000e-03, double 1.000000e-03, double 1.000000e-03, double 1.000000e-03>
%59 = select <4 x i1> %57, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %38
%60 = select <4 x i1> %59, <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32> %19
%61 = select <4 x i1> %58, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x i1> %39
%62 = select <4 x i1> %61, <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32> %20
%63 = add nuw i64 %18, 16
%64 = add i64 %21, 2
%65 = icmp eq i64 %64, %16
br i1 %65, label %66, label %17
66: ; preds = %17, %8
%67 = phi <4 x i32> [ undef, %8 ], [ %60, %17 ]
%68 = phi <4 x i32> [ undef, %8 ], [ %62, %17 ]
%69 = phi i64 [ 0, %8 ], [ %63, %17 ]
%70 = phi <4 x i32> [ zeroinitializer, %8 ], [ %60, %17 ]
%71 = phi <4 x i32> [ zeroinitializer, %8 ], [ %62, %17 ]
%72 = icmp eq i64 %13, 0
br i1 %72, label %94, label %73
73: ; preds = %66
%74 = getelementptr inbounds [1 x float], [1 x float]* %0, i64 %69, i64 0
%75 = bitcast float* %74 to <4 x float>*
%76 = load <4 x float>, <4 x float>* %75
%77 = getelementptr inbounds [1 x float], [1 x float]* %0, i64 %69, i64 4
%78 = bitcast float* %77 to <4 x float>*
%79 = load <4 x float>, <4 x float>* %78
%80 = getelementptr inbounds [1 x float], [1 x float]* %1, i64 %69, i64 0
%81 = bitcast float* %80 to <4 x float>*
%82 = load <4 x float>, <4 x float>* %81
%83 = getelementptr inbounds [1 x float], [1 x float]* %1, i64 %69, i64 4
%84 = bitcast float* %83 to <4 x float>*
%85 = load <4 x float>, <4 x float>* %84
%86 = fsub <4 x float> %76, %82
%87 = fsub <4 x float> %79, %85
%88 = fpext <4 x float> %86 to <4 x double>
%89 = fpext <4 x float> %87 to <4 x double>
%90 = fcmp ogt <4 x double> %88, <double 1.000000e-03, double 1.000000e-03, double 1.000000e-03, double 1.000000e-03>
%91 = fcmp ogt <4 x double> %89, <double 1.000000e-03, double 1.000000e-03, double 1.000000e-03, double 1.000000e-03>
%92 = select <4 x i1> %90, <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32> %70
%93 = select <4 x i1> %91, <4 x i32> <i32 1, i32 1, i32 1, i32 1>, <4 x i32> %71
br label %94
94: ; preds = %66, %73
%95 = phi <4 x i32> [ %67, %66 ], [ %92, %73 ]
%96 = phi <4 x i32> [ %68, %66 ], [ %93, %73 ]
%97 = icmp eq <4 x i32> %95, zeroinitializer
%98 = select <4 x i1> %97, <4 x i32> %96, <4 x i32> %95
%99 = icmp ne <4 x i32> %98, zeroinitializer
%100 = bitcast <4 x i1> %99 to i4
%101 = icmp ne i4 %100, 0
%102 = zext i1 %101 to i32
%103 = icmp eq i64 %9, %6
br i1 %103, label %120, label %104
104: ; preds = %5, %94
%105 = phi i64 [ 0, %5 ], [ %9, %94 ]
%106 = phi i32 [ 0, %5 ], [ %102, %94 ]
br label %107
107: ; preds = %104, %107
%108 = phi i64 [ %118, %107 ], [ %105, %104 ]
%109 = phi i32 [ %117, %107 ], [ %106, %104 ]
%110 = getelementptr inbounds [1 x float], [1 x float]* %0, i64 %108, i64 0
%111 = load float, float* %110
%112 = getelementptr inbounds [1 x float], [1 x float]* %1, i64 %108, i64 0
%113 = load float, float* %112
%114 = fsub float %111, %113
%115 = fpext float %114 to double
%116 = fcmp ogt double %115, 1.000000e-03
%117 = select i1 %116, i32 1, i32 %109
%118 = add nuw nsw i64 %108, 1
%119 = icmp eq i64 %118, %6
br i1 %119, label %120, label %107
120: ; preds = %107, %94, %3
%121 = phi i32 [ 0, %3 ], [ %102, %94 ], [ %117, %107 ]
ret i32 %121
}