void tdot_subtract_energy_edge2(float *tdot, int rad, float kappa,
                                float lambda) {
  int i, j;
  for (j = -rad + 1; j < rad; j++) {
    for (i = -rad + 1; i < rad; i++) {
      if ((i == 0) && (j == 0)) {
      } else {
        *tdot -= kappa;
      }
      tdot++;
    }
  }
}


x86 assembly (clang, -O0):
<tdot_subtract_energy_edge2>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
movss  %xmm0,-0x10(%rbp)
movss  %xmm1,-0x14(%rbp)
xor    %eax,%eax
sub    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    119e <tdot_subtract_energy_edge2+0x9e>
xor    %eax,%eax
sub    -0xc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
mov    -0x18(%rbp),%eax
cmp    -0xc(%rbp),%eax
jge    118b <tdot_subtract_energy_edge2+0x8b>
cmpl   $0x0,-0x18(%rbp)
jne    115c <tdot_subtract_energy_edge2+0x5c>
cmpl   $0x0,-0x1c(%rbp)
jne    115c <tdot_subtract_energy_edge2+0x5c>
jmp    1171 <tdot_subtract_energy_edge2+0x71>
movss  -0x10(%rbp),%xmm1
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,(%rax)
mov    -0x8(%rbp),%rax
add    $0x4,%rax
mov    %rax,-0x8(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1137 <tdot_subtract_energy_edge2+0x37>
jmp    1190 <tdot_subtract_energy_edge2+0x90>
mov    -0x1c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x1c(%rbp)
jmp    1120 <tdot_subtract_energy_edge2+0x20>
pop    %rbp
ret

x86 assembly (clang, -O2):
<tdot_subtract_energy_edge2>:
mov    $0x1,%r11d
sub    %esi,%r11d
cmp    %esi,%r11d
jge    11b5 <tdot_subtract_energy_edge2+0xb5>
mov    %esi,%r8d
and    $0x7fffffff,%r8d
mov    %esi,%r9d
neg    %r9d
lea    (%rsi,%rsi,1),%r10d
add    $0xfffffffe,%r10d
jmp    113c <tdot_subtract_energy_edge2+0x3c>
nopl   0x0(%rax)
sub    %rdx,%rdi
add    $0x1,%r11d
cmp    %esi,%r11d
je     11b5 <tdot_subtract_energy_edge2+0xb5>
cmp    $0x1,%esi
jne    1146 <tdot_subtract_energy_edge2+0x46>
test   %r11d,%r11d
je     1152 <tdot_subtract_energy_edge2+0x52>
movss  (%rdi),%xmm1
subss  %xmm0,%xmm1
movss  %xmm1,(%rdi)
add    $0x4,%rdi
cmp    $0x1,%r8d
je     1133 <tdot_subtract_energy_edge2+0x33>
xor    %edx,%edx
xor    %ecx,%ecx
jmp    118d <tdot_subtract_energy_edge2+0x8d>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movss  0x4(%rdi,%rcx,4),%xmm1
subss  %xmm0,%xmm1
movss  %xmm1,0x4(%rdi,%rcx,4)
add    $0x2,%rcx
add    $0xfffffffffffffff8,%rdx
cmp    %ecx,%r10d
je     1130 <tdot_subtract_energy_edge2+0x30>
lea    (%r9,%rcx,1),%rax
cmp    $0xfffffffe,%eax
jne    119b <tdot_subtract_energy_edge2+0x9b>
test   %r11d,%r11d
je     11a9 <tdot_subtract_energy_edge2+0xa9>
movss  (%rdi,%rcx,4),%xmm1
subss  %xmm0,%xmm1
movss  %xmm1,(%rdi,%rcx,4)
cmp    $0xfffffffd,%eax
jne    1170 <tdot_subtract_energy_edge2+0x70>
test   %r11d,%r11d
je     1180 <tdot_subtract_energy_edge2+0x80>
jmp    1170 <tdot_subtract_energy_edge2+0x70>
ret

LLVM IR (-O0):
define void @tdot_subtract_energy_edge2(float* %0, i32 %1, float %2, float %3) {
%5 = alloca float*
%6 = alloca i32
%7 = alloca float
%8 = alloca float
%9 = alloca i32
%10 = alloca i32
store float* %0, float** %5
store i32 %1, i32* %6
store float %2, float* %7
store float %3, float* %8
%11 = load i32, i32* %6
%12 = sub nsw i32 0, %11
%13 = add nsw i32 %12, 1
store i32 %13, i32* %10
br label %14
14: ; preds = %45, %4
%15 = load i32, i32* %10
%16 = load i32, i32* %6
%17 = icmp slt i32 %15, %16
br i1 %17, label %18, label %48
18: ; preds = %14
%19 = load i32, i32* %6
%20 = sub nsw i32 0, %19
%21 = add nsw i32 %20, 1
store i32 %21, i32* %9
br label %22
22: ; preds = %41, %18
%23 = load i32, i32* %9
%24 = load i32, i32* %6
%25 = icmp slt i32 %23, %24
br i1 %25, label %26, label %44
26: ; preds = %22
%27 = load i32, i32* %9
%28 = icmp eq i32 %27, 0
br i1 %28, label %29, label %33
29: ; preds = %26
%30 = load i32, i32* %10
%31 = icmp eq i32 %30, 0
br i1 %31, label %32, label %33
32: ; preds = %29
br label %38
33: ; preds = %29, %26
%34 = load float, float* %7
%35 = load float*, float** %5
%36 = load float, float* %35
%37 = fsub float %36, %34
store float %37, float* %35
br label %38
38: ; preds = %33, %32
%39 = load float*, float** %5
%40 = getelementptr inbounds float, float* %39, i32 1
store float* %40, float** %5
br label %41
41: ; preds = %38
%42 = load i32, i32* %9
%43 = add nsw i32 %42, 1
store i32 %43, i32* %9
br label %22
44: ; preds = %22
br label %45
45: ; preds = %44
%46 = load i32, i32* %10
%47 = add nsw i32 %46, 1
store i32 %47, i32* %10
br label %14
48: ; preds = %14
ret void
}

LLVM IR (-O2):
define void @tdot_subtract_energy_edge2(float* nocapture %0, i32 %1, float %2, float %3) {
%5 = sub i32 1, %1
%6 = icmp slt i32 %5, %1
br i1 %6, label %7, label %45
7: ; preds = %4
%8 = icmp eq i32 %1, 1
%9 = sub i32 2, %1
%10 = and i32 %1, 2147483647
%11 = icmp eq i32 %10, 1
br label %12
12: ; preds = %7, %41
%13 = phi i32 [ %43, %41 ], [ %5, %7 ]
%14 = phi float* [ %42, %41 ], [ %0, %7 ]
%15 = icmp eq i32 %13, 0
%16 = select i1 %8, i1 %15, i1 false
br i1 %16, label %20, label %17
17: ; preds = %12
%18 = load float, float* %14
%19 = fsub float %18, %2
store float %19, float* %14
br label %20
20: ; preds = %17, %12
%21 = getelementptr inbounds float, float* %14, i64 1
br i1 %11, label %41, label %22
22: ; preds = %20, %37
%23 = phi i32 [ %39, %37 ], [ %9, %20 ]
%24 = phi float* [ %38, %37 ], [ %21, %20 ]
%25 = icmp eq i32 %23, 0
%26 = select i1 %25, i1 %15, i1 false
br i1 %26, label %30, label %27
27: ; preds = %22
%28 = load float, float* %24
%29 = fsub float %28, %2
store float %29, float* %24
br label %30
30: ; preds = %22, %27
%31 = getelementptr inbounds float, float* %24, i64 1
%32 = icmp eq i32 %23, -1
%33 = select i1 %32, i1 %15, i1 false
br i1 %33, label %37, label %34
34: ; preds = %30
%35 = load float, float* %31
%36 = fsub float %35, %2
store float %36, float* %31
br label %37
37: ; preds = %34, %30
%38 = getelementptr inbounds float, float* %24, i64 2
%39 = add nsw i32 %23, 2
%40 = icmp eq i32 %39, %1
br i1 %40, label %41, label %22
41: ; preds = %37, %20
%42 = phi float* [ %21, %20 ], [ %38, %37 ]
%43 = add nsw i32 %13, 1
%44 = icmp eq i32 %43, %1
br i1 %44, label %45, label %12
45: ; preds = %41, %4
ret void
}