void bioR3_3d(HHH, HHL, HLH, HLL, LHH, LHL, LLH, LLL, outvector, xlength,
              ylength, zlength, ifnotAllskip) float *HLL,
    *HLH, *HHL, *HHH;
float *LLL, *LLH, *LHL, *LHH;
float *outvector;
int xlength, ylength;
int ifnotAllskip;
{
  float ix0 = 0.5;
  float iX1;
  float iX0;
  int pairity;
  float Norm;
  int dim;
  dim = (xlength > 1) + (ylength > 1) + (zlength > 1);
  if (ifnotAllskip) {
    iX1 = ix0;
    iX0 = 1.0 / ix0;
  } else {
    iX1 = 1.0;
    iX0 = 1.0;
  }
  iX1 = 1 / iX1;
  if (dim == 3)
    Norm = 1.0 / ix0;
  if (dim == 2)
    Norm = 1.0;
  if (dim == 1)
    Norm = ix0;
  if (xlength > 1)
    Norm *= (1.0);
  if (ylength > 1)
    Norm *= (1.0);
  if (zlength > 1)
    Norm *= (1.0);
  if (dim == 0) {
    Norm = 1.0;
    iX0 = 1.0;
    iX1 = 1.0;
  }
  if (ifnotAllskip) {
    bioR1__3d(HHH, HHL, HLH, HLL, LHH, LHL, LLH, LLL, outvector, xlength,
              ylength, zlength, iX1, Norm);
    pairity = 1;
    bio_3d_postmult(outvector, xlength, ylength, zlength, iX0, pairity);
  } else
    bioR1_3dskip(LLL, outvector, xlength, ylength, zlength, iX1, Norm);
}


x86 assembly (clang, -O0):
<bioR3_3d>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %rbx
sub    $0x78,%rsp
mov    0x40(%rbp),%eax
mov    0x38(%rbp),%eax
mov    0x30(%rbp),%eax
mov    0x28(%rbp),%eax
mov    0x20(%rbp),%rax
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x20(%rbp)
mov    %rsi,-0x28(%rbp)
mov    %rdx,-0x30(%rbp)
mov    %rcx,-0x38(%rbp)
mov    %r8,-0x40(%rbp)
mov    %r9,-0x48(%rbp)
movss  0xe8b(%rip),%xmm0
movss  %xmm0,-0x4c(%rbp)
cmpl   $0x1,0x28(%rbp)
setg   %al
and    $0x1,%al
movzbl %al,%eax
cmpl   $0x1,0x30(%rbp)
setg   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
cmpl   $0x1,0x38(%rbp)
setg   %cl
and    $0x1,%cl
movzbl %cl,%ecx
add    %ecx,%eax
mov    %eax,-0x60(%rbp)
cmpl   $0x0,0x40(%rbp)
je     11de <bioR3_3d+0xae>
movss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe3c(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
jmp    11f8 <bioR3_3d+0xc8>
movss  0xe1e(%rip),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  0xe11(%rip),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  0xe04(%rip),%xmm0
divss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
cmpl   $0x3,-0x60(%rbp)
jne    1232 <bioR3_3d+0x102>
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xde3(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
cmpl   $0x2,-0x60(%rbp)
jne    1249 <bioR3_3d+0x119>
movss  0xdc0(%rip),%xmm0
movss  %xmm0,-0x5c(%rbp)
cmpl   $0x1,-0x60(%rbp)
jne    125d <bioR3_3d+0x12d>
movss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
cmpl   $0x1,0x28(%rbp)
jle    1285 <bioR3_3d+0x155>
movss  -0x5c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd90(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
cmpl   $0x1,0x30(%rbp)
jle    12ad <bioR3_3d+0x17d>
movss  -0x5c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd68(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
cmpl   $0x1,0x38(%rbp)
jle    12d5 <bioR3_3d+0x1a5>
movss  -0x5c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd40(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x5c(%rbp)
cmpl   $0x0,-0x60(%rbp)
jne    1306 <bioR3_3d+0x1d6>
movss  0xd1d(%rip),%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  0xd10(%rip),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  0xd03(%rip),%xmm0
movss  %xmm0,-0x50(%rbp)
cmpl   $0x0,0x40(%rbp)
je     13a1 <bioR3_3d+0x271>
mov    -0x20(%rbp),%rdi
mov    -0x28(%rbp),%rsi
mov    -0x30(%rbp),%rdx
mov    -0x38(%rbp),%rcx
mov    -0x40(%rbp),%r8
mov    -0x48(%rbp),%r9
mov    0x10(%rbp),%r15
mov    0x18(%rbp),%r14
mov    0x20(%rbp),%rbx
mov    0x28(%rbp),%r11d
mov    0x30(%rbp),%r10d
mov    0x38(%rbp),%eax
movss  -0x50(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x5c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mov    %r15,(%rsp)
mov    %r14,0x8(%rsp)
mov    %rbx,0x10(%rsp)
mov    %r11d,0x18(%rsp)
mov    %r10d,0x20(%rsp)
mov    %eax,0x28(%rsp)
mov    $0x2,%al
call   1030 <bioR1__3d@plt>
movl   $0x1,-0x58(%rbp)
mov    0x20(%rbp),%rdi
mov    0x28(%rbp),%esi
mov    0x30(%rbp),%edx
mov    0x38(%rbp),%ecx
movss  -0x54(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
mov    -0x58(%rbp),%r8d
mov    $0x1,%al
call   1040 <bio_3d_postmult@plt>
jmp    13cc <bioR3_3d+0x29c>
mov    0x18(%rbp),%rdi
mov    0x20(%rbp),%rsi
mov    0x28(%rbp),%edx
mov    0x30(%rbp),%ecx
mov    0x38(%rbp),%r8d
movss  -0x50(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x5c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mov    $0x2,%al
call   1050 <bioR1_3dskip@plt>
add    $0x78,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

x86 assembly (clang, -O2):
<bioR3_3d>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    0x58(%rsp),%r14d
mov    0x50(%rsp),%r15d
mov    0x48(%rsp),%r12d
xor    %ebx,%ebx
cmp    $0x2,%r12d
setge  %bl
xor    %eax,%eax
cmp    $0x2,%r15d
setge  %al
add    %ebx,%eax
xor    %ebx,%ebx
cmp    $0x2,%r14d
setge  %bl
lea    (%rax,%rbx,1),%r10d
movsd  0xe8f(%rip),%xmm0
movsd  0xe8f(%rip),%xmm2
movaps %xmm0,%xmm3
cmp    $0x2,%r10d
je     1185 <bioR3_3d+0x55>
movaps %xmm2,%xmm3
cmp    $0x1,%r10d
jne    1193 <bioR3_3d+0x63>
movsd  0xe7d(%rip),%xmm3
movaps %xmm0,%xmm4
movaps %xmm0,%xmm1
add    %ebx,%eax
je     11a3 <bioR3_3d+0x73>
movaps %xmm2,%xmm4
movaps %xmm3,%xmm1
cmpl   $0x0,0x60(%rsp)
je     11ad <bioR3_3d+0x7d>
movaps %xmm4,%xmm0
mov    0x40(%rsp),%r13
mov    0x38(%rsp),%r10
je     1207 <bioR3_3d+0xd7>
xor    %ebx,%ebx
test   %eax,%eax
sete   %bl
mov    $0x2,%al
push   %r14
push   %r15
push   %r12
push   %r13
push   %r10
push   0x58(%rsp)
call   1030 <bioR1__3d@plt>
add    $0x30,%rsp
lea    0xe38(%rip),%rax
movsd  (%rax,%rbx,8),%xmm0
mov    %r13,%rdi
mov    %r12d,%esi
mov    %r15d,%edx
mov    %r14d,%ecx
mov    $0x1,%r8d
mov    $0x1,%al
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
jmp    1040 <bio_3d_postmult@plt>
mov    %r10,%rdi
mov    %r13,%rsi
mov    %r12d,%edx
mov    %r15d,%ecx
mov    %r14d,%r8d
mov    $0x2,%al
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
jmp    1050 <bioR1_3dskip@plt>

LLVM IR (-O0):
define void @bioR3_3d(float* %0, float* %1, float* %2, float* %3, float* %4, float* %5, float* %6, float* %7, float* %8, i32 %9, i32 %10, i32 %11, i32 %12) {
%14 = alloca float*
%15 = alloca float*
%16 = alloca float*
%17 = alloca float*
%18 = alloca float*
%19 = alloca float*
%20 = alloca float*
%21 = alloca float*
%22 = alloca float*
%23 = alloca i32
%24 = alloca i32
%25 = alloca i32
%26 = alloca i32
%27 = alloca float
%28 = alloca float
%29 = alloca float
%30 = alloca i32
%31 = alloca float
%32 = alloca i32
store float* %0, float** %14
store float* %1, float** %15
store float* %2, float** %16
store float* %3, float** %17
store float* %4, float** %18
store float* %5, float** %19
store float* %6, float** %20
store float* %7, float** %21
store float* %8, float** %22
store i32 %9, i32* %23
store i32 %10, i32* %24
store i32 %11, i32* %25
store i32 %12, i32* %26
store float 5.000000e-01, float* %27
%33 = load i32, i32* %23
%34 = icmp sgt i32 %33, 1
%35 = zext i1 %34 to i32
%36 = load i32, i32* %24
%37 = icmp sgt i32 %36, 1
%38 = zext i1 %37 to i32
%39 = add nsw i32 %35, %38
%40 = load i32, i32* %25
%41 = icmp sgt i32 %40, 1
%42 = zext i1 %41 to i32
%43 = add nsw i32 %39, %42
store i32 %43, i32* %32
%44 = load i32, i32* %26
%45 = icmp ne i32 %44, 0
br i1 %45, label %46, label %52
46: ; preds = %13
%47 = load float, float* %27
store float %47, float* %28
%48 = load float, float* %27
%49 = fpext float %48 to double
%50 = fdiv double 1.000000e+00, %49
%51 = fptrunc double %50 to float
store float %51, float* %29
br label %53
52: ; preds = %13
store float 1.000000e+00, float* %28
store float 1.000000e+00, float* %29
br label %53
53: ; preds = %52, %46
%54 = load float, float* %28
%55 = fdiv float 1.000000e+00, %54
store float %55, float* %28
%56 = load i32, i32* %32
%57 = icmp eq i32 %56, 3
br i1 %57, label %58, label %63
58: ; preds = %53
%59 = load float, float* %27
%60 = fpext float %59 to double
%61 = fdiv double 1.000000e+00, %60
%62 = fptrunc double %61 to float
store float %62, float* %31
br label %63
63: ; preds = %58, %53
%64 = load i32, i32* %32
%65 = icmp eq i32 %64, 2
br i1 %65, label %66, label %67
66: ; preds = %63
store float 1.000000e+00, float* %31
br label %67
67: ; preds = %66, %63
%68 = load i32, i32* %32
%69 = icmp eq i32 %68, 1
br i1 %69, label %70, label %72
70: ; preds = %67
%71 = load float, float* %27
store float %71, float* %31
br label %72
72: ; preds = %70, %67
%73 = load i32, i32* %23
%74 = icmp sgt i32 %73, 1
br i1 %74, label %75, label %80
75: ; preds = %72
%76 = load float, float* %31
%77 = fpext float %76 to double
%78 = fmul double %77, 1.000000e+00
%79 = fptrunc double %78 to float
store float %79, float* %31
br label %80
80: ; preds = %75, %72
%81 = load i32, i32* %24
%82 = icmp sgt i32 %81, 1
br i1 %82, label %83, label %88
83: ; preds = %80
%84 = load float, float* %31
%85 = fpext float %84 to double
%86 = fmul double %85, 1.000000e+00
%87 = fptrunc double %86 to float
store float %87, float* %31
br label %88
88: ; preds = %83, %80
%89 = load i32, i32* %25
%90 = icmp sgt i32 %89, 1
br i1 %90, label %91, label %96
91: ; preds = %88
%92 = load float, float* %31
%93 = fpext float %92 to double
%94 = fmul double %93, 1.000000e+00
%95 = fptrunc double %94 to float
store float %95, float* %31
br label %96
96: ; preds = %91, %88
%97 = load i32, i32* %32
%98 = icmp eq i32 %97, 0
br i1 %98, label %99, label %100
99: ; preds = %96
store float 1.000000e+00, float* %31
store float 1.000000e+00, float* %29
store float 1.000000e+00, float* %28
br label %100
100: ; preds = %99, %96
%101 = load i32, i32* %26
%102 = icmp ne i32 %101, 0
br i1 %102, label %103, label %129
103: ; preds = %100
%104 = load float*, float** %14
%105 = load float*, float** %15
%106 = load float*, float** %16
%107 = load float*, float** %17
%108 = load float*, float** %18
%109 = load float*, float** %19
%110 = load float*, float** %20
%111 = load float*, float** %21
%112 = load float*, float** %22
%113 = load i32, i32* %23
%114 = load i32, i32* %24
%115 = load i32, i32* %25
%116 = load float, float* %28
%117 = fpext float %116 to double
%118 = load float, float* %31
%119 = fpext float %118 to double
%120 = call i32 (float*, float*, float*, float*, float*, float*, float*, float*, float*, i32, i32, i32, double, double, ...) bitcast (i32 (...)* @bioR1__3d to i32 (float*, float*, float*, float*, float*, float*, float*, float*, float*, i32, i32, i32, double, double, ...)*)(float* %104, float* %105, float* %106, float* %107, float* %108, float* %109, float* %110, float* %111, float* %112, i32 %113, i32 %114, i32 %115, double %117, double %119)
store i32 1, i32* %30
%121 = load float*, float** %22
%122 = load i32, i32* %23
%123 = load i32, i32* %24
%124 = load i32, i32* %25
%125 = load float, float* %29
%126 = fpext float %125 to double
%127 = load i32, i32* %30
%128 = call i32 (float*, i32, i32, i32, double, i32, ...) bitcast (i32 (...)* @bio_3d_postmult to i32 (float*, i32, i32, i32, double, i32, ...)*)(float* %121, i32 %122, i32 %123, i32 %124, double %126, i32 %127)
br label %140
129: ; preds = %100
%130 = load float*, float** %21
%131 = load float*, float** %22
%132 = load i32, i32* %23
%133 = load i32, i32* %24
%134 = load i32, i32* %25
%135 = load float, float* %28
%136 = fpext float %135 to double
%137 = load float, float* %31
%138 = fpext float %137 to double
%139 = call i32 (float*, float*, i32, i32, i32, double, double, ...) bitcast (i32 (...)* @bioR1_3dskip to i32 (float*, float*, i32, i32, i32, double, double, ...)*)(float* %130, float* %131, i32 %132, i32 %133, i32 %134, double %136, double %138)
br label %140
140: ; preds = %129, %103
ret void
}

LLVM IR (-O2):
define void @bioR3_3d(float* %0, float* %1, float* %2, float* %3, float* %4, float* %5, float* %6, float* %7, float* %8, i32 %9, i32 %10, i32 %11, i32 %12) {
%14 = icmp sgt i32 %9, 1
%15 = zext i1 %14 to i32
%16 = icmp sgt i32 %10, 1
%17 = zext i1 %16 to i32
%18 = add nuw nsw i32 %17, %15
%19 = icmp sgt i32 %11, 1
%20 = zext i1 %19 to i32
%21 = add nuw nsw i32 %18, %20
%22 = icmp eq i32 %12, 0
%23 = icmp eq i32 %21, 2
%24 = icmp eq i32 %21, 1
%25 = icmp eq i32 %21, 0
%26 = or i1 %22, %25
%27 = select i1 %26, double 1.000000e+00, double 2.000000e+00
%28 = select i1 %23, double 1.000000e+00, double 2.000000e+00
%29 = select i1 %24, double 5.000000e-01, double %28
%30 = select i1 %25, double 1.000000e+00, double %29
br i1 %22, label %35, label %31
31: ; preds = %13
%32 = tail call i32 (float*, float*, float*, float*, float*, float*, float*, float*, float*, i32, i32, i32, double, double, ...) bitcast (i32 (...)* @bioR1__3d to i32 (float*, float*, float*, float*, float*, float*, float*, float*, float*, i32, i32, i32, double, double, ...)*)(float* %0, float* %1, float* %2, float* %3, float* %4, float* %5, float* %6, float* %7, float* %8, i32 %9, i32 %10, i32 %11, double %27, double %30)
%33 = select i1 %25, double 1.000000e+00, double 2.000000e+00
%34 = tail call i32 (float*, i32, i32, i32, double, i32, ...) bitcast (i32 (...)* @bio_3d_postmult to i32 (float*, i32, i32, i32, double, i32, ...)*)(float* %8, i32 %9, i32 %10, i32 %11, double %33, i32 1)
br label %37
35: ; preds = %13
%36 = tail call i32 (float*, float*, i32, i32, i32, double, double, ...) bitcast (i32 (...)* @bioR1_3dskip to i32 (float*, float*, i32, i32, i32, double, double, ...)*)(float* %7, float* %8, i32 %9, i32 %10, i32 %11, double %27, double %30)
br label %37
37: ; preds = %35, %31
ret void
}