#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 fmod(float, int);
unsigned long HSVtoHEX(float hue, float sat, float value) {
  float pr = 0;
  float pg = 0;
  float pb = 0;
  short ora = 0;
  short og = 0;
  short ob = 0;
  float ro = fmod(hue * 6, 6.);
  float avg = 0;
  ro = fmod(ro + 6 + 1, 6);
  if (ro < 1) {
    pr = 1;
    pg = 1. - ro;
  } else if (ro < 2) {
    pr = 1;
    pb = ro - 1.;
  } else if (ro < 3) {
    pr = 3. - ro;
    pb = 1;
  } else if (ro < 4) {
    pb = 1;
    pg = ro - 3;
  } else if (ro < 5) {
    pb = 5 - ro;
    pg = 1;
  } else {
    pg = 1;
    pr = ro - 5;
  }
  pr *= value;
  pg *= value;
  pb *= value;
  avg += pr;
  avg += pg;
  avg += pb;
  pr = pr * sat + avg * (1. - sat);
  pg = pg * sat + avg * (1. - sat);
  pb = pb * sat + avg * (1. - sat);
  ora = pr * 255;
  og = pb * 255;
  ob = pg * 255;
  if (ora < 0)
    ora = 0;
  if (ora > 255)
    ora = 255;
  if (og < 0)
    og = 0;
  if (og > 255)
    og = 255;
  if (ob < 0)
    ob = 0;
  if (ob > 255)
    ob = 255;
  return (ob << 16) | (og << 8) | ora;
}


x86 assembly (clang, -O0):
<HSVtoHEX>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movss  %xmm0,-0x4(%rbp)
movss  %xmm1,-0x8(%rbp)
movss  %xmm2,-0xc(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x18(%rbp)
movw   $0x0,-0x1a(%rbp)
movw   $0x0,-0x1c(%rbp)
movw   $0x0,-0x1e(%rbp)
movss  0xeab(%rip),%xmm0
mulss  -0x4(%rbp),%xmm0
mov    $0x6,%edi
call   1030 <fmod@plt>
movss  %xmm0,-0x24(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  0xe87(%rip),%xmm0
addss  -0x24(%rbp),%xmm0
movss  0xe76(%rip),%xmm1
addss  %xmm1,%xmm0
mov    $0x6,%edi
call   1030 <fmod@plt>
movss  %xmm0,-0x24(%rbp)
movss  0xe5b(%rip),%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    11df <HSVtoHEX+0xcf>
movss  0xe49(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe5b(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
jmp    130a <HSVtoHEX+0x1fa>
movss  0xe21(%rip),%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    1221 <HSVtoHEX+0x111>
movss  0xe07(%rip),%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe19(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x18(%rbp)
jmp    1305 <HSVtoHEX+0x1f5>
movss  0xde3(%rip),%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    1263 <HSVtoHEX+0x153>
movss  -0x24(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xddc(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
movss  0xda7(%rip),%xmm0
movss  %xmm0,-0x18(%rbp)
jmp    1300 <HSVtoHEX+0x1f0>
movss  0xda5(%rip),%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    129d <HSVtoHEX+0x18d>
movss  0xd83(%rip),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x24(%rbp),%xmm0
movss  0xd7d(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x14(%rbp)
jmp    12fb <HSVtoHEX+0x1eb>
movss  0xd6f(%rip),%xmm0
ucomiss -0x24(%rbp),%xmm0
jbe    12d3 <HSVtoHEX+0x1c3>
movss  0xd5d(%rip),%xmm0
subss  -0x24(%rbp),%xmm0
movss  %xmm0,-0x18(%rbp)
movss  0xd37(%rip),%xmm0
movss  %xmm0,-0x14(%rbp)
jmp    12f6 <HSVtoHEX+0x1e6>
movss  0xd25(%rip),%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x24(%rbp),%xmm0
movss  0xd27(%rip),%xmm1
subss  %xmm1,%xmm0
movss  %xmm0,-0x10(%rbp)
jmp    12fb <HSVtoHEX+0x1eb>
jmp    1300 <HSVtoHEX+0x1f0>
jmp    1305 <HSVtoHEX+0x1f5>
jmp    130a <HSVtoHEX+0x1fa>
movss  -0xc(%rbp),%xmm1
movss  -0x10(%rbp),%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0xc(%rbp),%xmm1
movss  -0x14(%rbp),%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0xc(%rbp),%xmm1
movss  -0x18(%rbp),%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x10(%rbp),%xmm1
movss  -0x28(%rbp),%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x14(%rbp),%xmm1
movss  -0x28(%rbp),%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x18(%rbp),%xmm1
movss  -0x28(%rbp),%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x10(%rbp),%xmm0
movss  -0x8(%rbp),%xmm2
mulss  %xmm2,%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm2,%xmm4
movsd  0xc85(%rip),%xmm2
movaps %xmm2,%xmm3
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
movss  -0x14(%rbp),%xmm0
movss  -0x8(%rbp),%xmm3
mulss  %xmm3,%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm3,%xmm4
movaps %xmm2,%xmm3
subsd  %xmm4,%xmm3
mulsd  %xmm3,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0x18(%rbp),%xmm0
movss  -0x8(%rbp),%xmm3
mulss  %xmm3,%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x28(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
cvtss2sd %xmm3,%xmm3
subsd  %xmm3,%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x10(%rbp),%xmm0
movss  0xbe5(%rip),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %ax,-0x1a(%rbp)
movss  -0x18(%rbp),%xmm0
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %ax,-0x1c(%rbp)
movss  -0x14(%rbp),%xmm0
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%eax
mov    %ax,-0x1e(%rbp)
movswl -0x1a(%rbp),%eax
cmp    $0x0,%eax
jge    1474 <HSVtoHEX+0x364>
movw   $0x0,-0x1a(%rbp)
movswl -0x1a(%rbp),%eax
cmp    $0xff,%eax
jle    1489 <HSVtoHEX+0x379>
movw   $0xff,-0x1a(%rbp)
movswl -0x1c(%rbp),%eax
cmp    $0x0,%eax
jge    149c <HSVtoHEX+0x38c>
movw   $0x0,-0x1c(%rbp)
movswl -0x1c(%rbp),%eax
cmp    $0xff,%eax
jle    14b1 <HSVtoHEX+0x3a1>
movw   $0xff,-0x1c(%rbp)
movswl -0x1e(%rbp),%eax
cmp    $0x0,%eax
jge    14c4 <HSVtoHEX+0x3b4>
movw   $0x0,-0x1e(%rbp)
movswl -0x1e(%rbp),%eax
cmp    $0xff,%eax
jle    14d9 <HSVtoHEX+0x3c9>
movw   $0xff,-0x1e(%rbp)
movswl -0x1e(%rbp),%eax
shl    $0x10,%eax
movswl -0x1c(%rbp),%ecx
shl    $0x8,%ecx
or     %ecx,%eax
movswl -0x1a(%rbp),%ecx
or     %ecx,%eax
cltq
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<HSVtoHEX>:
sub    $0x28,%rsp
movaps %xmm2,0x10(%rsp)
movaps %xmm1,(%rsp)
mulss  0xedb(%rip),%xmm0
mov    $0x6,%edi
call   1030 <fmod@plt>
addss  0xec9(%rip),%xmm0
addss  0xec5(%rip),%xmm0
mov    $0x6,%edi
call   1030 <fmod@plt>
movss  0xeb3(%rip),%xmm5
ucomiss %xmm0,%xmm5
jbe    116e <HSVtoHEX+0x5e>
movss  0xea6(%rip),%xmm5
subss  %xmm0,%xmm5
movaps 0xed7(%rip),%xmm1
jmp    1202 <HSVtoHEX+0xf2>
movss  0xe92(%rip),%xmm1
ucomiss %xmm0,%xmm1
jbe    1193 <HSVtoHEX+0x83>
addss  0xe9d(%rip),%xmm0
movaps 0xeb6(%rip),%xmm1
movss  %xmm0,%xmm1
xorps  %xmm5,%xmm5
jmp    1202 <HSVtoHEX+0xf2>
movss  0xe71(%rip),%xmm2
ucomiss %xmm0,%xmm2
jbe    11b3 <HSVtoHEX+0xa3>
subss  %xmm0,%xmm2
movaps 0xe85(%rip),%xmm1
unpcklps %xmm2,%xmm1
xorps  %xmm5,%xmm5
jmp    1202 <HSVtoHEX+0xf2>
movss  0xe55(%rip),%xmm1
ucomiss %xmm0,%xmm1
jbe    11d5 <HSVtoHEX+0xc5>
addss  0xe54(%rip),%xmm0
movss  0xe34(%rip),%xmm1
movaps %xmm0,%xmm5
jmp    1202 <HSVtoHEX+0xf2>
movss  0xe37(%rip),%xmm2
ucomiss %xmm0,%xmm2
jbe    11ef <HSVtoHEX+0xdf>
subss  %xmm0,%xmm2
xorps  %xmm1,%xmm1
movss  %xmm2,%xmm1
jmp    1202 <HSVtoHEX+0xf2>
addss  0xe21(%rip),%xmm0
movq   %xmm0,%xmm1
xorps  %xmm0,%xmm0
shufps $0xe2,%xmm0,%xmm1
movaps 0x10(%rsp),%xmm3
mulss  %xmm3,%xmm5
shufps $0x0,%xmm3,%xmm3
mulps  %xmm1,%xmm3
movaps %xmm3,%xmm0
shufps $0x55,%xmm3,%xmm0
xorps  %xmm1,%xmm1
addss  %xmm0,%xmm1
addss  %xmm5,%xmm1
addss  %xmm3,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
movaps (%rsp),%xmm4
xorps  %xmm1,%xmm1
cvtss2sd %xmm4,%xmm1
movsd  0xe1e(%rip),%xmm2
subsd  %xmm1,%xmm2
mulss  %xmm4,%xmm5
xorps  %xmm1,%xmm1
cvtss2sd %xmm5,%xmm1
mulsd  %xmm0,%xmm2
addsd  %xmm2,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
shufps $0x0,%xmm4,%xmm4
mulps  %xmm3,%xmm4
cvtps2pd %xmm4,%xmm1
unpcklpd %xmm2,%xmm2
addpd  %xmm1,%xmm2
cvtpd2ps %xmm2,%xmm1
mulps  0xdd3(%rip),%xmm1
cvttps2dq %xmm1,%xmm1
pextrw $0x2,%xmm1,%eax
mulss  0xd96(%rip),%xmm0
movd   %xmm1,%ecx
cvttss2si %xmm0,%edx
pslld  $0x10,%xmm1
pshufd $0x50,%xmm1,%xmm0
pxor   %xmm1,%xmm1
pcmpgtw %xmm1,%xmm0
movmskpd %xmm0,%esi
xor    %edi,%edi
test   $0x2,%sil
cmove  %edi,%eax
cmp    $0xff,%eax
mov    $0xff,%r8d
cmovae %r8d,%eax
test   $0x1,%sil
cmove  %edi,%ecx
movzwl %cx,%esi
cmp    $0xff,%esi
cmovae %r8d,%ecx
test   %dx,%dx
cmovns %edx,%edi
movzwl %di,%edx
cmp    $0xff,%edx
cmovae %r8d,%edi
movzwl %di,%edx
shl    $0x10,%rdx
shl    $0x8,%ecx
movzwl %cx,%ecx
or     %rdx,%rcx
or     %rcx,%rax
add    $0x28,%rsp
ret

LLVM IR (-O0):
define i64 @HSVtoHEX(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 i16
%11 = alloca i16
%12 = alloca i16
%13 = alloca float
%14 = alloca float
store float %0, float* %4
store float %1, float* %5
store float %2, float* %6
store float 0.000000e+00, float* %7
store float 0.000000e+00, float* %8
store float 0.000000e+00, float* %9
store i16 0, i16* %10
store i16 0, i16* %11
store i16 0, i16* %12
%15 = load float, float* %4
%16 = fmul float %15, 6.000000e+00
%17 = call float @fmod(float %16, i32 6)
store float %17, float* %13
store float 0.000000e+00, float* %14
%18 = load float, float* %13
%19 = fadd float %18, 6.000000e+00
%20 = fadd float %19, 1.000000e+00
%21 = call float @fmod(float %20, i32 6)
store float %21, float* %13
%22 = load float, float* %13
%23 = fcmp olt float %22, 1.000000e+00
br i1 %23, label %24, label %29
24: ; preds = %3
store float 1.000000e+00, float* %7
%25 = load float, float* %13
%26 = fpext float %25 to double
%27 = fsub double 1.000000e+00, %26
%28 = fptrunc double %27 to float
store float %28, float* %8
br label %64
29: ; preds = %3
%30 = load float, float* %13
%31 = fcmp olt float %30, 2.000000e+00
br i1 %31, label %32, label %37
32: ; preds = %29
store float 1.000000e+00, float* %7
%33 = load float, float* %13
%34 = fpext float %33 to double
%35 = fsub double %34, 1.000000e+00
%36 = fptrunc double %35 to float
store float %36, float* %9
br label %63
37: ; preds = %29
%38 = load float, float* %13
%39 = fcmp olt float %38, 3.000000e+00
br i1 %39, label %40, label %45
40: ; preds = %37
%41 = load float, float* %13
%42 = fpext float %41 to double
%43 = fsub double 3.000000e+00, %42
%44 = fptrunc double %43 to float
store float %44, float* %7
store float 1.000000e+00, float* %9
br label %62
45: ; preds = %37
%46 = load float, float* %13
%47 = fcmp olt float %46, 4.000000e+00
br i1 %47, label %48, label %51
48: ; preds = %45
store float 1.000000e+00, float* %9
%49 = load float, float* %13
%50 = fsub float %49, 3.000000e+00
store float %50, float* %8
br label %61
51: ; preds = %45
%52 = load float, float* %13
%53 = fcmp olt float %52, 5.000000e+00
br i1 %53, label %54, label %57
54: ; preds = %51
%55 = load float, float* %13
%56 = fsub float 5.000000e+00, %55
store float %56, float* %9
store float 1.000000e+00, float* %8
br label %60
57: ; preds = %51
store float 1.000000e+00, float* %8
%58 = load float, float* %13
%59 = fsub float %58, 5.000000e+00
store float %59, float* %7
br label %60
60: ; preds = %57, %54
br label %61
61: ; preds = %60, %48
br label %62
62: ; preds = %61, %40
br label %63
63: ; preds = %62, %32
br label %64
64: ; preds = %63, %24
%65 = load float, float* %6
%66 = load float, float* %7
%67 = fmul float %66, %65
store float %67, float* %7
%68 = load float, float* %6
%69 = load float, float* %8
%70 = fmul float %69, %68
store float %70, float* %8
%71 = load float, float* %6
%72 = load float, float* %9
%73 = fmul float %72, %71
store float %73, float* %9
%74 = load float, float* %7
%75 = load float, float* %14
%76 = fadd float %75, %74
store float %76, float* %14
%77 = load float, float* %8
%78 = load float, float* %14
%79 = fadd float %78, %77
store float %79, float* %14
%80 = load float, float* %9
%81 = load float, float* %14
%82 = fadd float %81, %80
store float %82, float* %14
%83 = load float, float* %7
%84 = load float, float* %5
%85 = fmul float %83, %84
%86 = fpext float %85 to double
%87 = load float, float* %14
%88 = fpext float %87 to double
%89 = load float, float* %5
%90 = fpext float %89 to double
%91 = fsub double 1.000000e+00, %90
%92 = call double @llvm.fmuladd.f64(double %88, double %91, double %86)
%93 = fptrunc double %92 to float
store float %93, float* %7
%94 = load float, float* %8
%95 = load float, float* %5
%96 = fmul float %94, %95
%97 = fpext float %96 to double
%98 = load float, float* %14
%99 = fpext float %98 to double
%100 = load float, float* %5
%101 = fpext float %100 to double
%102 = fsub double 1.000000e+00, %101
%103 = call double @llvm.fmuladd.f64(double %99, double %102, double %97)
%104 = fptrunc double %103 to float
store float %104, float* %8
%105 = load float, float* %9
%106 = load float, float* %5
%107 = fmul float %105, %106
%108 = fpext float %107 to double
%109 = load float, float* %14
%110 = fpext float %109 to double
%111 = load float, float* %5
%112 = fpext float %111 to double
%113 = fsub double 1.000000e+00, %112
%114 = call double @llvm.fmuladd.f64(double %110, double %113, double %108)
%115 = fptrunc double %114 to float
store float %115, float* %9
%116 = load float, float* %7
%117 = fmul float %116, 2.550000e+02
%118 = fptosi float %117 to i16
store i16 %118, i16* %10
%119 = load float, float* %9
%120 = fmul float %119, 2.550000e+02
%121 = fptosi float %120 to i16
store i16 %121, i16* %11
%122 = load float, float* %8
%123 = fmul float %122, 2.550000e+02
%124 = fptosi float %123 to i16
store i16 %124, i16* %12
%125 = load i16, i16* %10
%126 = sext i16 %125 to i32
%127 = icmp slt i32 %126, 0
br i1 %127, label %128, label %129
128: ; preds = %64
store i16 0, i16* %10
br label %129
129: ; preds = %128, %64
%130 = load i16, i16* %10
%131 = sext i16 %130 to i32
%132 = icmp sgt i32 %131, 255
br i1 %132, label %133, label %134
133: ; preds = %129
store i16 255, i16* %10
br label %134
134: ; preds = %133, %129
%135 = load i16, i16* %11
%136 = sext i16 %135 to i32
%137 = icmp slt i32 %136, 0
br i1 %137, label %138, label %139
138: ; preds = %134
store i16 0, i16* %11
br label %139
139: ; preds = %138, %134
%140 = load i16, i16* %11
%141 = sext i16 %140 to i32
%142 = icmp sgt i32 %141, 255
br i1 %142, label %143, label %144
143: ; preds = %139
store i16 255, i16* %11
br label %144
144: ; preds = %143, %139
%145 = load i16, i16* %12
%146 = sext i16 %145 to i32
%147 = icmp slt i32 %146, 0
br i1 %147, label %148, label %149
148: ; preds = %144
store i16 0, i16* %12
br label %149
149: ; preds = %148, %144
%150 = load i16, i16* %12
%151 = sext i16 %150 to i32
%152 = icmp sgt i32 %151, 255
br i1 %152, label %153, label %154
153: ; preds = %149
store i16 255, i16* %12
br label %154
154: ; preds = %153, %149
%155 = load i16, i16* %12
%156 = sext i16 %155 to i32
%157 = shl i32 %156, 16
%158 = load i16, i16* %11
%159 = sext i16 %158 to i32
%160 = shl i32 %159, 8
%161 = or i32 %157, %160
%162 = load i16, i16* %10
%163 = sext i16 %162 to i32
%164 = or i32 %161, %163
%165 = sext i32 %164 to i64
ret i64 %165
}

LLVM IR (-O2):
define i64 @HSVtoHEX(float %0, float %1, float %2) {
%4 = fmul float %0, 6.000000e+00
%5 = tail call float @fmod(float %4, i32 6)
%6 = fadd float %5, 6.000000e+00
%7 = fadd float %6, 1.000000e+00
%8 = tail call float @fmod(float %7, i32 6)
%9 = fcmp olt float %8, 1.000000e+00
br i1 %9, label %10, label %12
10: ; preds = %3
%11 = fsub float 1.000000e+00, %8
br label %34
12: ; preds = %3
%13 = fcmp olt float %8, 2.000000e+00
br i1 %13, label %14, label %17
14: ; preds = %12
%15 = fadd float %8, -1.000000e+00
%16 = insertelement <2 x float> <float poison, float 1.000000e+00>, float %15, i64 0
br label %34
17: ; preds = %12
%18 = fcmp olt float %8, 3.000000e+00
br i1 %18, label %19, label %22
19: ; preds = %17
%20 = fsub float 3.000000e+00, %8
%21 = insertelement <2 x float> <float 1.000000e+00, float poison>, float %20, i64 1
br label %34
22: ; preds = %17
%23 = fcmp olt float %8, 4.000000e+00
br i1 %23, label %24, label %26
24: ; preds = %22
%25 = fadd float %8, -3.000000e+00
br label %34
26: ; preds = %22
%27 = fcmp olt float %8, 5.000000e+00
br i1 %27, label %28, label %31
28: ; preds = %26
%29 = fsub float 5.000000e+00, %8
%30 = insertelement <2 x float> <float poison, float 0.000000e+00>, float %29, i64 0
br label %34
31: ; preds = %26
%32 = fadd float %8, -5.000000e+00
%33 = insertelement <2 x float> <float 0.000000e+00, float poison>, float %32, i64 1
br label %34
34: ; preds = %14, %24, %31, %28, %19, %10
%35 = phi float [ %11, %10 ], [ 0.000000e+00, %14 ], [ 0.000000e+00, %19 ], [ %25, %24 ], [ 1.000000e+00, %28 ], [ 1.000000e+00, %31 ]
%36 = phi <2 x float> [ <float 0.000000e+00, float 1.000000e+00>, %10 ], [ %16, %14 ], [ %21, %19 ], [ <float 1.000000e+00, float 0.000000e+00>, %24 ], [ %30, %28 ], [ %33, %31 ]
%37 = fmul float %35, %2
%38 = insertelement <2 x float> poison, float %2, i64 0
%39 = shufflevector <2 x float> %38, <2 x float> poison, <2 x i32> zeroinitializer
%40 = fmul <2 x float> %36, %39
%41 = extractelement <2 x float> %40, i64 1
%42 = fadd float %41, 0.000000e+00
%43 = fadd float %42, %37
%44 = extractelement <2 x float> %40, i64 0
%45 = fadd float %43, %44
%46 = fpext float %45 to double
%47 = fpext float %1 to double
%48 = fsub double 1.000000e+00, %47
%49 = fmul float %37, %1
%50 = fpext float %49 to double
%51 = tail call double @llvm.fmuladd.f64(double %46, double %48, double %50)
%52 = fptrunc double %51 to float
%53 = insertelement <2 x float> poison, float %1, i64 0
%54 = shufflevector <2 x float> %53, <2 x float> poison, <2 x i32> zeroinitializer
%55 = fmul <2 x float> %40, %54
%56 = fpext <2 x float> %55 to <2 x double>
%57 = insertelement <2 x double> poison, double %46, i64 0
%58 = shufflevector <2 x double> %57, <2 x double> poison, <2 x i32> zeroinitializer
%59 = insertelement <2 x double> poison, double %48, i64 0
%60 = shufflevector <2 x double> %59, <2 x double> poison, <2 x i32> zeroinitializer
%61 = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %58, <2 x double> %60, <2 x double> %56)
%62 = fptrunc <2 x double> %61 to <2 x float>
%63 = fmul <2 x float> %62, <float 2.550000e+02, float 2.550000e+02>
%64 = fptosi <2 x float> %63 to <2 x i16>
%65 = fmul float %52, 2.550000e+02
%66 = fptosi float %65 to i16
%67 = icmp sgt <2 x i16> %64, zeroinitializer
%68 = extractelement <2 x i1> %67, i64 1
%69 = extractelement <2 x i16> %64, i64 1
%70 = select i1 %68, i16 %69, i16 0
%71 = icmp ult i16 %70, 255
%72 = select i1 %71, i16 %70, i16 255
%73 = extractelement <2 x i1> %67, i64 0
%74 = extractelement <2 x i16> %64, i64 0
%75 = select i1 %73, i16 %74, i16 0
%76 = icmp ult i16 %75, 255
%77 = select i1 %76, i16 %75, i16 255
%78 = icmp sgt i16 %66, 0
%79 = select i1 %78, i16 %66, i16 0
%80 = icmp ult i16 %79, 255
%81 = select i1 %80, i16 %79, i16 255
%82 = zext i16 %81 to i64
%83 = shl nuw nsw i64 %82, 16
%84 = shl nuw i16 %77, 8
%85 = zext i16 %84 to i64
%86 = or i64 %83, %85
%87 = zext i16 %72 to i64
%88 = or i64 %86, %87
ret i64 %88
}