#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 */
float fabsf(double);
int /*<<< orphan*/ fmaxf(float, float);
float fminf(float, int /*<<< orphan*/);
double fmodf(float, int);
void hsva_to_rgba(float *rgba, float *hsva) {
  float h = hsva[0];
  float s = hsva[1];
  float v = hsva[2];
  rgba[3] = hsva[3];
  s = fminf(1.f, fmaxf(0.f, s));
  v = fminf(1.f, fmaxf(0.f, v));
  h = fmodf(h + 360.f, 360.f);
  if (s == 0) {
    rgba[0] = rgba[1] = rgba[2] = v;
    return;
  }
  float c = v * s;
  float x = c * (1.f - fabsf(fmodf(h / 60.f, 2) - 1.0));
  float m = v - c;
  if (h >= 0.0 && h < 60.0) {
    rgba[0] = c + m;
    rgba[1] = x + m;
    rgba[2] = m;
    ;
  } else if (h >= 60.0 && h < 120.0) {
    rgba[0] = x + m;
    rgba[1] = c + m;
    rgba[2] = m;
    ;
  } else if (h >= 120.0 && h < 180.0) {
    rgba[0] = m;
    rgba[1] = c + m;
    rgba[2] = x + m;
    ;
  } else if (h >= 180.0 && h < 240.0) {
    rgba[0] = m;
    rgba[1] = x + m;
    rgba[2] = c + m;
    ;
  } else if (h >= 240.0 && h < 300.0) {
    rgba[0] = x + m;
    rgba[1] = m;
    rgba[2] = c + m;
    ;
  } else if (h >= 300.0 && h < 360.0) {
    rgba[0] = c + m;
    rgba[1] = m;
    rgba[2] = x + m;
    ;
  } else {
    rgba[0] = m;
    rgba[1] = m;
    rgba[2] = m;
    ;
  }
}


x86 assembly (clang, -O0):
<hsva_to_rgba>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x14(%rbp)
mov    -0x10(%rbp),%rax
movss  0x4(%rax),%xmm0
movss  %xmm0,-0x18(%rbp)
mov    -0x10(%rbp),%rax
movss  0x8(%rax),%xmm0
movss  %xmm0,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
movss  0xc(%rax),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0xc(%rax)
movss  -0x18(%rbp),%xmm1
xorps  %xmm0,%xmm0
call   1060 <fmaxf@plt>
mov    %eax,%edi
movss  0xe62(%rip),%xmm0
call   1050 <fminf@plt>
movss  %xmm0,-0x18(%rbp)
movss  -0x1c(%rbp),%xmm1
xorps  %xmm0,%xmm0
call   1060 <fmaxf@plt>
mov    %eax,%edi
movss  0xe41(%rip),%xmm0
call   1050 <fminf@plt>
movss  %xmm0,-0x1c(%rbp)
movss  0xe2b(%rip),%xmm0
addss  -0x14(%rbp),%xmm0
mov    $0x168,%edi
call   1040 <fmodf@plt>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jne    1228 <hsva_to_rgba+0xe8>
jp     1228 <hsva_to_rgba+0xe8>
movss  -0x1c(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
jmp    156a <hsva_to_rgba+0x42a>
movss  -0x1c(%rbp),%xmm0
mulss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x14(%rbp),%xmm0
movss  0xdba(%rip),%xmm1
divss  %xmm1,%xmm0
mov    $0x2,%edi
call   1040 <fmodf@plt>
movsd  0xdac(%rip),%xmm1
subsd  %xmm1,%xmm0
call   1030 <fabsf@plt>
movaps %xmm0,%xmm2
movss  -0x2c(%rbp),%xmm0
movss  0xd87(%rip),%xmm1
subss  %xmm2,%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x1c(%rbp),%xmm0
subss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
xorps  %xmm1,%xmm1
ucomisd %xmm1,%xmm0
jb     1302 <hsva_to_rgba+0x1c2>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd58(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1302 <hsva_to_rgba+0x1c2>
movss  -0x20(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x24(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
jmp    156a <hsva_to_rgba+0x42a>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd05(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1370 <hsva_to_rgba+0x230>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xcf2(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1370 <hsva_to_rgba+0x230>
movss  -0x24(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x20(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
jmp    1565 <hsva_to_rgba+0x425>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc9f(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     13de <hsva_to_rgba+0x29e>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc8c(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    13de <hsva_to_rgba+0x29e>
movss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x20(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x24(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
jmp    1560 <hsva_to_rgba+0x420>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc39(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     144c <hsva_to_rgba+0x30c>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xc26(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    144c <hsva_to_rgba+0x30c>
movss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x24(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x20(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
jmp    155b <hsva_to_rgba+0x41b>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbd3(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     14ba <hsva_to_rgba+0x37a>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xbc0(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    14ba <hsva_to_rgba+0x37a>
movss  -0x24(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x20(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
jmp    1556 <hsva_to_rgba+0x416>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb6d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jb     1528 <hsva_to_rgba+0x3e8>
movss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb5a(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1528 <hsva_to_rgba+0x3e8>
movss  -0x20(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x24(%rbp),%xmm0
addss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
jmp    1551 <hsva_to_rgba+0x411>
movss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x4(%rax)
movss  -0x28(%rbp),%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,0x8(%rax)
jmp    1556 <hsva_to_rgba+0x416>
jmp    155b <hsva_to_rgba+0x41b>
jmp    1560 <hsva_to_rgba+0x420>
jmp    1565 <hsva_to_rgba+0x425>
jmp    156a <hsva_to_rgba+0x42a>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<hsva_to_rgba>:
push   %rbx
sub    $0x10,%rsp
mov    %rdi,%rbx
movss  (%rsi),%xmm0
movss  %xmm0,0x8(%rsp)
movss  0x4(%rsi),%xmm1
movss  0x8(%rsi),%xmm0
movss  %xmm0,0x4(%rsp)
movss  0xc(%rsi),%xmm0
movss  %xmm0,0xc(%rdi)
xorps  %xmm0,%xmm0
call   1060 <fmaxf@plt>
movss  0xe84(%rip),%xmm0
mov    %eax,%edi
call   1050 <fminf@plt>
movss  %xmm0,0xc(%rsp)
xorps  %xmm0,%xmm0
movss  0x4(%rsp),%xmm1
call   1060 <fmaxf@plt>
movss  0xe61(%rip),%xmm0
mov    %eax,%edi
call   1050 <fminf@plt>
movss  %xmm0,0x4(%rsp)
movss  0x8(%rsp),%xmm0
addss  0xe4a(%rip),%xmm0
mov    $0x168,%edi
call   1040 <fmodf@plt>
movss  0xc(%rsp),%xmm1
ucomiss 0xe4b(%rip),%xmm1
jne    11ee <hsva_to_rgba+0xae>
jp     11ee <hsva_to_rgba+0xae>
movss  0x4(%rsp),%xmm0
movss  %xmm0,0x8(%rbx)
movss  %xmm0,0x4(%rbx)
movss  %xmm0,(%rbx)
jmp    129e <hsva_to_rgba+0x15e>
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,0x8(%rsp)
mulss  0x4(%rsp),%xmm1
movss  %xmm1,0xc(%rsp)
divss  0xdfc(%rip),%xmm0
mov    $0x2,%edi
call   1040 <fmodf@plt>
addsd  0xe02(%rip),%xmm0
call   1030 <fabsf@plt>
movss  0x8(%rsp),%xmm4
movss  0xc(%rsp),%xmm3
movss  0xdc9(%rip),%xmm1
subss  %xmm0,%xmm1
mulss  %xmm3,%xmm1
movss  0x4(%rsp),%xmm2
subss  %xmm3,%xmm2
ucomiss 0xdcc(%rip),%xmm4
jb     1272 <hsva_to_rgba+0x132>
movss  0xdae(%rip),%xmm0
ucomiss %xmm4,%xmm0
jbe    1272 <hsva_to_rgba+0x132>
addss  %xmm2,%xmm3
movss  %xmm3,(%rbx)
addss  %xmm2,%xmm1
movss  %xmm1,0x4(%rbx)
jmp    1299 <hsva_to_rgba+0x159>
ucomiss 0xd8f(%rip),%xmm4
jb     12a4 <hsva_to_rgba+0x164>
movss  0xd89(%rip),%xmm0
ucomiss %xmm4,%xmm0
jbe    12a4 <hsva_to_rgba+0x164>
addss  %xmm2,%xmm1
movss  %xmm1,(%rbx)
addss  %xmm2,%xmm3
movss  %xmm3,0x4(%rbx)
movss  %xmm2,0x8(%rbx)
add    $0x10,%rsp
pop    %rbx
ret
ucomiss 0xd61(%rip),%xmm4
jb     12d2 <hsva_to_rgba+0x192>
movss  0xd5b(%rip),%xmm0
ucomiss %xmm4,%xmm0
jbe    12d2 <hsva_to_rgba+0x192>
movss  %xmm2,(%rbx)
addss  %xmm2,%xmm3
movss  %xmm3,0x4(%rbx)
addss  %xmm2,%xmm1
movss  %xmm1,0x8(%rbx)
jmp    129e <hsva_to_rgba+0x15e>
ucomiss 0xd37(%rip),%xmm4
jb     12f7 <hsva_to_rgba+0x1b7>
movss  0xd31(%rip),%xmm0
ucomiss %xmm4,%xmm0
jbe    12f7 <hsva_to_rgba+0x1b7>
movss  %xmm2,(%rbx)
addss  %xmm2,%xmm1
movss  %xmm1,0x4(%rbx)
jmp    131a <hsva_to_rgba+0x1da>
ucomiss 0xd16(%rip),%xmm4
jb     1328 <hsva_to_rgba+0x1e8>
movss  0xd10(%rip),%xmm0
ucomiss %xmm4,%xmm0
jbe    1328 <hsva_to_rgba+0x1e8>
addss  %xmm2,%xmm1
movss  %xmm1,(%rbx)
movss  %xmm2,0x4(%rbx)
addss  %xmm2,%xmm3
movss  %xmm3,0x8(%rbx)
jmp    129e <hsva_to_rgba+0x15e>
ucomiss 0xce9(%rip),%xmm4
jb     1350 <hsva_to_rgba+0x210>
movss  0xccb(%rip),%xmm0
ucomiss %xmm4,%xmm0
jbe    1350 <hsva_to_rgba+0x210>
addss  %xmm2,%xmm3
movss  %xmm3,(%rbx)
movss  %xmm2,0x4(%rbx)
jmp    12c7 <hsva_to_rgba+0x187>
movss  %xmm2,(%rbx)
movss  %xmm2,0x4(%rbx)
jmp    1299 <hsva_to_rgba+0x159>

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

LLVM IR (-O2):
define void @hsva_to_rgba(float* writeonly %0, float* nocapture %1) {
%3 = load float, float* %1
%4 = getelementptr inbounds float, float* %1, i64 1
%5 = load float, float* %4
%6 = getelementptr inbounds float, float* %1, i64 2
%7 = load float, float* %6
%8 = getelementptr inbounds float, float* %1, i64 3
%9 = load float, float* %8
%10 = getelementptr inbounds float, float* %0, i64 3
store float %9, float* %10
%11 = tail call i32 @fmaxf(float 0.000000e+00, float %5)
%12 = tail call float @fminf(float 1.000000e+00, i32 %11)
%13 = tail call i32 @fmaxf(float 0.000000e+00, float %7)
%14 = tail call float @fminf(float 1.000000e+00, i32 %13)
%15 = fadd float %3, 3.600000e+02
%16 = tail call double @fmodf(float %15, i32 360)
%17 = fptrunc double %16 to float
%18 = fcmp oeq float %12, 0.000000e+00
br i1 %18, label %19, label %22
19: ; preds = %2
%20 = getelementptr inbounds float, float* %0, i64 2
store float %14, float* %20
%21 = getelementptr inbounds float, float* %0, i64 1
store float %14, float* %21
store float %14, float* %0
br label %87
22: ; preds = %2
%23 = fmul float %12, %14
%24 = fdiv float %17, 6.000000e+01
%25 = tail call double @fmodf(float %24, i32 2)
%26 = fadd double %25, -1.000000e+00
%27 = tail call float @fabsf(double %26)
%28 = fsub float 1.000000e+00, %27
%29 = fmul float %23, %28
%30 = fsub float %14, %23
%31 = fcmp oge float %17, 0.000000e+00
%32 = fcmp olt float %17, 6.000000e+01
%33 = and i1 %31, %32
br i1 %33, label %34, label %39
34: ; preds = %22
%35 = fadd float %23, %30
store float %35, float* %0
%36 = fadd float %30, %29
%37 = getelementptr inbounds float, float* %0, i64 1
store float %36, float* %37
%38 = getelementptr inbounds float, float* %0, i64 2
store float %30, float* %38
br label %87
39: ; preds = %22
%40 = fcmp oge float %17, 6.000000e+01
%41 = fcmp olt float %17, 1.200000e+02
%42 = and i1 %40, %41
br i1 %42, label %43, label %48
43: ; preds = %39
%44 = fadd float %30, %29
store float %44, float* %0
%45 = fadd float %23, %30
%46 = getelementptr inbounds float, float* %0, i64 1
store float %45, float* %46
%47 = getelementptr inbounds float, float* %0, i64 2
store float %30, float* %47
br label %87
48: ; preds = %39
%49 = fcmp oge float %17, 1.200000e+02
%50 = fcmp olt float %17, 1.800000e+02
%51 = and i1 %49, %50
br i1 %51, label %52, label %57
52: ; preds = %48
store float %30, float* %0
%53 = fadd float %23, %30
%54 = getelementptr inbounds float, float* %0, i64 1
store float %53, float* %54
%55 = fadd float %30, %29
%56 = getelementptr inbounds float, float* %0, i64 2
store float %55, float* %56
br label %87
57: ; preds = %48
%58 = fcmp oge float %17, 1.800000e+02
%59 = fcmp olt float %17, 2.400000e+02
%60 = and i1 %58, %59
br i1 %60, label %61, label %66
61: ; preds = %57
store float %30, float* %0
%62 = fadd float %30, %29
%63 = getelementptr inbounds float, float* %0, i64 1
store float %62, float* %63
%64 = fadd float %23, %30
%65 = getelementptr inbounds float, float* %0, i64 2
store float %64, float* %65
br label %87
66: ; preds = %57
%67 = fcmp oge float %17, 2.400000e+02
%68 = fcmp olt float %17, 3.000000e+02
%69 = and i1 %67, %68
br i1 %69, label %70, label %75
70: ; preds = %66
%71 = fadd float %30, %29
store float %71, float* %0
%72 = getelementptr inbounds float, float* %0, i64 1
store float %30, float* %72
%73 = fadd float %23, %30
%74 = getelementptr inbounds float, float* %0, i64 2
store float %73, float* %74
br label %87
75: ; preds = %66
%76 = fcmp oge float %17, 3.000000e+02
%77 = fcmp olt float %17, 3.600000e+02
%78 = and i1 %76, %77
br i1 %78, label %79, label %84
79: ; preds = %75
%80 = fadd float %23, %30
store float %80, float* %0
%81 = getelementptr inbounds float, float* %0, i64 1
store float %30, float* %81
%82 = fadd float %30, %29
%83 = getelementptr inbounds float, float* %0, i64 2
store float %82, float* %83
br label %87
84: ; preds = %75
store float %30, float* %0
%85 = getelementptr inbounds float, float* %0, i64 1
store float %30, float* %85
%86 = getelementptr inbounds float, float* %0, i64 2
store float %30, float* %86
br label %87
87: ; preds = %34, %52, %70, %84, %79, %61, %43, %19
ret void
}