#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 pow(float, float);
float powf(float, int);
void Lab2RGB(float *l, float *a, float *b) {
  float thresh1 = 0.008856;
  float thresh2 = 0.206893;
  float Xn = 0.950456;
  float Yn = 1.000;
  float Zn = 1.088854;
  float r13 = 1.0 / 3.0;
  float r16116 = 16.0 / 116.0;
  float cnst = 7.787;
  float X, Y, Z;
  float L = *l;
  float A = *a;
  float B = *b;
  float P = (L + 16.0) / 116.0;
  if (L > 7.9996) {
    Y = Yn * P * P * P;
  } else {
    Y = L / 903.3;
  }
  float yr = Y / Yn, fy;
  if (yr > thresh1) {
    fy = pow(yr, r13);
  } else {
    fy = cnst * yr + r16116;
  }
  float fx = A / 500.0 + fy;
  float fz = fy - B / 200.0;
  if (fx > thresh2) {
    X = Xn * fx * fx * fx;
  } else {
    X = Xn / cnst * (fx - r16116);
  }
  if (fz > thresh2) {
    Z = Zn * fz * fz * fz;
  } else {
    Z = Zn / cnst * (fz - r16116);
  }
  float R1 = 3.240479 * X - 1.537150 * Y - 0.498535 * Z;
  float G1 = -0.969256 * X + 1.875992 * Y + 0.041556 * Z;
  float B1 = 0.055648 * X - 0.204043 * Y + 1.057311 * Z;
  R1 = powf(R1, 1 / 2.2);
  G1 = powf(G1, 1 / 2.2);
  B1 = powf(B1, 1 / 2.2);
  *l = (((0.0) > ((((255.0) < (255.0 * R1)) ? (255.0) : (255.0 * R1))))
            ? (0.0)
            : ((((255.0) < (255.0 * R1)) ? (255.0) : (255.0 * R1))));
  *a = (((0.0) > ((((255.0) < (255.0 * G1)) ? (255.0) : (255.0 * G1))))
            ? (0.0)
            : ((((255.0) < (255.0 * G1)) ? (255.0) : (255.0 * G1))));
  *b = (((0.0) > ((((255.0) < (255.0 * B1)) ? (255.0) : (255.0 * B1))))
            ? (0.0)
            : ((((255.0) < (255.0 * B1)) ? (255.0) : (255.0 * B1))));
}


x86 assembly (clang, -O0):
<Lab2RGB>:
push   %rbp
mov    %rsp,%rbp
sub    $0xc0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
movss  0xf5d(%rip),%xmm0
movss  %xmm0,-0x1c(%rbp)
movss  0xf4c(%rip),%xmm0
movss  %xmm0,-0x20(%rbp)
movss  0xf3b(%rip),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  0xf2a(%rip),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  0xf19(%rip),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  0xf08(%rip),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  0xef7(%rip),%xmm0
movss  %xmm0,-0x34(%rbp)
movss  0xee6(%rip),%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x48(%rbp)
mov    -0x10(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x4c(%rbp)
mov    -0x18(%rbp),%rax
movss  (%rax),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe39(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xe25(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdff(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1229 <Lab2RGB+0x109>
movss  -0x28(%rbp),%xmm0
mulss  -0x54(%rbp),%xmm0
mulss  -0x54(%rbp),%xmm0
mulss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    1247 <Lab2RGB+0x127>
movss  -0x48(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdde(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x40(%rbp),%xmm0
divss  -0x28(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
movss  -0x58(%rbp),%xmm0
ucomiss -0x1c(%rbp),%xmm0
jbe    127e <Lab2RGB+0x15e>
movss  -0x58(%rbp),%xmm0
movss  -0x30(%rbp),%xmm1
call   1040 <pow@plt>
movss  %xmm0,-0x5c(%rbp)
jmp    129a <Lab2RGB+0x17a>
movss  -0x38(%rbp),%xmm0
movss  -0x58(%rbp),%xmm2
movss  -0x34(%rbp),%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x4c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd7d(%rip),%xmm1
divsd  %xmm1,%xmm0
movss  -0x5c(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x5c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movss  -0x50(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xd41(%rip),%xmm2
divsd  %xmm2,%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x64(%rbp)
movss  -0x60(%rbp),%xmm0
ucomiss -0x20(%rbp),%xmm0
jbe    131d <Lab2RGB+0x1fd>
movss  -0x24(%rbp),%xmm0
mulss  -0x60(%rbp),%xmm0
mulss  -0x60(%rbp),%xmm0
mulss  -0x60(%rbp),%xmm0
movss  %xmm0,-0x3c(%rbp)
jmp    133a <Lab2RGB+0x21a>
movss  -0x24(%rbp),%xmm0
divss  -0x38(%rbp),%xmm0
movss  -0x60(%rbp),%xmm1
subss  -0x34(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x64(%rbp),%xmm0
ucomiss -0x20(%rbp),%xmm0
jbe    1367 <Lab2RGB+0x247>
movss  -0x2c(%rbp),%xmm0
mulss  -0x64(%rbp),%xmm0
mulss  -0x64(%rbp),%xmm0
mulss  -0x64(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
jmp    1384 <Lab2RGB+0x264>
movss  -0x2c(%rbp),%xmm0
divss  -0x38(%rbp),%xmm0
movss  -0x64(%rbp),%xmm1
subss  -0x34(%rbp),%xmm1
mulss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xcda(%rip),%xmm0
mulsd  %xmm2,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xcaf(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc8e(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x68(%rbp)
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xc5b(%rip),%xmm0
mulsd  %xmm2,%xmm0
movsd  0xc47(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc26(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x6c(%rbp)
movss  -0x3c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movss  -0x40(%rbp),%xmm0
cvtss2sd %xmm0,%xmm2
movsd  0xbf3(%rip),%xmm0
mulsd  %xmm2,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xbc8(%rip),%xmm2
mulsd  %xmm2,%xmm1
addsd  %xmm0,%xmm1
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xba7(%rip),%xmm2
mulsd  %xmm2,%xmm0
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x70(%rbp)
movss  -0x68(%rbp),%xmm0
xor    %edi,%edi
call   1030 <powf@plt>
movss  %xmm0,-0x68(%rbp)
movss  -0x6c(%rbp),%xmm0
xor    %edi,%edi
call   1030 <powf@plt>
movss  %xmm0,-0x6c(%rbp)
movss  -0x70(%rbp),%xmm0
xor    %edi,%edi
call   1030 <powf@plt>
movss  %xmm0,-0x70(%rbp)
movss  -0x68(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb4a(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0xb3e(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    150e <Lab2RGB+0x3ee>
movsd  0xb2c(%rip),%xmm0
movsd  %xmm0,-0x78(%rbp)
jmp    1528 <Lab2RGB+0x408>
movss  -0x68(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb11(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x78(%rbp)
movsd  -0x78(%rbp),%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1547 <Lab2RGB+0x427>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x80(%rbp)
jmp    15ad <Lab2RGB+0x48d>
movss  -0x68(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xad8(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0xacc(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1583 <Lab2RGB+0x463>
movsd  0xaba(%rip),%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
jmp    15a0 <Lab2RGB+0x480>
movss  -0x68(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xa9c(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x88(%rbp)
ff
movsd  -0x88(%rbp),%xmm0
ff
movsd  %xmm0,-0x80(%rbp)
movsd  -0x80(%rbp),%xmm0
cvtsd2ss %xmm0,%xmm0
mov    -0x8(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xa61(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0xa55(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    15fa <Lab2RGB+0x4da>
movsd  0xa43(%rip),%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
jmp    1617 <Lab2RGB+0x4f7>
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xa25(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0x90(%rbp)
ff
movsd  -0x90(%rbp),%xmm1
ff
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    163c <Lab2RGB+0x51c>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x98(%rbp)
ff
jmp    16a5 <Lab2RGB+0x585>
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x9e3(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x9d7(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1678 <Lab2RGB+0x558>
movsd  0x9c5(%rip),%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
jmp    1695 <Lab2RGB+0x575>
movss  -0x6c(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x9a7(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa0(%rbp)
ff
movsd  -0xa0(%rbp),%xmm0
ff
movsd  %xmm0,-0x98(%rbp)
ff
movsd  -0x98(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
mov    -0x10(%rbp),%rax
movss  %xmm0,(%rax)
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x966(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x95a(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    16f5 <Lab2RGB+0x5d5>
movsd  0x948(%rip),%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
jmp    1712 <Lab2RGB+0x5f2>
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x92a(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xa8(%rbp)
ff
movsd  -0xa8(%rbp),%xmm1
ff
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    1737 <Lab2RGB+0x617>
xorps  %xmm0,%xmm0
movsd  %xmm0,-0xb0(%rbp)
ff
jmp    17a0 <Lab2RGB+0x680>
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x8e8(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  0x8dc(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    1773 <Lab2RGB+0x653>
movsd  0x8ca(%rip),%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
jmp    1790 <Lab2RGB+0x670>
movss  -0x70(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0x8ac(%rip),%xmm0
mulsd  %xmm1,%xmm0
movsd  %xmm0,-0xb8(%rbp)
ff
movsd  -0xb8(%rbp),%xmm0
ff
movsd  %xmm0,-0xb0(%rbp)
ff
movsd  -0xb0(%rbp),%xmm0
ff
cvtsd2ss %xmm0,%xmm0
mov    -0x18(%rbp),%rax
movss  %xmm0,(%rax)
add    $0xc0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Lab2RGB>:
push   %r15
push   %r14
push   %rbx
sub    $0x10,%rsp
mov    %rdx,%r14
mov    %rsi,%r15
mov    %rdi,%rbx
movss  (%rdi),%xmm0
cvtss2sd %xmm0,%xmm0
ucomisd 0xece(%rip),%xmm0
jbe    1165 <Lab2RGB+0x45>
addsd  0xeb4(%rip),%xmm0
divsd  0xeb4(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movaps %xmm0,%xmm4
mulss  %xmm0,%xmm4
mulss  %xmm0,%xmm4
jmp    1171 <Lab2RGB+0x51>
divsd  0xeab(%rip),%xmm0
cvtsd2ss %xmm0,%xmm4
movss  (%r15),%xmm1
movss  (%r14),%xmm3
ucomiss 0xefe(%rip),%xmm4
jbe    11ba <Lab2RGB+0x9a>
movss  %xmm1,0x8(%rsp)
movss  0xefa(%rip),%xmm1
movaps %xmm4,%xmm0
movss  %xmm4,0x4(%rsp)
movss  %xmm3,0xc(%rsp)
call   1040 <pow@plt>
movss  0x8(%rsp),%xmm1
movss  0xc(%rsp),%xmm3
movss  0x4(%rsp),%xmm4
jmp    11ce <Lab2RGB+0xae>
movss  0xec2(%rip),%xmm0
mulss  %xmm4,%xmm0
addss  0xeba(%rip),%xmm0
cvtss2sd %xmm1,%xmm1
divsd  0xe46(%rip),%xmm1
cvtss2sd %xmm0,%xmm0
addsd  %xmm0,%xmm1
cvtsd2ss %xmm1,%xmm2
xorps  %xmm1,%xmm1
cvtss2sd %xmm3,%xmm1
divsd  0xe33(%rip),%xmm1
addsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
ucomiss 0xe89(%rip),%xmm2
jbe    123b <Lab2RGB+0x11b>
movss  0xe8b(%rip),%xmm1
mulss  %xmm2,%xmm1
mulss  %xmm2,%xmm1
mulss  %xmm2,%xmm1
ucomiss 0xe6c(%rip),%xmm0
ja     1257 <Lab2RGB+0x137>
addss  0xe66(%rip),%xmm0
mulss  0xe6a(%rip),%xmm0
movaps %xmm0,%xmm3
jmp    126b <Lab2RGB+0x14b>
addss  0xe51(%rip),%xmm2
mulss  0xe4d(%rip),%xmm2
movaps %xmm2,%xmm1
ucomiss 0xe3b(%rip),%xmm0
jbe    1226 <Lab2RGB+0x106>
movss  0xe45(%rip),%xmm3
mulss  %xmm0,%xmm3
mulss  %xmm0,%xmm3
mulss  %xmm0,%xmm3
cvtss2sd %xmm1,%xmm1
xorps  %xmm2,%xmm2
cvtss2sd %xmm4,%xmm2
movsd  0xdb2(%rip),%xmm0
mulsd  %xmm2,%xmm0
movsd  0xdae(%rip),%xmm4
mulsd  %xmm1,%xmm4
addsd  %xmm0,%xmm4
cvtss2sd %xmm3,%xmm3
movsd  0xda2(%rip),%xmm0
mulsd  %xmm3,%xmm0
addsd  %xmm4,%xmm0
cvtsd2ss %xmm0,%xmm0
movsd  0xd96(%rip),%xmm4
mulsd  %xmm2,%xmm4
movsd  0xd92(%rip),%xmm5
mulsd  %xmm1,%xmm5
addsd  %xmm4,%xmm5
movsd  0xd8a(%rip),%xmm4
mulsd  %xmm3,%xmm4
addsd  %xmm5,%xmm4
cvtsd2ss %xmm4,%xmm4
movss  %xmm4,0x4(%rsp)
mulsd  0xd78(%rip),%xmm2
mulsd  0xd78(%rip),%xmm1
mulsd  0xd78(%rip),%xmm3
addsd  %xmm2,%xmm1
addsd  %xmm1,%xmm3
xorps  %xmm1,%xmm1
cvtsd2ss %xmm3,%xmm1
movss  %xmm1,0xc(%rsp)
xor    %edi,%edi
call   1030 <powf@plt>
movss  %xmm0,0x8(%rsp)
movss  0x4(%rsp),%xmm0
xor    %edi,%edi
call   1030 <powf@plt>
movss  %xmm0,0x4(%rsp)
movss  0xc(%rsp),%xmm0
xor    %edi,%edi
call   1030 <powf@plt>
movss  0x8(%rsp),%xmm1
cvtss2sd %xmm1,%xmm1
movsd  0xd2c(%rip),%xmm2
mulsd  %xmm2,%xmm1
movapd %xmm2,%xmm3
minsd  %xmm1,%xmm3
xorpd  %xmm1,%xmm1
movapd %xmm3,%xmm4
cmplesd %xmm1,%xmm4
andnpd %xmm3,%xmm4
xorps  %xmm3,%xmm3
cvtsd2ss %xmm4,%xmm3
movss  %xmm3,(%rbx)
movss  0x4(%rsp),%xmm3
cvtss2sd %xmm3,%xmm3
mulsd  %xmm2,%xmm3
movapd %xmm2,%xmm4
minsd  %xmm3,%xmm4
movapd %xmm4,%xmm3
cmplesd %xmm1,%xmm3
andnpd %xmm4,%xmm3
cvtsd2ss %xmm3,%xmm3
movss  %xmm3,(%r15)
cvtss2sd %xmm0,%xmm0
mulsd  %xmm2,%xmm0
minsd  %xmm0,%xmm2
movapd %xmm2,%xmm0
cmplesd %xmm1,%xmm0
andnpd %xmm2,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,(%r14)
add    $0x10,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

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

LLVM IR (-O2):
define void @Lab2RGB(float* nocapture %0, float* nocapture %1, float* nocapture %2) {
%4 = load float, float* %0
%5 = load float, float* %1
%6 = load float, float* %2
%7 = fpext float %4 to double
%8 = fadd double %7, 1.600000e+01
%9 = fdiv double %8, 1.160000e+02
%10 = fptrunc double %9 to float
%11 = fcmp ogt double %7, 7.999600e+00
br i1 %11, label %12, label %15
12: ; preds = %3
%13 = fmul float %10, %10
%14 = fmul float %13, %10
br label %18
15: ; preds = %3
%16 = fdiv double %7, 0x408C3A6666666666
%17 = fptrunc double %16 to float
br label %18
18: ; preds = %15, %12
%19 = phi float [ %14, %12 ], [ %17, %15 ]
%20 = fcmp ogt float %19, 0x3F82231840000000
br i1 %20, label %21, label %23
21: ; preds = %18
%22 = tail call float @pow(float %19, float 0x3FD5555560000000)
br label %25
23: ; preds = %18
%24 = tail call float @llvm.fmuladd.f32(float %19, float 0x401F25E360000000, float 0x3FC1A7B960000000)
br label %25
25: ; preds = %23, %21
%26 = phi float [ %22, %21 ], [ %24, %23 ]
%27 = fpext float %5 to double
%28 = fdiv double %27, 5.000000e+02
%29 = fpext float %26 to double
%30 = fadd double %28, %29
%31 = fptrunc double %30 to float
%32 = fpext float %6 to double
%33 = fdiv double %32, 2.000000e+02
%34 = fsub double %29, %33
%35 = fptrunc double %34 to float
%36 = fcmp ogt float %31, 0x3FCA7B7840000000
br i1 %36, label %37, label %41
37: ; preds = %25
%38 = fmul float %31, 0x3FEE6A22C0000000
%39 = fmul float %38, %31
%40 = fmul float %39, %31
br label %44
41: ; preds = %25
%42 = fadd float %31, 0xBFC1A7B960000000
%43 = fmul float %42, 0x3FBF3F1CA0000000
br label %44
44: ; preds = %41, %37
%45 = phi float [ %40, %37 ], [ %43, %41 ]
%46 = fcmp ogt float %35, 0x3FCA7B7840000000
br i1 %46, label %47, label %51
47: ; preds = %44
%48 = fmul float %35, 0x3FF16BF220000000
%49 = fmul float %48, %35
%50 = fmul float %49, %35
br label %54
51: ; preds = %44
%52 = fadd float %35, 0xBFC1A7B960000000
%53 = fmul float %52, 0x3FC1E5F0A0000000
br label %54
54: ; preds = %51, %47
%55 = phi float [ %50, %47 ], [ %53, %51 ]
%56 = fpext float %45 to double
%57 = fpext float %19 to double
%58 = fmul double %57, -1.537150e+00
%59 = tail call double @llvm.fmuladd.f64(double %56, double 0x4009EC804102FF8F, double %58)
%60 = fpext float %55 to double
%61 = tail call double @llvm.fmuladd.f64(double %60, double -4.985350e-01, double %59)
%62 = fptrunc double %61 to float
%63 = fmul double %57, 0x3FFE04102FF8EC10
%64 = tail call double @llvm.fmuladd.f64(double %56, double -9.692560e-01, double %63)
%65 = tail call double @llvm.fmuladd.f64(double %60, double 4.155600e-02, double %64)
%66 = fptrunc double %65 to float
%67 = fmul double %57, -2.040430e-01
%68 = tail call double @llvm.fmuladd.f64(double %56, double 5.564800e-02, double %67)
%69 = tail call double @llvm.fmuladd.f64(double %60, double 0x3FF0EABEF06B3786, double %68)
%70 = fptrunc double %69 to float
%71 = tail call float @powf(float %62, i32 0)
%72 = tail call float @powf(float %66, i32 0)
%73 = tail call float @powf(float %70, i32 0)
%74 = fpext float %71 to double
%75 = fmul double %74, 2.550000e+02
%76 = fcmp ogt double %75, 2.550000e+02
%77 = select i1 %76, double 2.550000e+02, double %75
%78 = fcmp ole double %77, 0.000000e+00
%79 = select i1 %78, double 0.000000e+00, double %77
%80 = fptrunc double %79 to float
store float %80, float* %0
%81 = fpext float %72 to double
%82 = fmul double %81, 2.550000e+02
%83 = fcmp ogt double %82, 2.550000e+02
%84 = select i1 %83, double 2.550000e+02, double %82
%85 = fcmp ole double %84, 0.000000e+00
%86 = select i1 %85, double 0.000000e+00, double %84
%87 = fptrunc double %86 to float
store float %87, float* %1
%88 = fpext float %73 to double
%89 = fmul double %88, 2.550000e+02
%90 = fcmp ogt double %89, 2.550000e+02
%91 = select i1 %90, double 2.550000e+02, double %89
%92 = fcmp ole double %91, 0.000000e+00
%93 = select i1 %92, double 0.000000e+00, double %91
%94 = fptrunc double %93 to float
store float %94, float* %2
ret void
}