void __imlib_hls_to_rgb(float hue, float lightness, float saturation, int *r,
                        int *g, int *b) {
  float m1, m2, m21, h;
  if (saturation == 0)
    *r = *g = *b = (int)(lightness * 255.0);
  else {
    if (lightness <= 0.5)
      m2 = lightness * (1 + saturation);
    else
      m2 = lightness + saturation + lightness * saturation;
    m1 = 2 * lightness - m2;
    m21 = m2 - m1;
    h = hue + 120;
    if (h > 360)
      h -= 360;
    else if (h < 0)
      h += 360;
    if (h < 60)
      *r = (int)(255.0 * (m1 + m21 * h / 60.0));
    else if (h < 180)
      *r = (int)(255.0 * m2);
    else if (h < 240)
      *r = (int)(255.0 * (m1 + m21 * (240.0 - h) / 60.0));
    else
      *r = (int)(255.0 * m1);
    h = hue;
    if (h > 360)
      h -= 360;
    else if (h < 0)
      h += 360;
    if (h < 60)
      *g = (int)(255.0 * (m1 + m21 * h / 60.0));
    else if (h < 180)
      *g = (int)(255.0 * m2);
    else if (h < 240)
      *g = (int)(255.0 * (m1 + m21 * (240.0 - h) / 60.0));
    else
      *g = (int)(255.0 * m1);
    h = hue - 120;
    if (h > 360)
      h -= 360;
    else if (h < 0)
      h += 360;
    if (h < 60)
      *b = (int)(255.0 * (m1 + m21 * h / 60.0));
    else if (h < 180)
      *b = (int)(255.0 * m2);
    else if (h < 240)
      *b = (int)(255.0 * (m1 + m21 * (240.0 - h) / 60.0));
    else
      *b = (int)(255.0 * m1);
  }
}


x86 assembly (clang, -O0):
<__imlib_hls_to_rgb>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
mov    %rdi,-0x18(%rbp)
mov    %rsi,-0x20(%rbp)
mov    %rdx,-0x28(%rbp)
movss  -0xc(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    1166 <__imlib_hls_to_rgb+0x66>
jp     1166 <__imlib_hls_to_rgb+0x66>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xec1(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
jmp    167c <__imlib_hls_to_rgb+0x57c>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe89(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     11a1 <__imlib_hls_to_rgb+0xa1>
movss  -0x8(%rbp),%xmm0
movss  0xe92(%rip),%xmm1
addss  -0xc(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    11c2 <__imlib_hls_to_rgb+0xc2>
movss  -0x8(%rbp),%xmm1
addss  -0xc(%rbp),%xmm1
movss  -0x8(%rbp),%xmm0
movss  -0xc(%rbp),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x8(%rbp),%xmm0
movss  -0x30(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x30(%rbp),%xmm0
subss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  0xe2b(%rip),%xmm0
addss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x38(%rbp),%xmm0
movss  0xe10(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1238 <__imlib_hls_to_rgb+0x138>
movss  -0x38(%rbp),%xmm0
movss  0xdfa(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    125c <__imlib_hls_to_rgb+0x15c>
xorps  %xmm0,%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    1257 <__imlib_hls_to_rgb+0x157>
movss  0xdd7(%rip),%xmm0
addss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    125c <__imlib_hls_to_rgb+0x15c>
movss  0xdc8(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    12b0 <__imlib_hls_to_rgb+0x1b0>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
mulss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd83(%rip),%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm0,%xmm1
movsd  0xd6b(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
jmp    1377 <__imlib_hls_to_rgb+0x277>
movss  0xd78(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    12e6 <__imlib_hls_to_rgb+0x1e6>
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd35(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
jmp    1372 <__imlib_hls_to_rgb+0x272>
movss  0xd46(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    134e <__imlib_hls_to_rgb+0x24e>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x38(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xcfd(%rip),%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  0xce5(%rip),%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm0,%xmm1
movsd  0xccd(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
jmp    136d <__imlib_hls_to_rgb+0x26d>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xca9(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
jmp    1372 <__imlib_hls_to_rgb+0x272>
jmp    1377 <__imlib_hls_to_rgb+0x277>
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x38(%rbp),%xmm0
movss  0xc96(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    13b2 <__imlib_hls_to_rgb+0x2b2>
movss  -0x38(%rbp),%xmm0
movss  0xc80(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    13d6 <__imlib_hls_to_rgb+0x2d6>
xorps  %xmm0,%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    13d1 <__imlib_hls_to_rgb+0x2d1>
movss  0xc5d(%rip),%xmm0
addss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    13d6 <__imlib_hls_to_rgb+0x2d6>
movss  0xc4e(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    142a <__imlib_hls_to_rgb+0x32a>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
mulss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc09(%rip),%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm0,%xmm1
movsd  0xbf1(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    14f1 <__imlib_hls_to_rgb+0x3f1>
movss  0xbfe(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    1460 <__imlib_hls_to_rgb+0x360>
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xbbb(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    14ec <__imlib_hls_to_rgb+0x3ec>
movss  0xbcc(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    14c8 <__imlib_hls_to_rgb+0x3c8>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x38(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xb83(%rip),%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  0xb6b(%rip),%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm0,%xmm1
movsd  0xb53(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    14e7 <__imlib_hls_to_rgb+0x3e7>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb2f(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
jmp    14ec <__imlib_hls_to_rgb+0x3ec>
jmp    14f1 <__imlib_hls_to_rgb+0x3f1>
movss  -0x4(%rbp),%xmm0
movss  0xb2a(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x38(%rbp),%xmm0
movss  0xb10(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1538 <__imlib_hls_to_rgb+0x438>
movss  -0x38(%rbp),%xmm0
movss  0xafa(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    155c <__imlib_hls_to_rgb+0x45c>
xorps  %xmm0,%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    1557 <__imlib_hls_to_rgb+0x457>
movss  0xad7(%rip),%xmm0
addss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    155c <__imlib_hls_to_rgb+0x45c>
movss  0xac8(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    15b0 <__imlib_hls_to_rgb+0x4b0>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
mulss  -0x38(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa83(%rip),%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm0,%xmm1
movsd  0xa6b(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
jmp    1677 <__imlib_hls_to_rgb+0x577>
movss  0xa78(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    15e6 <__imlib_hls_to_rgb+0x4e6>
movss  -0x30(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xa35(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
jmp    1672 <__imlib_hls_to_rgb+0x572>
movss  0xa46(%rip),%xmm0
ucomiss -0x38(%rbp),%xmm0
jbe    164e <__imlib_hls_to_rgb+0x54e>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x34(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x38(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0x9fd(%rip),%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  0x9e5(%rip),%xmm2
divsd  %xmm2,%xmm0
addsd  %xmm0,%xmm1
movsd  0x9cd(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
jmp    166d <__imlib_hls_to_rgb+0x56d>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x9a9(%rip),%xmm0
mulsd  %xmm1,%xmm0
cvttsd2si %xmm0,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
jmp    1672 <__imlib_hls_to_rgb+0x572>
jmp    1677 <__imlib_hls_to_rgb+0x577>
jmp    167c <__imlib_hls_to_rgb+0x57c>
pop    %rbp
ret

x86 assembly (clang, -O2):
<__imlib_hls_to_rgb>:
xorps  %xmm3,%xmm3
ucomiss %xmm3,%xmm2
jne    1124 <__imlib_hls_to_rgb+0x24>
jp     1124 <__imlib_hls_to_rgb+0x24>
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
mulsd  0xf1f(%rip),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,(%rdx)
mov    %eax,(%rsi)
mov    %eax,(%rdi)
ret
movss  0xed4(%rip),%xmm3
ucomiss %xmm1,%xmm3
jae    1142 <__imlib_hls_to_rgb+0x42>
movaps %xmm1,%xmm3
addss  %xmm2,%xmm3
mulss  %xmm1,%xmm2
addss  %xmm3,%xmm2
jmp    114e <__imlib_hls_to_rgb+0x4e>
addss  0xeba(%rip),%xmm2
mulss  %xmm1,%xmm2
addss  %xmm1,%xmm1
subss  %xmm2,%xmm1
movss  0xeaa(%rip),%xmm5
addss  %xmm0,%xmm5
ucomiss 0xea3(%rip),%xmm5
jbe    1175 <__imlib_hls_to_rgb+0x75>
addss  0xe9d(%rip),%xmm5
jmp    1185 <__imlib_hls_to_rgb+0x85>
xorps  %xmm3,%xmm3
ucomiss %xmm5,%xmm3
jbe    1185 <__imlib_hls_to_rgb+0x85>
addss  0xe87(%rip),%xmm5
movaps %xmm2,%xmm3
subss  %xmm1,%xmm3
movss  0xe80(%rip),%xmm4
ucomiss %xmm5,%xmm4
jbe    11af <__imlib_hls_to_rgb+0xaf>
cvtss2sd %xmm1,%xmm7
mulss  %xmm3,%xmm5
cvtss2sd %xmm5,%xmm6
divsd  0xe83(%rip),%xmm6
jmp    11fb <__imlib_hls_to_rgb+0xfb>
movss  0xe61(%rip),%xmm6
ucomiss %xmm5,%xmm6
jbe    11c5 <__imlib_hls_to_rgb+0xc5>
xorps  %xmm6,%xmm6
cvtss2sd %xmm2,%xmm6
jmp    11ff <__imlib_hls_to_rgb+0xff>
movss  0xe4f(%rip),%xmm6
ucomiss %xmm5,%xmm6
xorps  %xmm6,%xmm6
cvtss2sd %xmm1,%xmm6
jbe    11ff <__imlib_hls_to_rgb+0xff>
cvtss2sd %xmm3,%xmm8
cvtss2sd %xmm5,%xmm5
movsd  0xe3e(%rip),%xmm7
subsd  %xmm5,%xmm7
mulsd  %xmm8,%xmm7
divsd  0xe35(%rip),%xmm7
addsd  %xmm7,%xmm6
mulsd  0xe31(%rip),%xmm6
cvttsd2si %xmm6,%eax
mov    %eax,(%rdi)
ucomiss 0xdf8(%rip),%xmm0
jbe    1220 <__imlib_hls_to_rgb+0x120>
movss  0xdf2(%rip),%xmm5
jmp    1233 <__imlib_hls_to_rgb+0x133>
xorps  %xmm5,%xmm5
ucomiss %xmm0,%xmm5
movaps %xmm0,%xmm5
jbe    1237 <__imlib_hls_to_rgb+0x137>
movss  0xdd9(%rip),%xmm5
addss  %xmm0,%xmm5
ucomiss %xmm5,%xmm4
jbe    1258 <__imlib_hls_to_rgb+0x158>
xorps  %xmm7,%xmm7
cvtss2sd %xmm1,%xmm7
mulss  %xmm3,%xmm5
xorps  %xmm6,%xmm6
cvtss2sd %xmm5,%xmm6
divsd  0xdda(%rip),%xmm6
jmp    12a8 <__imlib_hls_to_rgb+0x1a8>
movss  0xdb8(%rip),%xmm6
ucomiss %xmm5,%xmm6
jbe    126e <__imlib_hls_to_rgb+0x16e>
xorps  %xmm6,%xmm6
cvtss2sd %xmm2,%xmm6
jmp    12ac <__imlib_hls_to_rgb+0x1ac>
movss  0xda6(%rip),%xmm6
ucomiss %xmm5,%xmm6
xorps  %xmm6,%xmm6
cvtss2sd %xmm1,%xmm6
jbe    12ac <__imlib_hls_to_rgb+0x1ac>
xorps  %xmm8,%xmm8
cvtss2sd %xmm3,%xmm8
cvtss2sd %xmm5,%xmm5
movsd  0xd91(%rip),%xmm7
subsd  %xmm5,%xmm7
mulsd  %xmm8,%xmm7
divsd  0xd88(%rip),%xmm7
addsd  %xmm7,%xmm6
mulsd  0xd84(%rip),%xmm6
cvttsd2si %xmm6,%eax
addss  0xd60(%rip),%xmm0
mov    %eax,(%rsi)
ucomiss 0xd43(%rip),%xmm0
jbe    12d5 <__imlib_hls_to_rgb+0x1d5>
addss  0xd3d(%rip),%xmm0
jmp    12e5 <__imlib_hls_to_rgb+0x1e5>
xorps  %xmm5,%xmm5
ucomiss %xmm0,%xmm5
jbe    12e5 <__imlib_hls_to_rgb+0x1e5>
addss  0xd27(%rip),%xmm0
ucomiss %xmm0,%xmm4
jbe    1307 <__imlib_hls_to_rgb+0x207>
mulss  %xmm0,%xmm3
xorps  %xmm0,%xmm0
cvtss2sd %xmm3,%xmm0
divsd  0xd33(%rip),%xmm0
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
jmp    131b <__imlib_hls_to_rgb+0x21b>
movss  0xd09(%rip),%xmm4
ucomiss %xmm0,%xmm4
jbe    132a <__imlib_hls_to_rgb+0x22a>
xorps  %xmm0,%xmm0
cvtss2sd %xmm2,%xmm0
mulsd  0xd15(%rip),%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,(%rdx)
ret
movss  0xcea(%rip),%xmm2
ucomiss %xmm0,%xmm2
cvtss2sd %xmm1,%xmm1
jbe    1371 <__imlib_hls_to_rgb+0x271>
xorps  %xmm2,%xmm2
cvtss2sd %xmm3,%xmm2
cvtss2sd %xmm0,%xmm0
movsd  0xcda(%rip),%xmm3
subsd  %xmm0,%xmm3
mulsd  %xmm2,%xmm3
divsd  0xcd2(%rip),%xmm3
addsd  %xmm1,%xmm3
mulsd  0xcce(%rip),%xmm3
cvttsd2si %xmm3,%eax
mov    %eax,(%rdx)
ret
mulsd  0xcbf(%rip),%xmm1
cvttsd2si %xmm1,%eax
mov    %eax,(%rdx)
ret

LLVM IR (-O0):
define void @__imlib_hls_to_rgb(float %0, float %1, float %2, i32* %3, i32* %4, i32* %5) {
%7 = alloca float
%8 = alloca float
%9 = alloca float
%10 = alloca i32*
%11 = alloca i32*
%12 = alloca i32*
%13 = alloca float
%14 = alloca float
%15 = alloca float
%16 = alloca float
store float %0, float* %7
store float %1, float* %8
store float %2, float* %9
store i32* %3, i32** %10
store i32* %4, i32** %11
store i32* %5, i32** %12
%17 = load float, float* %9
%18 = fcmp oeq float %17, 0.000000e+00
br i1 %18, label %19, label %27
19: ; preds = %6
%20 = load float, float* %8
%21 = fpext float %20 to double
%22 = fmul double %21, 2.550000e+02
%23 = fptosi double %22 to i32
%24 = load i32*, i32** %12
store i32 %23, i32* %24
%25 = load i32*, i32** %11
store i32 %23, i32* %25
%26 = load i32*, i32** %10
store i32 %23, i32* %26
br label %242
27: ; preds = %6
%28 = load float, float* %8
%29 = fpext float %28 to double
%30 = fcmp ole double %29, 5.000000e-01
br i1 %30, label %31, label %36
31: ; preds = %27
%32 = load float, float* %8
%33 = load float, float* %9
%34 = fadd float 1.000000e+00, %33
%35 = fmul float %32, %34
store float %35, float* %14
br label %43
36: ; preds = %27
%37 = load float, float* %8
%38 = load float, float* %9
%39 = fadd float %37, %38
%40 = load float, float* %8
%41 = load float, float* %9
%42 = call float @llvm.fmuladd.f32(float %40, float %41, float %39)
store float %42, float* %14
br label %43
43: ; preds = %36, %31
%44 = load float, float* %8
%45 = load float, float* %14
%46 = fneg float %45
%47 = call float @llvm.fmuladd.f32(float 2.000000e+00, float %44, float %46)
store float %47, float* %13
%48 = load float, float* %14
%49 = load float, float* %13
%50 = fsub float %48, %49
store float %50, float* %15
%51 = load float, float* %7
%52 = fadd float %51, 1.200000e+02
store float %52, float* %16
%53 = load float, float* %16
%54 = fcmp ogt float %53, 3.600000e+02
br i1 %54, label %55, label %58
55: ; preds = %43
%56 = load float, float* %16
%57 = fsub float %56, 3.600000e+02
store float %57, float* %16
br label %65
58: ; preds = %43
%59 = load float, float* %16
%60 = fcmp olt float %59, 0.000000e+00
br i1 %60, label %61, label %64
61: ; preds = %58
%62 = load float, float* %16
%63 = fadd float %62, 3.600000e+02
store float %63, float* %16
br label %64
64: ; preds = %61, %58
br label %65
65: ; preds = %64, %55
%66 = load float, float* %16
%67 = fcmp olt float %66, 6.000000e+01
br i1 %67, label %68, label %80
68: ; preds = %65
%69 = load float, float* %13
%70 = fpext float %69 to double
%71 = load float, float* %15
%72 = load float, float* %16
%73 = fmul float %71, %72
%74 = fpext float %73 to double
%75 = fdiv double %74, 6.000000e+01
%76 = fadd double %70, %75
%77 = fmul double 2.550000e+02, %76
%78 = fptosi double %77 to i32
%79 = load i32*, i32** %10
store i32 %78, i32* %79
br label %114
80: ; preds = %65
%81 = load float, float* %16
%82 = fcmp olt float %81, 1.800000e+02
br i1 %82, label %83, label %89
83: ; preds = %80
%84 = load float, float* %14
%85 = fpext float %84 to double
%86 = fmul double 2.550000e+02, %85
%87 = fptosi double %86 to i32
%88 = load i32*, i32** %10
store i32 %87, i32* %88
br label %113
89: ; preds = %80
%90 = load float, float* %16
%91 = fcmp olt float %90, 2.400000e+02
br i1 %91, label %92, label %106
92: ; preds = %89
%93 = load float, float* %13
%94 = fpext float %93 to double
%95 = load float, float* %15
%96 = fpext float %95 to double
%97 = load float, float* %16
%98 = fpext float %97 to double
%99 = fsub double 2.400000e+02, %98
%100 = fmul double %96, %99
%101 = fdiv double %100, 6.000000e+01
%102 = fadd double %94, %101
%103 = fmul double 2.550000e+02, %102
%104 = fptosi double %103 to i32
%105 = load i32*, i32** %10
store i32 %104, i32* %105
br label %112
106: ; preds = %89
%107 = load float, float* %13
%108 = fpext float %107 to double
%109 = fmul double 2.550000e+02, %108
%110 = fptosi double %109 to i32
%111 = load i32*, i32** %10
store i32 %110, i32* %111
br label %112
112: ; preds = %106, %92
br label %113
113: ; preds = %112, %83
br label %114
114: ; preds = %113, %68
%115 = load float, float* %7
store float %115, float* %16
%116 = load float, float* %16
%117 = fcmp ogt float %116, 3.600000e+02
br i1 %117, label %118, label %121
118: ; preds = %114
%119 = load float, float* %16
%120 = fsub float %119, 3.600000e+02
store float %120, float* %16
br label %128
121: ; preds = %114
%122 = load float, float* %16
%123 = fcmp olt float %122, 0.000000e+00
br i1 %123, label %124, label %127
124: ; preds = %121
%125 = load float, float* %16
%126 = fadd float %125, 3.600000e+02
store float %126, float* %16
br label %127
127: ; preds = %124, %121
br label %128
128: ; preds = %127, %118
%129 = load float, float* %16
%130 = fcmp olt float %129, 6.000000e+01
br i1 %130, label %131, label %143
131: ; preds = %128
%132 = load float, float* %13
%133 = fpext float %132 to double
%134 = load float, float* %15
%135 = load float, float* %16
%136 = fmul float %134, %135
%137 = fpext float %136 to double
%138 = fdiv double %137, 6.000000e+01
%139 = fadd double %133, %138
%140 = fmul double 2.550000e+02, %139
%141 = fptosi double %140 to i32
%142 = load i32*, i32** %11
store i32 %141, i32* %142
br label %177
143: ; preds = %128
%144 = load float, float* %16
%145 = fcmp olt float %144, 1.800000e+02
br i1 %145, label %146, label %152
146: ; preds = %143
%147 = load float, float* %14
%148 = fpext float %147 to double
%149 = fmul double 2.550000e+02, %148
%150 = fptosi double %149 to i32
%151 = load i32*, i32** %11
store i32 %150, i32* %151
br label %176
152: ; preds = %143
%153 = load float, float* %16
%154 = fcmp olt float %153, 2.400000e+02
br i1 %154, label %155, label %169
155: ; preds = %152
%156 = load float, float* %13
%157 = fpext float %156 to double
%158 = load float, float* %15
%159 = fpext float %158 to double
%160 = load float, float* %16
%161 = fpext float %160 to double
%162 = fsub double 2.400000e+02, %161
%163 = fmul double %159, %162
%164 = fdiv double %163, 6.000000e+01
%165 = fadd double %157, %164
%166 = fmul double 2.550000e+02, %165
%167 = fptosi double %166 to i32
%168 = load i32*, i32** %11
store i32 %167, i32* %168
br label %175
169: ; preds = %152
%170 = load float, float* %13
%171 = fpext float %170 to double
%172 = fmul double 2.550000e+02, %171
%173 = fptosi double %172 to i32
%174 = load i32*, i32** %11
store i32 %173, i32* %174
br label %175
175: ; preds = %169, %155
br label %176
176: ; preds = %175, %146
br label %177
177: ; preds = %176, %131
%178 = load float, float* %7
%179 = fsub float %178, 1.200000e+02
store float %179, float* %16
%180 = load float, float* %16
%181 = fcmp ogt float %180, 3.600000e+02
br i1 %181, label %182, label %185
182: ; preds = %177
%183 = load float, float* %16
%184 = fsub float %183, 3.600000e+02
store float %184, float* %16
br label %192
185: ; preds = %177
%186 = load float, float* %16
%187 = fcmp olt float %186, 0.000000e+00
br i1 %187, label %188, label %191
188: ; preds = %185
%189 = load float, float* %16
%190 = fadd float %189, 3.600000e+02
store float %190, float* %16
br label %191
191: ; preds = %188, %185
br label %192
192: ; preds = %191, %182
%193 = load float, float* %16
%194 = fcmp olt float %193, 6.000000e+01
br i1 %194, label %195, label %207
195: ; preds = %192
%196 = load float, float* %13
%197 = fpext float %196 to double
%198 = load float, float* %15
%199 = load float, float* %16
%200 = fmul float %198, %199
%201 = fpext float %200 to double
%202 = fdiv double %201, 6.000000e+01
%203 = fadd double %197, %202
%204 = fmul double 2.550000e+02, %203
%205 = fptosi double %204 to i32
%206 = load i32*, i32** %12
store i32 %205, i32* %206
br label %241
207: ; preds = %192
%208 = load float, float* %16
%209 = fcmp olt float %208, 1.800000e+02
br i1 %209, label %210, label %216
210: ; preds = %207
%211 = load float, float* %14
%212 = fpext float %211 to double
%213 = fmul double 2.550000e+02, %212
%214 = fptosi double %213 to i32
%215 = load i32*, i32** %12
store i32 %214, i32* %215
br label %240
216: ; preds = %207
%217 = load float, float* %16
%218 = fcmp olt float %217, 2.400000e+02
br i1 %218, label %219, label %233
219: ; preds = %216
%220 = load float, float* %13
%221 = fpext float %220 to double
%222 = load float, float* %15
%223 = fpext float %222 to double
%224 = load float, float* %16
%225 = fpext float %224 to double
%226 = fsub double 2.400000e+02, %225
%227 = fmul double %223, %226
%228 = fdiv double %227, 6.000000e+01
%229 = fadd double %221, %228
%230 = fmul double 2.550000e+02, %229
%231 = fptosi double %230 to i32
%232 = load i32*, i32** %12
store i32 %231, i32* %232
br label %239
233: ; preds = %216
%234 = load float, float* %13
%235 = fpext float %234 to double
%236 = fmul double 2.550000e+02, %235
%237 = fptosi double %236 to i32
%238 = load i32*, i32** %12
store i32 %237, i32* %238
br label %239
239: ; preds = %233, %219
br label %240
240: ; preds = %239, %210
br label %241
241: ; preds = %240, %195
br label %242
242: ; preds = %241, %19
ret void
}

LLVM IR (-O2):
define void @__imlib_hls_to_rgb(float %0, float %1, float %2, i32* nocapture writeonly %3, i32* nocapture writeonly %4, i32* nocapture writeonly %5) {
%7 = fcmp oeq float %2, 0.000000e+00
br i1 %7, label %8, label %12
8: ; preds = %6
%9 = fpext float %1 to double
%10 = fmul double %9, 2.550000e+02
%11 = fptosi double %10 to i32
store i32 %11, i32* %5
store i32 %11, i32* %4
store i32 %11, i32* %3
br label %134
12: ; preds = %6
%13 = fcmp ugt float %1, 5.000000e-01
br i1 %13, label %17, label %14
14: ; preds = %12
%15 = fadd float %2, 1.000000e+00
%16 = fmul float %15, %1
br label %20
17: ; preds = %12
%18 = fadd float %1, %2
%19 = tail call float @llvm.fmuladd.f32(float %1, float %2, float %18)
br label %20
20: ; preds = %17, %14
%21 = phi float [ %16, %14 ], [ %19, %17 ]
%22 = fneg float %21
%23 = tail call float @llvm.fmuladd.f32(float %1, float 2.000000e+00, float %22)
%24 = fsub float %21, %23
%25 = fadd float %0, 1.200000e+02
%26 = fcmp ogt float %25, 3.600000e+02
br i1 %26, label %27, label %29
27: ; preds = %20
%28 = fadd float %25, -3.600000e+02
br label %33
29: ; preds = %20
%30 = fcmp olt float %25, 0.000000e+00
br i1 %30, label %31, label %33
31: ; preds = %29
%32 = fadd float %25, 3.600000e+02
br label %33
33: ; preds = %29, %31, %27
%34 = phi float [ %28, %27 ], [ %32, %31 ], [ %25, %29 ]
%35 = fcmp olt float %34, 6.000000e+01
br i1 %35, label %36, label %42
36: ; preds = %33
%37 = fpext float %23 to double
%38 = fmul float %24, %34
%39 = fpext float %38 to double
%40 = fdiv double %39, 6.000000e+01
%41 = fadd double %40, %37
br label %56
42: ; preds = %33
%43 = fcmp olt float %34, 1.800000e+02
br i1 %43, label %44, label %46
44: ; preds = %42
%45 = fpext float %21 to double
br label %56
46: ; preds = %42
%47 = fcmp olt float %34, 2.400000e+02
%48 = fpext float %23 to double
br i1 %47, label %49, label %56
49: ; preds = %46
%50 = fpext float %24 to double
%51 = fpext float %34 to double
%52 = fsub double 2.400000e+02, %51
%53 = fmul double %52, %50
%54 = fdiv double %53, 6.000000e+01
%55 = fadd double %54, %48
br label %56
56: ; preds = %46, %44, %49, %36
%57 = phi double [ %45, %44 ], [ %55, %49 ], [ %41, %36 ], [ %48, %46 ]
%58 = fmul double %57, 2.550000e+02
%59 = fptosi double %58 to i32
store i32 %59, i32* %3
%60 = fcmp ogt float %0, 3.600000e+02
br i1 %60, label %61, label %63
61: ; preds = %56
%62 = fadd float %0, -3.600000e+02
br label %67
63: ; preds = %56
%64 = fcmp olt float %0, 0.000000e+00
br i1 %64, label %65, label %67
65: ; preds = %63
%66 = fadd float %0, 3.600000e+02
br label %67
67: ; preds = %63, %65, %61
%68 = phi float [ %62, %61 ], [ %66, %65 ], [ %0, %63 ]
%69 = fcmp olt float %68, 6.000000e+01
br i1 %69, label %70, label %76
70: ; preds = %67
%71 = fpext float %23 to double
%72 = fmul float %24, %68
%73 = fpext float %72 to double
%74 = fdiv double %73, 6.000000e+01
%75 = fadd double %74, %71
br label %90
76: ; preds = %67
%77 = fcmp olt float %68, 1.800000e+02
br i1 %77, label %78, label %80
78: ; preds = %76
%79 = fpext float %21 to double
br label %90
80: ; preds = %76
%81 = fcmp olt float %68, 2.400000e+02
%82 = fpext float %23 to double
br i1 %81, label %83, label %90
83: ; preds = %80
%84 = fpext float %24 to double
%85 = fpext float %68 to double
%86 = fsub double 2.400000e+02, %85
%87 = fmul double %86, %84
%88 = fdiv double %87, 6.000000e+01
%89 = fadd double %88, %82
br label %90
90: ; preds = %80, %78, %83, %70
%91 = phi double [ %79, %78 ], [ %89, %83 ], [ %75, %70 ], [ %82, %80 ]
%92 = fmul double %91, 2.550000e+02
%93 = fptosi double %92 to i32
store i32 %93, i32* %4
%94 = fadd float %0, -1.200000e+02
%95 = fcmp ogt float %94, 3.600000e+02
br i1 %95, label %96, label %98
96: ; preds = %90
%97 = fadd float %94, -3.600000e+02
br label %102
98: ; preds = %90
%99 = fcmp olt float %94, 0.000000e+00
br i1 %99, label %100, label %102
100: ; preds = %98
%101 = fadd float %94, 3.600000e+02
br label %102
102: ; preds = %98, %100, %96
%103 = phi float [ %97, %96 ], [ %101, %100 ], [ %94, %98 ]
%104 = fcmp olt float %103, 6.000000e+01
br i1 %104, label %105, label %113
105: ; preds = %102
%106 = fpext float %23 to double
%107 = fmul float %24, %103
%108 = fpext float %107 to double
%109 = fdiv double %108, 6.000000e+01
%110 = fadd double %109, %106
%111 = fmul double %110, 2.550000e+02
%112 = fptosi double %111 to i32
store i32 %112, i32* %5
br label %134
113: ; preds = %102
%114 = fcmp olt float %103, 1.800000e+02
br i1 %114, label %115, label %119
115: ; preds = %113
%116 = fpext float %21 to double
%117 = fmul double %116, 2.550000e+02
%118 = fptosi double %117 to i32
store i32 %118, i32* %5
br label %134
119: ; preds = %113
%120 = fcmp olt float %103, 2.400000e+02
%121 = fpext float %23 to double
br i1 %120, label %122, label %131
122: ; preds = %119
%123 = fpext float %24 to double
%124 = fpext float %103 to double
%125 = fsub double 2.400000e+02, %124
%126 = fmul double %125, %123
%127 = fdiv double %126, 6.000000e+01
%128 = fadd double %127, %121
%129 = fmul double %128, 2.550000e+02
%130 = fptosi double %129 to i32
store i32 %130, i32* %5
br label %134
131: ; preds = %119
%132 = fmul double %121, 2.550000e+02
%133 = fptosi double %132 to i32
store i32 %133, i32* %5
br label %134
134: ; preds = %105, %122, %131, %115, %8
ret void
}