void inten_const(err, Ix, Iy, It, u, v, nx, ny) float *err, *Ix, *Iy, *It, *u,
    *v;
int nx, ny;
{
  int index, i, j;
  for (i = 0; i < ny; i++) {
    for (j = 0; j < nx; j++) {
      index = (i * nx) + j;
      err[index] = Ix[index] * u[index] + Iy[index] * v[index] + It[index];
    }
  }
}


x86 assembly (clang, -O0):
<inten_const>:
push   %rbp
mov    %rsp,%rbp
mov    0x18(%rbp),%eax
mov    0x10(%rbp),%eax
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   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    0x18(%rbp),%eax
jge    11cc <inten_const+0xcc>
movl   $0x0,-0x3c(%rbp)
mov    -0x3c(%rbp),%eax
cmp    0x10(%rbp),%eax
jge    11b9 <inten_const+0xb9>
mov    -0x38(%rbp),%eax
imul   0x10(%rbp),%eax
add    -0x3c(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x10(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm0
mov    -0x28(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm2
mov    -0x18(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  (%rax,%rcx,4),%xmm1
mov    -0x30(%rbp),%rax
movslq -0x34(%rbp),%rcx
mulss  (%rax,%rcx,4),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
mov    -0x20(%rbp),%rax
movslq -0x34(%rbp),%rcx
addss  (%rax,%rcx,4),%xmm0
mov    -0x8(%rbp),%rax
movslq -0x34(%rbp),%rcx
movss  %xmm0,(%rax,%rcx,4)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    113c <inten_const+0x3c>
jmp    11be <inten_const+0xbe>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1129 <inten_const+0x29>
pop    %rbp
ret

x86 assembly (clang, -O2):
<inten_const>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    %r9,-0x68(%rsp)
mov    %r8,-0x18(%rsp)
mov    %rcx,-0x20(%rsp)
mov    %rdx,-0x28(%rsp)
mov    %rsi,-0x30(%rsp)
mov    %rdi,-0x38(%rsp)
mov    0x88(%rsp),%eax
test   %eax,%eax
jle    1555 <inten_const+0x455>
mov    0x80(%rsp),%r8d
movslq %r8d,%rcx
mov    %eax,%eax
mov    %rax,0x40(%rsp)
mov    %ecx,%esi
mov    %esi,%eax
and    $0xfffffff8,%eax
mov    %rax,0x20(%rsp)
mov    %rsi,%rax
neg    %rax
mov    %rax,0x28(%rsp)
mov    -0x38(%rsp),%rax
lea    0x10(%rax),%rdx
mov    %rdx,0x8(%rsp)
mov    %rcx,0x30(%rsp)
lea    0x0(,%rcx,4),%rcx
mov    %rcx,0x38(%rsp)
mov    -0x20(%rsp),%r13
lea    0x10(%r13),%r12
mov    -0x68(%rsp),%rdx
lea    0x10(%rdx),%r14
mov    -0x28(%rsp),%rdi
lea    0x10(%rdi),%r15
mov    -0x18(%rsp),%rcx
lea    0x10(%rcx),%r10
mov    -0x30(%rsp),%rbx
lea    0x10(%rbx),%r11
mov    %rsi,-0x78(%rsp)
lea    0x0(,%rsi,4),%rsi
and    $0xffffffffffffffe0,%rsi
mov    %rsi,0x18(%rsp)
lea    0x4(%rbx),%r9
mov    %r8d,%ebp
lea    0x4(%rcx),%r8
lea    0x4(%rdi),%rcx
add    $0x4,%rdx
lea    0x4(%r13),%rsi
lea    0x4(%rax),%rdi
xor    %eax,%eax
mov    %rax,-0x10(%rsp)
jmp    1240 <inten_const+0x140>
nopl   0x0(%rax,%rax,1)
mov    -0x10(%rsp),%rax
mov    %ebp,%r13d
mov    %rax,%rbp
add    $0x1,%rbp
mov    0x38(%rsp),%rbx
add    %rbx,0x8(%rsp)
add    %rbx,%r12
add    %rbx,%r14
add    %rbx,%r15
add    %rbx,%r10
add    %rbx,%r11
add    %rbx,%r9
add    %rbx,%r8
add    %rbx,%rcx
add    %rbx,%rdx
add    %rbx,%rsi
add    %rbx,%rdi
mov    %rbp,%rax
mov    %rbp,-0x10(%rsp)
cmp    0x40(%rsp),%rbp
mov    %r13d,%ebp
je     1555 <inten_const+0x455>
test   %ebp,%ebp
jle    11f0 <inten_const+0xf0>
mov    -0x10(%rsp),%rax
imul   0x30(%rsp),%rax
cmp    $0x8,%ebp
mov    %rax,0x10(%rsp)
jae    1350 <inten_const+0x250>
xor    %eax,%eax
mov    -0x78(%rsp),%rbx
mov    %rax,%r13
test   $0x1,%bl
je     12c2 <inten_const+0x1c2>
mov    0x10(%rsp),%rbp
add    %rax,%rbp
mov    -0x28(%rsp),%rbx
movss  (%rbx,%rbp,4),%xmm0
mov    -0x68(%rsp),%rbx
mulss  (%rbx,%rbp,4),%xmm0
mov    -0x30(%rsp),%rbx
movss  (%rbx,%rbp,4),%xmm1
mov    -0x18(%rsp),%rbx
mulss  (%rbx,%rbp,4),%xmm1
addss  %xmm0,%xmm1
mov    -0x20(%rsp),%rbx
addss  (%rbx,%rbp,4),%xmm1
mov    -0x38(%rsp),%rbx
movss  %xmm1,(%rbx,%rbp,4)
mov    0x80(%rsp),%ebp
mov    %rax,%r13
or     $0x1,%r13
not    %rax
cmp    0x28(%rsp),%rax
mov    -0x78(%rsp),%rbx
je     11f0 <inten_const+0xf0>
cs nopw 0x0(%rax,%rax,1)
nop
movss  -0x4(%r9,%r13,4),%xmm0
movss  -0x4(%rcx,%r13,4),%xmm1
mulss  -0x4(%rdx,%r13,4),%xmm1
mulss  -0x4(%r8,%r13,4),%xmm0
addss  %xmm1,%xmm0
addss  -0x4(%rsi,%r13,4),%xmm0
movss  %xmm0,-0x4(%rdi,%r13,4)
movss  (%r9,%r13,4),%xmm0
movss  (%rcx,%r13,4),%xmm1
mulss  (%rdx,%r13,4),%xmm1
mulss  (%r8,%r13,4),%xmm0
addss  %xmm1,%xmm0
addss  (%rsi,%r13,4),%xmm0
movss  %xmm0,(%rdi,%r13,4)
add    $0x2,%r13
cmp    %r13,%rbx
jne    12e0 <inten_const+0x1e0>
jmp    11f0 <inten_const+0xf0>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    -0x78(%rsp),%rbx
add    %rax,%rbx
mov    %rbx,-0x70(%rsp)
mov    -0x38(%rsp),%r13
mov    %rax,%rbp
lea    0x0(%r13,%rax,4),%rax
mov    %rax,-0x8(%rsp)
lea    0x0(%r13,%rbx,4),%rax
mov    %rax,(%rsp)
mov    -0x30(%rsp),%r13
lea    0x0(%r13,%rbp,4),%rax
mov    %rax,-0x48(%rsp)
lea    0x0(%r13,%rbx,4),%rax
mov    %rax,-0x40(%rsp)
mov    -0x18(%rsp),%r13
lea    0x0(%r13,%rbp,4),%rax
mov    %rax,-0x50(%rsp)
lea    0x0(,%rbx,4),%rax
add    %r13,%rax
mov    %rax,-0x58(%rsp)
mov    -0x8(%rsp),%rbx
cmp    -0x40(%rsp),%rbx
mov    -0x28(%rsp),%r13
lea    0x0(%r13,%rbp,4),%rax
mov    %rax,-0x60(%rsp)
setb   -0x40(%rsp)
mov    (%rsp),%rax
cmp    %rax,-0x48(%rsp)
setb   -0x48(%rsp)
cmp    -0x58(%rsp),%rbx
mov    -0x70(%rsp),%rbp
lea    0x0(%r13,%rbp,4),%rbp
setb   -0x58(%rsp)
cmp    %rax,-0x50(%rsp)
setb   -0x50(%rsp)
cmp    %rbp,%rbx
mov    -0x68(%rsp),%r13
mov    -0x70(%rsp),%rbp
lea    0x0(%r13,%rbp,4),%rbp
setb   -0x79(%rsp)
cmp    %rax,-0x60(%rsp)
setb   -0x60(%rsp)
cmp    %rbp,%rbx
mov    -0x68(%rsp),%rbx
mov    0x10(%rsp),%rbp
lea    (%rbx,%rbp,4),%rbx
setb   -0x7a(%rsp)
cmp    %rax,%rbx
mov    -0x20(%rsp),%rbx
mov    -0x70(%rsp),%rax
lea    (%rbx,%rax,4),%r13
setb   -0x70(%rsp)
cmp    %r13,-0x8(%rsp)
lea    (%rbx,%rbp,4),%rax
setb   %r13b
cmp    (%rsp),%rax
setb   %al
mov    -0x48(%rsp),%bl
test   %bl,-0x40(%rsp)
jne    1547 <inten_const+0x447>
mov    -0x50(%rsp),%bl
and    %bl,-0x58(%rsp)
mov    0x80(%rsp),%ebp
jne    125d <inten_const+0x15d>
mov    -0x60(%rsp),%bl
and    %bl,-0x79(%rsp)
jne    125d <inten_const+0x15d>
mov    -0x70(%rsp),%bl
and    %bl,-0x7a(%rsp)
jne    125d <inten_const+0x15d>
mov    %eax,%ebx
mov    $0x0,%eax
and    %bl,%r13b
mov    -0x78(%rsp),%rbx
jne    1264 <inten_const+0x164>
xor    %ebx,%ebx
mov    0x18(%rsp),%rax
mov    0x8(%rsp),%rbp
nopl   0x0(%rax,%rax,1)
movups -0x10(%r11,%rbx,1),%xmm0
movups (%r11,%rbx,1),%xmm1
movups -0x10(%r10,%rbx,1),%xmm2
mulps  %xmm0,%xmm2
movups (%r10,%rbx,1),%xmm0
mulps  %xmm1,%xmm0
movups -0x10(%r15,%rbx,1),%xmm1
movups (%r15,%rbx,1),%xmm3
movups -0x10(%r14,%rbx,1),%xmm4
mulps  %xmm1,%xmm4
addps  %xmm2,%xmm4
movups (%r14,%rbx,1),%xmm1
mulps  %xmm3,%xmm1
addps  %xmm0,%xmm1
movups -0x10(%r12,%rbx,1),%xmm0
addps  %xmm4,%xmm0
movups (%r12,%rbx,1),%xmm2
addps  %xmm1,%xmm2
movups %xmm0,-0x10(%rbp,%rbx,1)
movups %xmm2,0x0(%rbp,%rbx,1)
add    $0x20,%rbx
cmp    %rbx,%rax
jne    14c0 <inten_const+0x3c0>
mov    0x20(%rsp),%rbp
mov    %rbp,%rax
mov    -0x78(%rsp),%r13
cmp    %r13,%rbp
mov    0x80(%rsp),%ebp
mov    %r13,%rbx
je     11f0 <inten_const+0xf0>
jmp    1264 <inten_const+0x164>
xor    %eax,%eax
mov    0x80(%rsp),%ebp
jmp    125f <inten_const+0x15f>
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @inten_const(float* %0, float* %1, float* %2, float* %3, float* %4, float* %5, i32 %6, i32 %7) {
%9 = alloca float*
%10 = alloca float*
%11 = alloca float*
%12 = alloca float*
%13 = alloca float*
%14 = alloca float*
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
store float* %0, float** %9
store float* %1, float** %10
store float* %2, float** %11
store float* %3, float** %12
store float* %4, float** %13
store float* %5, float** %14
store i32 %6, i32* %15
store i32 %7, i32* %16
store i32 0, i32* %18
br label %20
20: ; preds = %71, %8
%21 = load i32, i32* %18
%22 = load i32, i32* %16
%23 = icmp slt i32 %21, %22
br i1 %23, label %24, label %74
24: ; preds = %20
store i32 0, i32* %19
br label %25
25: ; preds = %67, %24
%26 = load i32, i32* %19
%27 = load i32, i32* %15
%28 = icmp slt i32 %26, %27
br i1 %28, label %29, label %70
29: ; preds = %25
%30 = load i32, i32* %18
%31 = load i32, i32* %15
%32 = mul nsw i32 %30, %31
%33 = load i32, i32* %19
%34 = add nsw i32 %32, %33
store i32 %34, i32* %17
%35 = load float*, float** %10
%36 = load i32, i32* %17
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds float, float* %35, i64 %37
%39 = load float, float* %38
%40 = load float*, float** %13
%41 = load i32, i32* %17
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds float, float* %40, i64 %42
%44 = load float, float* %43
%45 = load float*, float** %11
%46 = load i32, i32* %17
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds float, float* %45, i64 %47
%49 = load float, float* %48
%50 = load float*, float** %14
%51 = load i32, i32* %17
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds float, float* %50, i64 %52
%54 = load float, float* %53
%55 = fmul float %49, %54
%56 = call float @llvm.fmuladd.f32(float %39, float %44, float %55)
%57 = load float*, float** %12
%58 = load i32, i32* %17
%59 = sext i32 %58 to i64
%60 = getelementptr inbounds float, float* %57, i64 %59
%61 = load float, float* %60
%62 = fadd float %56, %61
%63 = load float*, float** %9
%64 = load i32, i32* %17
%65 = sext i32 %64 to i64
%66 = getelementptr inbounds float, float* %63, i64 %65
store float %62, float* %66
br label %67
67: ; preds = %29
%68 = load i32, i32* %19
%69 = add nsw i32 %68, 1
store i32 %69, i32* %19
br label %25
70: ; preds = %25
br label %71
71: ; preds = %70
%72 = load i32, i32* %18
%73 = add nsw i32 %72, 1
store i32 %73, i32* %18
br label %20
74: ; preds = %20
ret void
}

LLVM IR (-O2):
define void @inten_const(float* nocapture writeonly %0, float* nocapture %1, float* nocapture %2, float* nocapture %3, float* nocapture %4, float* nocapture %5, i32 %6, i32 %7) {
%9 = icmp sgt i32 %7, 0
br i1 %9, label %10, label %166
10: ; preds = %8
%11 = icmp sgt i32 %6, 0
%12 = sext i32 %6 to i64
%13 = zext i32 %7 to i64
%14 = zext i32 %6 to i64
%15 = icmp ult i32 %6, 8
%16 = and i64 %14, 4294967288
%17 = icmp eq i64 %16, %14
%18 = and i64 %14, 1
%19 = icmp eq i64 %18, 0
%20 = sub nsw i64 0, %14
br label %21
21: ; preds = %10, %163
%22 = phi i64 [ 0, %10 ], [ %164, %163 ]
%23 = mul i64 %22, %12
%24 = getelementptr float, float* %0, i64 %23
%25 = add i64 %23, %14
%26 = getelementptr float, float* %0, i64 %25
%27 = getelementptr float, float* %1, i64 %23
%28 = getelementptr float, float* %1, i64 %25
%29 = getelementptr float, float* %4, i64 %23
%30 = getelementptr float, float* %4, i64 %25
%31 = getelementptr float, float* %2, i64 %23
%32 = getelementptr float, float* %2, i64 %25
%33 = getelementptr float, float* %5, i64 %23
%34 = getelementptr float, float* %5, i64 %25
%35 = getelementptr float, float* %3, i64 %23
%36 = getelementptr float, float* %3, i64 %25
br i1 %11, label %37, label %163
37: ; preds = %21
%38 = mul nsw i64 %22, %12
br i1 %15, label %105, label %39
39: ; preds = %37
%40 = icmp ult float* %24, %28
%41 = icmp ult float* %27, %26
%42 = and i1 %40, %41
%43 = icmp ult float* %24, %30
%44 = icmp ult float* %29, %26
%45 = and i1 %43, %44
%46 = or i1 %42, %45
%47 = icmp ult float* %24, %32
%48 = icmp ult float* %31, %26
%49 = and i1 %47, %48
%50 = or i1 %46, %49
%51 = icmp ult float* %24, %34
%52 = icmp ult float* %33, %26
%53 = and i1 %51, %52
%54 = or i1 %50, %53
%55 = icmp ult float* %24, %36
%56 = icmp ult float* %35, %26
%57 = and i1 %55, %56
%58 = or i1 %54, %57
br i1 %58, label %105, label %59
59: ; preds = %39, %59
%60 = phi i64 [ %102, %59 ], [ 0, %39 ]
%61 = add nsw i64 %60, %38
%62 = getelementptr inbounds float, float* %1, i64 %61
%63 = bitcast float* %62 to <4 x float>*
%64 = load <4 x float>, <4 x float>* %63
%65 = getelementptr inbounds float, float* %62, i64 4
%66 = bitcast float* %65 to <4 x float>*
%67 = load <4 x float>, <4 x float>* %66
%68 = getelementptr inbounds float, float* %4, i64 %61
%69 = bitcast float* %68 to <4 x float>*
%70 = load <4 x float>, <4 x float>* %69
%71 = getelementptr inbounds float, float* %68, i64 4
%72 = bitcast float* %71 to <4 x float>*
%73 = load <4 x float>, <4 x float>* %72
%74 = getelementptr inbounds float, float* %2, i64 %61
%75 = bitcast float* %74 to <4 x float>*
%76 = load <4 x float>, <4 x float>* %75
%77 = getelementptr inbounds float, float* %74, i64 4
%78 = bitcast float* %77 to <4 x float>*
%79 = load <4 x float>, <4 x float>* %78
%80 = getelementptr inbounds float, float* %5, i64 %61
%81 = bitcast float* %80 to <4 x float>*
%82 = load <4 x float>, <4 x float>* %81
%83 = getelementptr inbounds float, float* %80, i64 4
%84 = bitcast float* %83 to <4 x float>*
%85 = load <4 x float>, <4 x float>* %84
%86 = fmul <4 x float> %76, %82
%87 = fmul <4 x float> %79, %85
%88 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %64, <4 x float> %70, <4 x float> %86)
%89 = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %67, <4 x float> %73, <4 x float> %87)
%90 = getelementptr inbounds float, float* %3, i64 %61
%91 = bitcast float* %90 to <4 x float>*
%92 = load <4 x float>, <4 x float>* %91
%93 = getelementptr inbounds float, float* %90, i64 4
%94 = bitcast float* %93 to <4 x float>*
%95 = load <4 x float>, <4 x float>* %94
%96 = fadd <4 x float> %92, %88
%97 = fadd <4 x float> %95, %89
%98 = getelementptr inbounds float, float* %0, i64 %61
%99 = bitcast float* %98 to <4 x float>*
store <4 x float> %96, <4 x float>* %99
%100 = getelementptr inbounds float, float* %98, i64 4
%101 = bitcast float* %100 to <4 x float>*
store <4 x float> %97, <4 x float>* %101
%102 = add nuw i64 %60, 8
%103 = icmp eq i64 %102, %16
br i1 %103, label %104, label %59
104: ; preds = %59
br i1 %17, label %163, label %105
105: ; preds = %39, %37, %104
%106 = phi i64 [ 0, %39 ], [ 0, %37 ], [ %16, %104 ]
%107 = xor i64 %106, -1
br i1 %19, label %125, label %108
108: ; preds = %105
%109 = add nsw i64 %106, %38
%110 = getelementptr inbounds float, float* %1, i64 %109
%111 = load float, float* %110
%112 = getelementptr inbounds float, float* %4, i64 %109
%113 = load float, float* %112
%114 = getelementptr inbounds float, float* %2, i64 %109
%115 = load float, float* %114
%116 = getelementptr inbounds float, float* %5, i64 %109
%117 = load float, float* %116
%118 = fmul float %115, %117
%119 = tail call float @llvm.fmuladd.f32(float %111, float %113, float %118)
%120 = getelementptr inbounds float, float* %3, i64 %109
%121 = load float, float* %120
%122 = fadd float %121, %119
%123 = getelementptr inbounds float, float* %0, i64 %109
store float %122, float* %123
%124 = or i64 %106, 1
br label %125
125: ; preds = %108, %105
%126 = phi i64 [ %106, %105 ], [ %124, %108 ]
%127 = icmp eq i64 %107, %20
br i1 %127, label %163, label %128
128: ; preds = %125, %128
%129 = phi i64 [ %161, %128 ], [ %126, %125 ]
%130 = add nsw i64 %129, %38
%131 = getelementptr inbounds float, float* %1, i64 %130
%132 = load float, float* %131
%133 = getelementptr inbounds float, float* %4, i64 %130
%134 = load float, float* %133
%135 = getelementptr inbounds float, float* %2, i64 %130
%136 = load float, float* %135
%137 = getelementptr inbounds float, float* %5, i64 %130
%138 = load float, float* %137
%139 = fmul float %136, %138
%140 = tail call float @llvm.fmuladd.f32(float %132, float %134, float %139)
%141 = getelementptr inbounds float, float* %3, i64 %130
%142 = load float, float* %141
%143 = fadd float %142, %140
%144 = getelementptr inbounds float, float* %0, i64 %130
store float %143, float* %144
%145 = add nuw nsw i64 %129, 1
%146 = add nsw i64 %145, %38
%147 = getelementptr inbounds float, float* %1, i64 %146
%148 = load float, float* %147
%149 = getelementptr inbounds float, float* %4, i64 %146
%150 = load float, float* %149
%151 = getelementptr inbounds float, float* %2, i64 %146
%152 = load float, float* %151
%153 = getelementptr inbounds float, float* %5, i64 %146
%154 = load float, float* %153
%155 = fmul float %152, %154
%156 = tail call float @llvm.fmuladd.f32(float %148, float %150, float %155)
%157 = getelementptr inbounds float, float* %3, i64 %146
%158 = load float, float* %157
%159 = fadd float %158, %156
%160 = getelementptr inbounds float, float* %0, i64 %146
store float %159, float* %160
%161 = add nuw nsw i64 %129, 2
%162 = icmp eq i64 %161, %14
br i1 %162, label %163, label %128
163: ; preds = %125, %128, %104, %21
%164 = add nuw nsw i64 %22, 1
%165 = icmp eq i64 %164, %13
br i1 %165, label %166, label %21
166: ; preds = %163, %8
ret void
}