#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int *malloc(int);
int roundf(float);
int *HSLtoRGB(float hue, float saturation, float lightness) {
  float red, green, blue;
  float temp1, temp2, tempRed, tempGreen, tempBlue;
  int *rgb = malloc(3 * sizeof(int));
  if (lightness < 0.5)
    temp2 = lightness * (1 + saturation);
  else
    temp2 = (lightness + saturation) - (lightness * saturation);
  temp1 = 2 * lightness - temp2;
  tempRed = hue + 1.0 / 3.0;
  if (tempRed > 1)
    tempRed--;
  tempGreen = hue;
  tempBlue = hue - 1.0 / 3.0;
  if (tempBlue < 0)
    tempBlue++;
  if (tempRed < 1.0 / 6.0)
    red = temp1 + (temp2 - temp1) * 6.0 * tempRed;
  else if (tempRed < 0.5)
    red = temp2;
  else if (tempRed < 2.0 / 3.0)
    red = temp1 + (temp2 - temp1) * ((2.0 / 3.0) - tempRed) * 6.0;
  else
    red = temp1;
  if (tempGreen < 1.0 / 6.0)
    green = temp1 + (temp2 - temp1) * 6.0 * tempGreen;
  else if (tempGreen < 0.5)
    green = temp2;
  else if (tempGreen < 2.0 / 3.0)
    green = temp1 + (temp2 - temp1) * ((2.0 / 3.0) - tempGreen) * 6.0;
  else
    green = temp1;
  if (tempBlue < 1.0 / 6.0)
    blue = temp1 + (temp2 - temp1) * 6.0 * tempBlue;
  else if (tempBlue < 0.5)
    blue = temp2;
  else if (tempBlue < 2.0 / 3.0)
    blue = temp1 + (temp2 - temp1) * ((2.0 / 3.0) - tempBlue) * 6.0;
  else
    blue = temp1;
  rgb[0] = red < 1.0 ? roundf(red * 255.0) : 255;
  rgb[1] = green < 1.0 ? roundf(green * 255.0) : 255;
  rgb[2] = blue < 1.0 ? roundf(blue * 255.0) : 255;
  return rgb;
}


x86 assembly (clang, -O0):
<HSLtoRGB>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
mov    $0xc,%edi
call   1030 <malloc@plt>
mov    %rax,-0x38(%rbp)
movss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xeaa(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1180 <HSLtoRGB+0x60>
movss  -0xc(%rbp),%xmm0
movss  0xecb(%rip),%xmm1
addss  -0x8(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
jmp    11ae <HSLtoRGB+0x8e>
movss  -0xc(%rbp),%xmm1
addss  -0x8(%rbp),%xmm1
movss  -0xc(%rbp),%xmm0
movss  -0x8(%rbp),%xmm2
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0xc(%rbp),%xmm0
movss  -0x20(%rbp),%xmm1
movd   %xmm1,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm1
addss  %xmm0,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe25(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x24(%rbp),%xmm0
movss  0xe3b(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1218 <HSLtoRGB+0xf8>
movss  0xe2e(%rip),%xmm0
addss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x4(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x4(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdd5(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x2c(%rbp)
xorps  %xmm0,%xmm0
ucomiss -0x2c(%rbp),%xmm0
jbe    125f <HSLtoRGB+0x13f>
movss  0xde3(%rip),%xmm0
addss  -0x2c(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xda0(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12bc <HSLtoRGB+0x19c>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
subss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd87(%rip),%xmm2
mulsd  %xmm2,%xmm0
movss  -0x24(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
jmp    1363 <HSLtoRGB+0x243>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd33(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    12e6 <HSLtoRGB+0x1c6>
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
jmp    135e <HSLtoRGB+0x23e>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd21(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    134f <HSLtoRGB+0x22f>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
subss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x24(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xcef(%rip),%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  0xce7(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
jmp    1359 <HSLtoRGB+0x239>
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x10(%rbp)
jmp    135e <HSLtoRGB+0x23e>
jmp    1363 <HSLtoRGB+0x243>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc9c(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    13c0 <HSLtoRGB+0x2a0>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
subss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc83(%rip),%xmm2
mulsd  %xmm2,%xmm0
movss  -0x28(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
jmp    1467 <HSLtoRGB+0x347>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc2f(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    13ea <HSLtoRGB+0x2ca>
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
jmp    1462 <HSLtoRGB+0x342>
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc1d(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1453 <HSLtoRGB+0x333>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
subss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x28(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xbeb(%rip),%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  0xbe3(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
jmp    145d <HSLtoRGB+0x33d>
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x14(%rbp)
jmp    1462 <HSLtoRGB+0x342>
jmp    1467 <HSLtoRGB+0x347>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb98(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    14c4 <HSLtoRGB+0x3a4>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
subss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb7f(%rip),%xmm2
mulsd  %xmm2,%xmm0
movss  -0x2c(%rbp),%xmm2
cvtss2sd %xmm2,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x18(%rbp)
jmp    156b <HSLtoRGB+0x44b>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb2b(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    14ee <HSLtoRGB+0x3ce>
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
jmp    1566 <HSLtoRGB+0x446>
movss  -0x2c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb19(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1557 <HSLtoRGB+0x437>
movss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x20(%rbp),%xmm0
subss  -0x1c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x2c(%rbp),%xmm2
cvtss2sd %xmm2,%xmm3
movsd  0xae7(%rip),%xmm2
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
movsd  0xadf(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x18(%rbp)
jmp    1561 <HSLtoRGB+0x441>
movss  -0x1c(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
jmp    1566 <HSLtoRGB+0x446>
jmp    156b <HSLtoRGB+0x44b>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xaac(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    15ac <HSLtoRGB+0x48c>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa99(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1040 <roundf@plt>
mov    %eax,-0x3c(%rbp)
jmp    15b9 <HSLtoRGB+0x499>
mov    $0xff,%eax
mov    %eax,-0x3c(%rbp)
jmp    15b9 <HSLtoRGB+0x499>
mov    -0x3c(%rbp),%ecx
mov    -0x38(%rbp),%rax
mov    %ecx,(%rax)
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xa55(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1603 <HSLtoRGB+0x4e3>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa42(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1040 <roundf@plt>
mov    %eax,-0x40(%rbp)
jmp    1610 <HSLtoRGB+0x4f0>
mov    $0xff,%eax
mov    %eax,-0x40(%rbp)
jmp    1610 <HSLtoRGB+0x4f0>
mov    -0x40(%rbp),%ecx
mov    -0x38(%rbp),%rax
mov    %ecx,0x4(%rax)
movss  -0x18(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x9fd(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    165b <HSLtoRGB+0x53b>
movss  -0x18(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0x9ea(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
call   1040 <roundf@plt>
mov    %eax,-0x44(%rbp)
jmp    1668 <HSLtoRGB+0x548>
mov    $0xff,%eax
mov    %eax,-0x44(%rbp)
jmp    1668 <HSLtoRGB+0x548>
mov    -0x44(%rbp),%ecx
mov    -0x38(%rbp),%rax
mov    %ecx,0x8(%rax)
mov    -0x38(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<HSLtoRGB>:
push   %rbp
push   %rbx
sub    $0x18,%rsp
movss  %xmm2,0x14(%rsp)
movss  %xmm1,0xc(%rsp)
movss  %xmm0,0x10(%rsp)
mov    $0xc,%edi
call   1030 <malloc@plt>
movss  0x14(%rsp),%xmm7
mov    %rax,%rbx
movss  0xeac(%rip),%xmm9
ucomiss %xmm7,%xmm9
jbe    116e <HSLtoRGB+0x4e>
movss  0xc(%rsp),%xmm1
addss  0xe9c(%rip),%xmm1
mulss  %xmm7,%xmm1
jmp    1183 <HSLtoRGB+0x63>
movaps %xmm7,%xmm0
movss  0xc(%rsp),%xmm1
mulss  %xmm1,%xmm0
addss  %xmm7,%xmm1
subss  %xmm0,%xmm1
addss  %xmm7,%xmm7
subss  %xmm1,%xmm7
movss  0x10(%rsp),%xmm10
xorps  %xmm2,%xmm2
cvtss2sd %xmm10,%xmm2
movsd  0xe6e(%rip),%xmm0
addsd  %xmm2,%xmm0
cvtsd2ss %xmm0,%xmm3
movss  0xe56(%rip),%xmm4
addss  %xmm3,%xmm4
movss  0xe45(%rip),%xmm8
movaps %xmm8,%xmm0
cmpltss %xmm3,%xmm0
andps  %xmm0,%xmm4
andnps %xmm3,%xmm0
orps   %xmm4,%xmm0
movsd  0xe3f(%rip),%xmm3
addsd  %xmm2,%xmm3
xorps  %xmm4,%xmm4
cvtsd2ss %xmm3,%xmm4
movaps %xmm4,%xmm5
addss  %xmm8,%xmm5
xorps  %xmm6,%xmm6
movaps %xmm4,%xmm3
cmpltss %xmm6,%xmm3
andps  %xmm3,%xmm5
andnps %xmm4,%xmm3
orps   %xmm5,%xmm3
xorps  %xmm5,%xmm5
cvtss2sd %xmm0,%xmm5
movsd  0xe11(%rip),%xmm4
ucomisd %xmm5,%xmm4
jbe    1235 <HSLtoRGB+0x115>
xorps  %xmm0,%xmm0
cvtss2sd %xmm7,%xmm0
movaps %xmm1,%xmm6
subss  %xmm7,%xmm6
cvtss2sd %xmm6,%xmm6
mulsd  0xe01(%rip),%xmm6
mulsd  %xmm5,%xmm6
jmp    1271 <HSLtoRGB+0x151>
ucomiss %xmm0,%xmm9
movaps %xmm1,%xmm0
ja     127c <HSLtoRGB+0x15c>
movsd  0xde2(%rip),%xmm6
ucomisd %xmm5,%xmm6
movaps %xmm7,%xmm0
jbe    127c <HSLtoRGB+0x15c>
movaps %xmm1,%xmm0
subss  %xmm7,%xmm0
cvtss2sd %xmm0,%xmm0
subsd  %xmm5,%xmm6
mulsd  %xmm0,%xmm6
mulsd  0xdc6(%rip),%xmm6
xorps  %xmm0,%xmm0
cvtss2sd %xmm7,%xmm0
addsd  %xmm0,%xmm6
xorps  %xmm0,%xmm0
cvtsd2ss %xmm6,%xmm0
ucomisd %xmm2,%xmm4
jbe    12aa <HSLtoRGB+0x18a>
xorps  %xmm5,%xmm5
cvtss2sd %xmm7,%xmm5
movaps %xmm1,%xmm6
subss  %xmm7,%xmm6
cvtss2sd %xmm6,%xmm6
mulsd  0xd94(%rip),%xmm6
mulsd  %xmm2,%xmm6
addsd  %xmm5,%xmm6
cvtsd2ss %xmm6,%xmm6
jmp    12f1 <HSLtoRGB+0x1d1>
ucomiss %xmm10,%xmm9
movaps %xmm1,%xmm6
ja     12f1 <HSLtoRGB+0x1d1>
movsd  0xd6d(%rip),%xmm5
ucomisd %xmm2,%xmm5
movaps %xmm7,%xmm6
jbe    12f1 <HSLtoRGB+0x1d1>
movaps %xmm1,%xmm6
subss  %xmm7,%xmm6
cvtss2sd %xmm6,%xmm6
subsd  %xmm2,%xmm5
mulsd  %xmm6,%xmm5
mulsd  0xd51(%rip),%xmm5
xorps  %xmm2,%xmm2
cvtss2sd %xmm7,%xmm2
addsd  %xmm2,%xmm5
xorps  %xmm6,%xmm6
cvtsd2ss %xmm5,%xmm6
xorps  %xmm2,%xmm2
cvtss2sd %xmm3,%xmm2
ucomisd %xmm2,%xmm4
jbe    1329 <HSLtoRGB+0x209>
xorps  %xmm4,%xmm4
cvtss2sd %xmm7,%xmm4
subss  %xmm7,%xmm1
xorps  %xmm3,%xmm3
cvtss2sd %xmm1,%xmm3
mulsd  0xd18(%rip),%xmm3
mulsd  %xmm2,%xmm3
addsd  %xmm4,%xmm3
xorps  %xmm1,%xmm1
cvtsd2ss %xmm3,%xmm1
jmp    136f <HSLtoRGB+0x24f>
ucomiss %xmm3,%xmm9
ja     136f <HSLtoRGB+0x24f>
movsd  0xcf1(%rip),%xmm4
ucomisd %xmm2,%xmm4
jbe    136c <HSLtoRGB+0x24c>
subss  %xmm7,%xmm1
xorps  %xmm3,%xmm3
cvtss2sd %xmm1,%xmm3
subsd  %xmm2,%xmm4
mulsd  %xmm3,%xmm4
mulsd  0xcd8(%rip),%xmm4
xorps  %xmm2,%xmm2
cvtss2sd %xmm7,%xmm2
addsd  %xmm2,%xmm4
xorps  %xmm1,%xmm1
cvtsd2ss %xmm4,%xmm1
jmp    136f <HSLtoRGB+0x24f>
movaps %xmm7,%xmm1
mov    $0xff,%ebp
ucomiss %xmm0,%xmm8
mov    $0xff,%eax
movss  %xmm1,0xc(%rsp)
jbe    13ad <HSLtoRGB+0x28d>
mulss  0xc7f(%rip),%xmm0
movss  %xmm6,0x10(%rsp)
call   1040 <roundf@plt>
movss  0x10(%rsp),%xmm6
movss  0xc5d(%rip),%xmm8
movss  0xc(%rsp),%xmm1
mov    %eax,(%rbx)
ucomiss %xmm6,%xmm8
jbe    13d6 <HSLtoRGB+0x2b6>
mulss  0xc4f(%rip),%xmm6
movaps %xmm6,%xmm0
call   1040 <roundf@plt>
movss  0xc36(%rip),%xmm8
movss  0xc(%rsp),%xmm1
mov    %eax,%ebp
mov    %ebp,0x4(%rbx)
mov    $0xff,%eax
ucomiss %xmm1,%xmm8
jbe    13f4 <HSLtoRGB+0x2d4>
mulss  0xc20(%rip),%xmm1
movaps %xmm1,%xmm0
call   1040 <roundf@plt>
mov    %eax,0x8(%rbx)
mov    %rbx,%rax
add    $0x18,%rsp
pop    %rbx
pop    %rbp
ret

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

LLVM IR (-O2):
define noalias i32* @HSLtoRGB(float %0, float %1, float %2) {
%4 = tail call i32* @malloc(i32 12)
%5 = fcmp olt float %2, 5.000000e-01
br i1 %5, label %6, label %9
6: ; preds = %3
%7 = fadd float %1, 1.000000e+00
%8 = fmul float %7, %2
br label %13
9: ; preds = %3
%10 = fadd float %1, %2
%11 = fneg float %2
%12 = tail call float @llvm.fmuladd.f32(float %11, float %1, float %10)
br label %13
13: ; preds = %9, %6
%14 = phi float [ %8, %6 ], [ %12, %9 ]
%15 = fneg float %14
%16 = tail call float @llvm.fmuladd.f32(float %2, float 2.000000e+00, float %15)
%17 = fpext float %0 to double
%18 = fadd double %17, 0x3FD5555555555555
%19 = fptrunc double %18 to float
%20 = fcmp ogt float %19, 1.000000e+00
%21 = fadd float %19, -1.000000e+00
%22 = select i1 %20, float %21, float %19
%23 = fadd double %17, 0xBFD5555555555555
%24 = fptrunc double %23 to float
%25 = fcmp olt float %24, 0.000000e+00
%26 = fadd float %24, 1.000000e+00
%27 = select i1 %25, float %26, float %24
%28 = fpext float %22 to double
%29 = fcmp olt double %28, 0x3FC5555555555555
br i1 %29, label %30, label %37
30: ; preds = %13
%31 = fpext float %16 to double
%32 = fsub float %14, %16
%33 = fpext float %32 to double
%34 = fmul double %33, 6.000000e+00
%35 = tail call double @llvm.fmuladd.f64(double %34, double %28, double %31)
%36 = fptrunc double %35 to float
br label %49
37: ; preds = %13
%38 = fcmp olt float %22, 5.000000e-01
br i1 %38, label %49, label %39
39: ; preds = %37
%40 = fcmp olt double %28, 0x3FE5555555555555
br i1 %40, label %41, label %49
41: ; preds = %39
%42 = fpext float %16 to double
%43 = fsub float %14, %16
%44 = fpext float %43 to double
%45 = fsub double 0x3FE5555555555555, %28
%46 = fmul double %45, %44
%47 = tail call double @llvm.fmuladd.f64(double %46, double 6.000000e+00, double %42)
%48 = fptrunc double %47 to float
br label %49
49: ; preds = %39, %37, %41, %30
%50 = phi float [ %36, %30 ], [ %48, %41 ], [ %14, %37 ], [ %16, %39 ]
%51 = fcmp olt double %17, 0x3FC5555555555555
br i1 %51, label %52, label %59
52: ; preds = %49
%53 = fpext float %16 to double
%54 = fsub float %14, %16
%55 = fpext float %54 to double
%56 = fmul double %55, 6.000000e+00
%57 = tail call double @llvm.fmuladd.f64(double %56, double %17, double %53)
%58 = fptrunc double %57 to float
br label %71
59: ; preds = %49
%60 = fcmp olt float %0, 5.000000e-01
br i1 %60, label %71, label %61
61: ; preds = %59
%62 = fcmp olt double %17, 0x3FE5555555555555
br i1 %62, label %63, label %71
63: ; preds = %61
%64 = fpext float %16 to double
%65 = fsub float %14, %16
%66 = fpext float %65 to double
%67 = fsub double 0x3FE5555555555555, %17
%68 = fmul double %67, %66
%69 = tail call double @llvm.fmuladd.f64(double %68, double 6.000000e+00, double %64)
%70 = fptrunc double %69 to float
br label %71
71: ; preds = %61, %59, %63, %52
%72 = phi float [ %58, %52 ], [ %70, %63 ], [ %14, %59 ], [ %16, %61 ]
%73 = fpext float %27 to double
%74 = fcmp olt double %73, 0x3FC5555555555555
br i1 %74, label %75, label %82
75: ; preds = %71
%76 = fpext float %16 to double
%77 = fsub float %14, %16
%78 = fpext float %77 to double
%79 = fmul double %78, 6.000000e+00
%80 = tail call double @llvm.fmuladd.f64(double %79, double %73, double %76)
%81 = fptrunc double %80 to float
br label %94
82: ; preds = %71
%83 = fcmp olt float %27, 5.000000e-01
br i1 %83, label %94, label %84
84: ; preds = %82
%85 = fcmp olt double %73, 0x3FE5555555555555
br i1 %85, label %86, label %94
86: ; preds = %84
%87 = fpext float %16 to double
%88 = fsub float %14, %16
%89 = fpext float %88 to double
%90 = fsub double 0x3FE5555555555555, %73
%91 = fmul double %90, %89
%92 = tail call double @llvm.fmuladd.f64(double %91, double 6.000000e+00, double %87)
%93 = fptrunc double %92 to float
br label %94
94: ; preds = %84, %82, %86, %75
%95 = phi float [ %81, %75 ], [ %93, %86 ], [ %14, %82 ], [ %16, %84 ]
%96 = fcmp olt float %50, 1.000000e+00
br i1 %96, label %97, label %100
97: ; preds = %94
%98 = fmul float %50, 2.550000e+02
%99 = tail call i32 @roundf(float %98)
br label %100
100: ; preds = %94, %97
%101 = phi i32 [ %99, %97 ], [ 255, %94 ]
store i32 %101, i32* %4
%102 = fcmp olt float %72, 1.000000e+00
br i1 %102, label %103, label %106
103: ; preds = %100
%104 = fmul float %72, 2.550000e+02
%105 = tail call i32 @roundf(float %104)
br label %106
106: ; preds = %100, %103
%107 = phi i32 [ %105, %103 ], [ 255, %100 ]
%108 = getelementptr inbounds i32, i32* %4, i64 1
store i32 %107, i32* %108
%109 = fcmp olt float %95, 1.000000e+00
br i1 %109, label %110, label %113
110: ; preds = %106
%111 = fmul float %95, 2.550000e+02
%112 = tail call i32 @roundf(float %111)
br label %113
113: ; preds = %106, %110
%114 = phi i32 [ %112, %110 ], [ 255, %106 ]
%115 = getelementptr inbounds i32, i32* %4, i64 2
store i32 %114, i32* %115
ret i32* %4
}