#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 */
scalar_t__ pow(float, float);
void rgb_to_cielab_pixel(unsigned char r, unsigned char g, unsigned char b,
                         unsigned char *Cl, unsigned char *Ca,
                         unsigned char *Cb) {
  int i;
  float var_X, var_Y, var_Z, X, Y, Z;
  float var_R = r / 255.0f;
  float var_G = g / 255.0f;
  float var_B = b / 255.0f;
  float ref_X = 95.047;
  float ref_Y = 100.000;
  float ref_Z = 108.883;
  float result[3];
  if (var_R > 0.04045f) {
    var_R = (float)pow(((var_R + 0.055f) / 1.055f), 2.4f);
  } else {
    var_R = var_R / 12.92f;
  }
  if (var_G > 0.04045f) {
    var_G = (float)pow(((var_G + 0.055f) / 1.055), 2.4f);
  } else {
    var_G = var_G / 12.92f;
  }
  if (var_B > 0.04045f) {
    var_B = (float)pow(((var_B + 0.055f) / 1.055f), 2.4f);
  } else {
    var_B = var_B / 12.92f;
  }
  var_R = var_R * 100.0f;
  var_G = var_G * 100.0f;
  var_B = var_B * 100.0f;
  X = var_R * 0.4124f + var_G * 0.3576f + var_B * 0.1805f;
  Y = var_R * 0.2126f + var_G * 0.7152f + var_B * 0.0722f;
  Z = var_R * 0.0193f + var_G * 0.1192f + var_B * 0.9505f;
  var_X = X / ref_X;
  var_Y = Y / ref_Y;
  var_Z = Z / ref_Z;
  if (var_X > 0.008856f) {
    var_X = (float)pow(var_X, 1.0f / 3.0f);
  } else {
    var_X = (7.787f * var_X) + (16 / 116);
  }
  if (var_Y > 0.008856f) {
    var_Y = (float)pow(var_Y, 1.0f / 3.0f);
  } else {
    var_Y = (7.787f * var_Y) + (16.0f / 116.0f);
  }
  if (var_Z > 0.008856f) {
    var_Z = (float)pow(var_Z, 1.0f / 3.0f);
  } else {
    var_Z = (7.787f * var_Z) + (16.0f / 116.0f);
  }
  result[0] = ((116 * var_Y) - 16);
  result[1] = (500 * (var_X - var_Y));
  result[2] = (200 * (var_Y - var_Z));
  for (i = 0; i < 3; i++) {
    if (result[i] < 0)
      result[i] += 255;
  }
  *Cl = (unsigned char)result[0];
  *Ca = (unsigned char)result[1];
  *Cb = (unsigned char)result[2];
}


x86 assembly (clang, -O0):
<rgb_to_cielab_pixel>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %dl,%al
mov    %sil,%dl
mov    %dil,%sil
mov    %sil,-0x1(%rbp)
mov    %dl,-0x2(%rbp)
mov    %al,-0x3(%rbp)
mov    %rcx,-0x10(%rbp)
mov    %r8,-0x18(%rbp)
mov    %r9,-0x20(%rbp)
movzbl -0x1(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  0xeca(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x40(%rbp)
movzbl -0x2(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  0xeb1(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
movzbl -0x3(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  0xe98(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  0xe83(%rip),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  0xe72(%rip),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  0xe61(%rip),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x40(%rbp),%xmm0
movss  0xe4b(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    11f3 <rgb_to_cielab_pixel+0xe3>
movss  0xe5a(%rip),%xmm0
addss  -0x40(%rbp),%xmm0
movss  0xe49(%rip),%xmm1
divss  %xmm1,%xmm0
movss  0xe39(%rip),%xmm1
call   1030 <pow@plt>
cvtsi2ss %rax,%xmm0
movss  %xmm0,-0x40(%rbp)
jmp    1209 <rgb_to_cielab_pixel+0xf9>
movss  -0x40(%rbp),%xmm0
movss  0xe14(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0x44(%rbp),%xmm0
movss  0xdea(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    125c <rgb_to_cielab_pixel+0x14c>
movss  0xdf9(%rip),%xmm0
addss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe30(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  0xdd0(%rip),%xmm1
call   1030 <pow@plt>
cvtsi2ss %rax,%xmm0
movss  %xmm0,-0x44(%rbp)
jmp    1272 <rgb_to_cielab_pixel+0x162>
movss  -0x44(%rbp),%xmm0
movss  0xdab(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x48(%rbp),%xmm0
movss  0xd81(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    12bd <rgb_to_cielab_pixel+0x1ad>
movss  0xd90(%rip),%xmm0
addss  -0x48(%rbp),%xmm0
movss  0xd7f(%rip),%xmm1
divss  %xmm1,%xmm0
movss  0xd6f(%rip),%xmm1
call   1030 <pow@plt>
cvtsi2ss %rax,%xmm0
movss  %xmm0,-0x48(%rbp)
jmp    12d3 <rgb_to_cielab_pixel+0x1c3>
movss  -0x48(%rbp),%xmm0
movss  0xd4a(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x48(%rbp)
movss  0xd2d(%rip),%xmm0
mulss  -0x40(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  0xd1b(%rip),%xmm0
mulss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  0xd09(%rip),%xmm0
mulss  -0x48(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x40(%rbp),%xmm1
movss  0xd32(%rip),%xmm0
mulss  -0x44(%rbp),%xmm0
movss  0xd21(%rip),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x48(%rbp),%xmm0
movss  0xd08(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x40(%rbp),%xmm1
movss  0xcea(%rip),%xmm0
mulss  -0x44(%rbp),%xmm0
movss  0xcd9(%rip),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x48(%rbp),%xmm0
movss  0xcc0(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x38(%rbp)
movss  -0x40(%rbp),%xmm1
movss  0xca2(%rip),%xmm0
mulss  -0x44(%rbp),%xmm0
movss  0xc91(%rip),%xmm2
mulss  %xmm2,%xmm1
addss  %xmm0,%xmm1
movss  -0x48(%rbp),%xmm0
movss  0xc78(%rip),%xmm2
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x3c(%rbp)
movss  -0x34(%rbp),%xmm0
divss  -0x4c(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x38(%rbp),%xmm0
divss  -0x50(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x3c(%rbp),%xmm0
divss  -0x54(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x28(%rbp),%xmm0
movss  0xc2d(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1421 <rgb_to_cielab_pixel+0x311>
movss  -0x28(%rbp),%xmm0
movss  0xc43(%rip),%xmm1
call   1030 <pow@plt>
cvtsi2ss %rax,%xmm0
movss  %xmm0,-0x28(%rbp)
jmp    143e <rgb_to_cielab_pixel+0x32e>
movss  -0x28(%rbp),%xmm0
movss  0xc1e(%rip),%xmm1
mulss  %xmm1,%xmm0
xorps  %xmm1,%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x2c(%rbp),%xmm0
movss  0xbd9(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    1475 <rgb_to_cielab_pixel+0x365>
movss  -0x2c(%rbp),%xmm0
movss  0xbef(%rip),%xmm1
call   1030 <pow@plt>
cvtsi2ss %rax,%xmm0
movss  %xmm0,-0x2c(%rbp)
jmp    1497 <rgb_to_cielab_pixel+0x387>
movss  -0x2c(%rbp),%xmm0
movss  0xbca(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  0xbc6(%rip),%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x30(%rbp),%xmm0
movss  0xb80(%rip),%xmm1
ucomiss %xmm1,%xmm0
jbe    14ce <rgb_to_cielab_pixel+0x3be>
movss  -0x30(%rbp),%xmm0
movss  0xb96(%rip),%xmm1
call   1030 <pow@plt>
cvtsi2ss %rax,%xmm0
movss  %xmm0,-0x30(%rbp)
jmp    14f0 <rgb_to_cielab_pixel+0x3e0>
movss  -0x30(%rbp),%xmm0
movss  0xb71(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  0xb6d(%rip),%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x2c(%rbp),%xmm0
movss  0xb63(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  0xb5b(%rip),%xmm1
addss  %xmm1,%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x28(%rbp),%xmm1
subss  -0x2c(%rbp),%xmm1
movss  0xb38(%rip),%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x2c(%rbp),%xmm1
subss  -0x30(%rbp),%xmm1
movss  0xb19(%rip),%xmm0
mulss  %xmm1,%xmm0
movss  %xmm0,-0x58(%rbp)
movl   $0x0,-0x24(%rbp)
cmpl   $0x3,-0x24(%rbp)
jge    1596 <rgb_to_cielab_pixel+0x486>
movslq -0x24(%rbp),%rax
xorps  %xmm0,%xmm0
ucomiss -0x60(%rbp,%rax,4),%xmm0
jbe    1583 <rgb_to_cielab_pixel+0x473>
movslq -0x24(%rbp),%rax
movss  0xa99(%rip),%xmm0
addss  -0x60(%rbp,%rax,4),%xmm0
movss  %xmm0,-0x60(%rbp,%rax,4)
jmp    1588 <rgb_to_cielab_pixel+0x478>
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    154f <rgb_to_cielab_pixel+0x43f>
cvttss2si -0x60(%rbp),%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
cvttss2si -0x5c(%rbp),%eax
mov    %al,%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
cvttss2si -0x58(%rbp),%eax
mov    %al,%cl
mov    -0x20(%rbp),%rax
mov    %cl,(%rax)
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<rgb_to_cielab_pixel>:
push   %r15
push   %r14
push   %rbx
sub    $0x30,%rsp
mov    %r9,%r14
mov    %r8,%r15
mov    %rcx,%rbx
cvtsi2ss %edi,%xmm2
movss  0xed2(%rip),%xmm0
cvtsi2ss %esi,%xmm7
divss  %xmm0,%xmm2
cvtsi2ss %edx,%xmm4
divss  %xmm0,%xmm7
ucomiss 0xebf(%rip),%xmm2
jbe    1189 <rgb_to_cielab_pixel+0x79>
addss  0xebd(%rip),%xmm2
divss  0xeb9(%rip),%xmm2
movss  0xeb5(%rip),%xmm1
movaps %xmm2,%xmm0
movss  %xmm4,0xc(%rsp)
movss  %xmm7,0x10(%rsp)
call   1030 <pow@plt>
movss  0x10(%rsp),%xmm7
movss  0xc(%rsp),%xmm4
xorps  %xmm2,%xmm2
cvtsi2ss %rax,%xmm2
jmp    1191 <rgb_to_cielab_pixel+0x81>
divss  0xe77(%rip),%xmm2
movss  0xe67(%rip),%xmm0
divss  %xmm0,%xmm4
ucomiss 0xe60(%rip),%xmm7
movss  %xmm2,0x20(%rsp)
jbe    11fb <rgb_to_cielab_pixel+0xeb>
addss  0xe58(%rip),%xmm7
xorps  %xmm0,%xmm0
cvtss2sd %xmm7,%xmm0
divsd  0xea5(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
movss  0xe45(%rip),%xmm1
movss  %xmm4,0xc(%rsp)
call   1030 <pow@plt>
movss  0xc(%rsp),%xmm4
xorps  %xmm7,%xmm7
cvtsi2ss %rax,%xmm7
ucomiss 0xe15(%rip),%xmm4
ja     120c <rgb_to_cielab_pixel+0xfc>
divss  0xe0f(%rip),%xmm4
jmp    1240 <rgb_to_cielab_pixel+0x130>
divss  0xe05(%rip),%xmm7
ucomiss 0xdfa(%rip),%xmm4
jbe    11f1 <rgb_to_cielab_pixel+0xe1>
addss  0xdf8(%rip),%xmm4
divss  0xdf4(%rip),%xmm4
movss  0xdf0(%rip),%xmm1
movaps %xmm4,%xmm0
movss  %xmm7,0x10(%rsp)
call   1030 <pow@plt>
movss  0x10(%rsp),%xmm7
xorps  %xmm4,%xmm4
cvtsi2ss %rax,%xmm4
movss  0x20(%rsp),%xmm6
movss  0xdca(%rip),%xmm1
mulss  %xmm1,%xmm6
mulss  %xmm1,%xmm7
mulss  %xmm1,%xmm4
movss  0xdba(%rip),%xmm0
mulss  %xmm7,%xmm0
movss  0xdb2(%rip),%xmm2
mulss  %xmm6,%xmm2
addss  %xmm0,%xmm2
movss  0xda6(%rip),%xmm0
mulss  %xmm4,%xmm0
addss  %xmm2,%xmm0
movss  0xd9a(%rip),%xmm2
mulss  %xmm7,%xmm2
movss  0xd92(%rip),%xmm3
mulss  %xmm6,%xmm3
addss  %xmm2,%xmm3
movss  0xd86(%rip),%xmm5
mulss  %xmm4,%xmm5
addss  %xmm3,%xmm5
mulss  0xd7a(%rip),%xmm7
mulss  0xd76(%rip),%xmm6
mulss  0xd72(%rip),%xmm4
addss  %xmm7,%xmm6
addss  %xmm6,%xmm4
divss  0xd66(%rip),%xmm0
divss  %xmm1,%xmm5
ucomiss 0xd63(%rip),%xmm0
jbe    1319 <rgb_to_cielab_pixel+0x209>
movss  0xd61(%rip),%xmm1
movss  %xmm4,0xc(%rsp)
movaps %xmm5,0x20(%rsp)
call   1030 <pow@plt>
movaps 0x20(%rsp),%xmm5
movss  0xc(%rsp),%xmm4
xorps  %xmm0,%xmm0
cvtsi2ss %rax,%xmm0
movaps %xmm0,0x10(%rsp)
jmp    132d <rgb_to_cielab_pixel+0x21d>
mulss  0xd2b(%rip),%xmm0
xorps  %xmm1,%xmm1
addss  %xmm0,%xmm1
movaps %xmm1,0x10(%rsp)
divss  0xd0f(%rip),%xmm4
ucomiss 0xd0c(%rip),%xmm5
jbe    137d <rgb_to_cielab_pixel+0x26d>
movss  0xd0a(%rip),%xmm1
movaps %xmm5,%xmm0
movss  %xmm4,0xc(%rsp)
call   1030 <pow@plt>
movss  0xc(%rsp),%xmm4
xorps  %xmm5,%xmm5
cvtsi2ss %rax,%xmm5
ucomiss 0xcdf(%rip),%xmm4
ja     1396 <rgb_to_cielab_pixel+0x286>
mulss  0xcd9(%rip),%xmm4
addss  0xcd9(%rip),%xmm4
jmp    13b8 <rgb_to_cielab_pixel+0x2a8>
mulss  0xcc7(%rip),%xmm5
addss  0xcc7(%rip),%xmm5
ucomiss 0xcb4(%rip),%xmm4
jbe    136b <rgb_to_cielab_pixel+0x25b>
movss  0xcb2(%rip),%xmm1
movaps %xmm4,%xmm0
movaps %xmm5,0x20(%rsp)
call   1030 <pow@plt>
movaps 0x20(%rsp),%xmm5
xorps  %xmm4,%xmm4
cvtsi2ss %rax,%xmm4
movss  0xc98(%rip),%xmm0
mulss  %xmm5,%xmm0
addss  0xc90(%rip),%xmm0
movaps 0x10(%rsp),%xmm6
subss  %xmm5,%xmm6
mulss  0xc83(%rip),%xmm6
subss  %xmm4,%xmm5
mulss  0xc7b(%rip),%xmm5
movaps %xmm0,%xmm1
movss  0xc0c(%rip),%xmm4
addss  %xmm4,%xmm1
xorps  %xmm2,%xmm2
movaps %xmm0,%xmm3
cmpltss %xmm2,%xmm3
andps  %xmm3,%xmm1
andnps %xmm0,%xmm3
orps   %xmm1,%xmm3
movaps %xmm6,%xmm0
addss  %xmm4,%xmm0
movaps %xmm6,%xmm1
cmpltss %xmm2,%xmm1
andps  %xmm1,%xmm0
andnps %xmm6,%xmm1
orps   %xmm0,%xmm1
addss  %xmm5,%xmm4
movaps %xmm5,%xmm0
cmpltss %xmm2,%xmm0
andps  %xmm0,%xmm4
andnps %xmm5,%xmm0
cvttss2si %xmm3,%eax
orps   %xmm4,%xmm0
mov    %al,(%rbx)
cvttss2si %xmm1,%eax
mov    %al,(%r15)
cvttss2si %xmm0,%eax
mov    %al,(%r14)
add    $0x30,%rsp
pop    %rbx
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
define void @rgb_to_cielab_pixel(i8 zeroext %0, i8 zeroext %1, i8 zeroext %2, i8* %3, i8* %4, i8* %5) {
%7 = alloca i8
%8 = alloca i8
%9 = alloca i8
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca i8*
%13 = alloca i32
%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 [3 x float]
store i8 %0, i8* %7
store i8 %1, i8* %8
store i8 %2, i8* %9
store i8* %3, i8** %10
store i8* %4, i8** %11
store i8* %5, i8** %12
%27 = load i8, i8* %7
%28 = zext i8 %27 to i32
%29 = sitofp i32 %28 to float
%30 = fdiv float %29, 2.550000e+02
store float %30, float* %20
%31 = load i8, i8* %8
%32 = zext i8 %31 to i32
%33 = sitofp i32 %32 to float
%34 = fdiv float %33, 2.550000e+02
store float %34, float* %21
%35 = load i8, i8* %9
%36 = zext i8 %35 to i32
%37 = sitofp i32 %36 to float
%38 = fdiv float %37, 2.550000e+02
store float %38, float* %22
store float 0x4057C30200000000, float* %23
store float 1.000000e+02, float* %24
store float 0x405B388320000000, float* %25
%39 = load float, float* %20
%40 = fcmp ogt float %39, 0x3FA4B5DCC0000000
br i1 %40, label %41, label %47
41: ; preds = %6
%42 = load float, float* %20
%43 = fadd float %42, 0x3FAC28F5C0000000
%44 = fdiv float %43, 0x3FF0E147A0000000
%45 = call i64 @pow(float %44, float 0x4003333340000000)
%46 = sitofp i64 %45 to float
store float %46, float* %20
br label %50
47: ; preds = %6
%48 = load float, float* %20
%49 = fdiv float %48, 0x4029D70A40000000
store float %49, float* %20
br label %50
50: ; preds = %47, %41
%51 = load float, float* %21
%52 = fcmp ogt float %51, 0x3FA4B5DCC0000000
br i1 %52, label %53, label %61
53: ; preds = %50
%54 = load float, float* %21
%55 = fadd float %54, 0x3FAC28F5C0000000
%56 = fpext float %55 to double
%57 = fdiv double %56, 1.055000e+00
%58 = fptrunc double %57 to float
%59 = call i64 @pow(float %58, float 0x4003333340000000)
%60 = sitofp i64 %59 to float
store float %60, float* %21
br label %64
61: ; preds = %50
%62 = load float, float* %21
%63 = fdiv float %62, 0x4029D70A40000000
store float %63, float* %21
br label %64
64: ; preds = %61, %53
%65 = load float, float* %22
%66 = fcmp ogt float %65, 0x3FA4B5DCC0000000
br i1 %66, label %67, label %73
67: ; preds = %64
%68 = load float, float* %22
%69 = fadd float %68, 0x3FAC28F5C0000000
%70 = fdiv float %69, 0x3FF0E147A0000000
%71 = call i64 @pow(float %70, float 0x4003333340000000)
%72 = sitofp i64 %71 to float
store float %72, float* %22
br label %76
73: ; preds = %64
%74 = load float, float* %22
%75 = fdiv float %74, 0x4029D70A40000000
store float %75, float* %22
br label %76
76: ; preds = %73, %67
%77 = load float, float* %20
%78 = fmul float %77, 1.000000e+02
store float %78, float* %20
%79 = load float, float* %21
%80 = fmul float %79, 1.000000e+02
store float %80, float* %21
%81 = load float, float* %22
%82 = fmul float %81, 1.000000e+02
store float %82, float* %22
%83 = load float, float* %20
%84 = load float, float* %21
%85 = fmul float %84, 0x3FD6E2EB20000000
%86 = call float @llvm.fmuladd.f32(float %83, float 0x3FDA64C300000000, float %85)
%87 = load float, float* %22
%88 = call float @llvm.fmuladd.f32(float %87, float 0x3FC71A9FC0000000, float %86)
store float %88, float* %17
%89 = load float, float* %20
%90 = load float, float* %21
%91 = fmul float %90, 0x3FE6E2EB20000000
%92 = call float @llvm.fmuladd.f32(float %89, float 0x3FCB367A00000000, float %91)
%93 = load float, float* %22
%94 = call float @llvm.fmuladd.f32(float %93, float 0x3FB27BB300000000, float %92)
store float %94, float* %18
%95 = load float, float* %20
%96 = load float, float* %21
%97 = fmul float %96, 0x3FBE83E420000000
%98 = call float @llvm.fmuladd.f32(float %95, float 0x3F93C36120000000, float %97)
%99 = load float, float* %22
%100 = call float @llvm.fmuladd.f32(float %99, float 0x3FEE6A7F00000000, float %98)
store float %100, float* %19
%101 = load float, float* %17
%102 = load float, float* %23
%103 = fdiv float %101, %102
store float %103, float* %14
%104 = load float, float* %18
%105 = load float, float* %24
%106 = fdiv float %104, %105
store float %106, float* %15
%107 = load float, float* %19
%108 = load float, float* %25
%109 = fdiv float %107, %108
store float %109, float* %16
%110 = load float, float* %14
%111 = fcmp ogt float %110, 0x3F82231840000000
br i1 %111, label %112, label %116
112: ; preds = %76
%113 = load float, float* %14
%114 = call i64 @pow(float %113, float 0x3FD5555560000000)
%115 = sitofp i64 %114 to float
store float %115, float* %14
br label %119
116: ; preds = %76
%117 = load float, float* %14
%118 = call float @llvm.fmuladd.f32(float 0x401F25E360000000, float %117, float 0.000000e+00)
store float %118, float* %14
br label %119
119: ; preds = %116, %112
%120 = load float, float* %15
%121 = fcmp ogt float %120, 0x3F82231840000000
br i1 %121, label %122, label %126
122: ; preds = %119
%123 = load float, float* %15
%124 = call i64 @pow(float %123, float 0x3FD5555560000000)
%125 = sitofp i64 %124 to float
store float %125, float* %15
br label %129
126: ; preds = %119
%127 = load float, float* %15
%128 = call float @llvm.fmuladd.f32(float 0x401F25E360000000, float %127, float 0x3FC1A7B960000000)
store float %128, float* %15
br label %129
129: ; preds = %126, %122
%130 = load float, float* %16
%131 = fcmp ogt float %130, 0x3F82231840000000
br i1 %131, label %132, label %136
132: ; preds = %129
%133 = load float, float* %16
%134 = call i64 @pow(float %133, float 0x3FD5555560000000)
%135 = sitofp i64 %134 to float
store float %135, float* %16
br label %139
136: ; preds = %129
%137 = load float, float* %16
%138 = call float @llvm.fmuladd.f32(float 0x401F25E360000000, float %137, float 0x3FC1A7B960000000)
store float %138, float* %16
br label %139
139: ; preds = %136, %132
%140 = load float, float* %15
%141 = call float @llvm.fmuladd.f32(float 1.160000e+02, float %140, float -1.600000e+01)
%142 = getelementptr inbounds [3 x float], [3 x float]* %26, i64 0, i64 0
store float %141, float* %142
%143 = load float, float* %14
%144 = load float, float* %15
%145 = fsub float %143, %144
%146 = fmul float 5.000000e+02, %145
%147 = getelementptr inbounds [3 x float], [3 x float]* %26, i64 0, i64 1
store float %146, float* %147
%148 = load float, float* %15
%149 = load float, float* %16
%150 = fsub float %148, %149
%151 = fmul float 2.000000e+02, %150
%152 = getelementptr inbounds [3 x float], [3 x float]* %26, i64 0, i64 2
store float %151, float* %152
store i32 0, i32* %13
br label %153
153: ; preds = %169, %139
%154 = load i32, i32* %13
%155 = icmp slt i32 %154, 3
br i1 %155, label %156, label %172
156: ; preds = %153
%157 = load i32, i32* %13
%158 = sext i32 %157 to i64
%159 = getelementptr inbounds [3 x float], [3 x float]* %26, i64 0, i64 %158
%160 = load float, float* %159
%161 = fcmp olt float %160, 0.000000e+00
br i1 %161, label %162, label %168
162: ; preds = %156
%163 = load i32, i32* %13
%164 = sext i32 %163 to i64
%165 = getelementptr inbounds [3 x float], [3 x float]* %26, i64 0, i64 %164
%166 = load float, float* %165
%167 = fadd float %166, 2.550000e+02
store float %167, float* %165
br label %168
168: ; preds = %162, %156
br label %169
169: ; preds = %168
%170 = load i32, i32* %13
%171 = add nsw i32 %170, 1
store i32 %171, i32* %13
br label %153
172: ; preds = %153
%173 = getelementptr inbounds [3 x float], [3 x float]* %26, i64 0, i64 0
%174 = load float, float* %173
%175 = fptoui float %174 to i8
%176 = load i8*, i8** %10
store i8 %175, i8* %176
%177 = getelementptr inbounds [3 x float], [3 x float]* %26, i64 0, i64 1
%178 = load float, float* %177
%179 = fptoui float %178 to i8
%180 = load i8*, i8** %11
store i8 %179, i8* %180
%181 = getelementptr inbounds [3 x float], [3 x float]* %26, i64 0, i64 2
%182 = load float, float* %181
%183 = fptoui float %182 to i8
%184 = load i8*, i8** %12
store i8 %183, i8* %184
ret void
}

LLVM IR (-O2):
define void @rgb_to_cielab_pixel(i8 zeroext %0, i8 zeroext %1, i8 zeroext %2, i8* nocapture writeonly %3, i8* nocapture writeonly %4, i8* nocapture writeonly %5) {
%7 = uitofp i8 %0 to float
%8 = fdiv float %7, 2.550000e+02
%9 = uitofp i8 %1 to float
%10 = fdiv float %9, 2.550000e+02
%11 = uitofp i8 %2 to float
%12 = fdiv float %11, 2.550000e+02
%13 = fcmp ogt float %8, 0x3FA4B5DCC0000000
br i1 %13, label %14, label %19
14: ; preds = %6
%15 = fadd float %8, 0x3FAC28F5C0000000
%16 = fdiv float %15, 0x3FF0E147A0000000
%17 = tail call i64 @pow(float %16, float 0x4003333340000000)
%18 = sitofp i64 %17 to float
br label %21
19: ; preds = %6
%20 = fdiv float %8, 0x4029D70A40000000
br label %21
21: ; preds = %19, %14
%22 = phi float [ %18, %14 ], [ %20, %19 ]
%23 = fcmp ogt float %10, 0x3FA4B5DCC0000000
br i1 %23, label %24, label %31
24: ; preds = %21
%25 = fadd float %10, 0x3FAC28F5C0000000
%26 = fpext float %25 to double
%27 = fdiv double %26, 1.055000e+00
%28 = fptrunc double %27 to float
%29 = tail call i64 @pow(float %28, float 0x4003333340000000)
%30 = sitofp i64 %29 to float
br label %33
31: ; preds = %21
%32 = fdiv float %10, 0x4029D70A40000000
br label %33
33: ; preds = %31, %24
%34 = phi float [ %30, %24 ], [ %32, %31 ]
%35 = fcmp ogt float %12, 0x3FA4B5DCC0000000
br i1 %35, label %36, label %41
36: ; preds = %33
%37 = fadd float %12, 0x3FAC28F5C0000000
%38 = fdiv float %37, 0x3FF0E147A0000000
%39 = tail call i64 @pow(float %38, float 0x4003333340000000)
%40 = sitofp i64 %39 to float
br label %43
41: ; preds = %33
%42 = fdiv float %12, 0x4029D70A40000000
br label %43
43: ; preds = %41, %36
%44 = phi float [ %40, %36 ], [ %42, %41 ]
%45 = fmul float %22, 1.000000e+02
%46 = fmul float %34, 1.000000e+02
%47 = fmul float %44, 1.000000e+02
%48 = fmul float %46, 0x3FD6E2EB20000000
%49 = tail call float @llvm.fmuladd.f32(float %45, float 0x3FDA64C300000000, float %48)
%50 = tail call float @llvm.fmuladd.f32(float %47, float 0x3FC71A9FC0000000, float %49)
%51 = fmul float %46, 0x3FE6E2EB20000000
%52 = tail call float @llvm.fmuladd.f32(float %45, float 0x3FCB367A00000000, float %51)
%53 = tail call float @llvm.fmuladd.f32(float %47, float 0x3FB27BB300000000, float %52)
%54 = fmul float %46, 0x3FBE83E420000000
%55 = tail call float @llvm.fmuladd.f32(float %45, float 0x3F93C36120000000, float %54)
%56 = tail call float @llvm.fmuladd.f32(float %47, float 0x3FEE6A7F00000000, float %55)
%57 = fdiv float %50, 0x4057C30200000000
%58 = fdiv float %53, 1.000000e+02
%59 = fdiv float %56, 0x405B388320000000
%60 = fcmp ogt float %57, 0x3F82231840000000
br i1 %60, label %61, label %64
61: ; preds = %43
%62 = tail call i64 @pow(float %57, float 0x3FD5555560000000)
%63 = sitofp i64 %62 to float
br label %66
64: ; preds = %43
%65 = tail call float @llvm.fmuladd.f32(float %57, float 0x401F25E360000000, float 0.000000e+00)
br label %66
66: ; preds = %64, %61
%67 = phi float [ %63, %61 ], [ %65, %64 ]
%68 = fcmp ogt float %58, 0x3F82231840000000
br i1 %68, label %69, label %72
69: ; preds = %66
%70 = tail call i64 @pow(float %58, float 0x3FD5555560000000)
%71 = sitofp i64 %70 to float
br label %74
72: ; preds = %66
%73 = tail call float @llvm.fmuladd.f32(float %58, float 0x401F25E360000000, float 0x3FC1A7B960000000)
br label %74
74: ; preds = %72, %69
%75 = phi float [ %71, %69 ], [ %73, %72 ]
%76 = fcmp ogt float %59, 0x3F82231840000000
br i1 %76, label %77, label %80
77: ; preds = %74
%78 = tail call i64 @pow(float %59, float 0x3FD5555560000000)
%79 = sitofp i64 %78 to float
br label %82
80: ; preds = %74
%81 = tail call float @llvm.fmuladd.f32(float %59, float 0x401F25E360000000, float 0x3FC1A7B960000000)
br label %82
82: ; preds = %80, %77
%83 = phi float [ %79, %77 ], [ %81, %80 ]
%84 = tail call float @llvm.fmuladd.f32(float %75, float 1.160000e+02, float -1.600000e+01)
%85 = fsub float %67, %75
%86 = fmul float %85, 5.000000e+02
%87 = fsub float %75, %83
%88 = fmul float %87, 2.000000e+02
%89 = fcmp olt float %84, 0.000000e+00
%90 = fadd float %84, 2.550000e+02
%91 = select i1 %89, float %90, float %84
%92 = fcmp olt float %86, 0.000000e+00
%93 = fadd float %86, 2.550000e+02
%94 = select i1 %92, float %93, float %86
%95 = fcmp olt float %88, 0.000000e+00
%96 = fadd float %88, 2.550000e+02
%97 = select i1 %95, float %96, float %88
%98 = fptoui float %91 to i8
store i8 %98, i8* %3
%99 = fptoui float %94 to i8
store i8 %99, i8* %4
%100 = fptoui float %97 to i8
store i8 %100, i8* %5
ret void
}