int EtaNIndex_old(float i, float j, int seqlength) {
  return (((int)j) == ((int)i) - 1
              ? (seqlength) * ((seqlength) + 1) / 2 + ((int)i)
              : (((int)i) * (seqlength) + ((int)j) -
                 ((int)i) * (1 + ((int)i)) / 2));
}


x86 assembly (clang, -O0):
<EtaNIndex_old>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
mov    %edi,-0xc(%rbp)
cvttss2si -0x8(%rbp),%eax
cvttss2si -0x4(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jne    1149 <EtaNIndex_old+0x49>
mov    -0xc(%rbp),%eax
mov    -0xc(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
cvttss2si -0x4(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x10(%rbp)
jmp    117e <EtaNIndex_old+0x7e>
cvttss2si -0x4(%rbp),%eax
imul   -0xc(%rbp),%eax
cvttss2si -0x8(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0x14(%rbp)
cvttss2si -0x4(%rbp),%eax
cvttss2si -0x4(%rbp),%ecx
add    $0x1,%ecx
imul   %ecx,%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x14(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x10(%rbp)
mov    -0x10(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<EtaNIndex_old>:
cvttss2si %xmm1,%ecx
cvttss2si %xmm0,%eax
lea    -0x1(%rax),%edx
cmp    %ecx,%edx
jne    1121 <EtaNIndex_old+0x21>
lea    0x1(%rdi),%ecx
imul   %edi,%ecx
mov    %ecx,%edi
shr    $0x1f,%edi
add    %ecx,%edi
sar    %edi
add    %edi,%eax
ret
imul   %eax,%edi
add    %ecx,%edi
lea    0x1(%rax),%ecx
imul   %eax,%ecx
mov    %ecx,%eax
shr    $0x1f,%eax
add    %ecx,%eax
sar    %eax
neg    %eax
add    %edi,%eax
ret

LLVM IR (-O0):
define i32 @EtaNIndex_old(float %0, float %1, i32 %2) {
%4 = alloca float
%5 = alloca float
%6 = alloca i32
store float %0, float* %4
store float %1, float* %5
store i32 %2, i32* %6
%7 = load float, float* %5
%8 = fptosi float %7 to i32
%9 = load float, float* %4
%10 = fptosi float %9 to i32
%11 = sub nsw i32 %10, 1
%12 = icmp eq i32 %8, %11
br i1 %12, label %13, label %22
13: ; preds = %3
%14 = load i32, i32* %6
%15 = load i32, i32* %6
%16 = add nsw i32 %15, 1
%17 = mul nsw i32 %14, %16
%18 = sdiv i32 %17, 2
%19 = load float, float* %4
%20 = fptosi float %19 to i32
%21 = add nsw i32 %18, %20
br label %38
22: ; preds = %3
%23 = load float, float* %4
%24 = fptosi float %23 to i32
%25 = load i32, i32* %6
%26 = mul nsw i32 %24, %25
%27 = load float, float* %5
%28 = fptosi float %27 to i32
%29 = add nsw i32 %26, %28
%30 = load float, float* %4
%31 = fptosi float %30 to i32
%32 = load float, float* %4
%33 = fptosi float %32 to i32
%34 = add nsw i32 1, %33
%35 = mul nsw i32 %31, %34
%36 = sdiv i32 %35, 2
%37 = sub nsw i32 %29, %36
br label %38
38: ; preds = %22, %13
%39 = phi i32 [ %21, %13 ], [ %37, %22 ]
ret i32 %39
}

LLVM IR (-O2):
define i32 @EtaNIndex_old(float %0, float %1, i32 %2) {
%4 = fptosi float %1 to i32
%5 = fptosi float %0 to i32
%6 = add nsw i32 %5, -1
%7 = icmp eq i32 %6, %4
br i1 %7, label %8, label %12
8: ; preds = %3
%9 = add nsw i32 %2, 1
%10 = mul nsw i32 %9, %2
%11 = sdiv i32 %10, 2
br label %18
12: ; preds = %3
%13 = mul nsw i32 %5, %2
%14 = add nsw i32 %13, %4
%15 = add nsw i32 %5, 1
%16 = mul nsw i32 %15, %5
%17 = sdiv i32 %16, -2
br label %18
18: ; preds = %12, %8
%19 = phi i32 [ %17, %12 ], [ %5, %8 ]
%20 = phi i32 [ %14, %12 ], [ %11, %8 ]
%21 = add i32 %20, %19
ret i32 %21
}