float fromTo(char in, char out, float par) {
  float parOut;
  switch (in) {
  case 'C':
    switch (out) {
    case 'C':
      parOut = par;
      break;
    case 'D':
      parOut = (100 - par) * 1.5;
      break;
    case 'F':
      parOut = par * 1.8 + 32;
      break;
    case 'K':
      parOut = par + 273.15;
      break;
    case 'R':
      parOut = par * 1.8 + 491.67;
      break;
    default:
      parOut = (float)-1;
      break;
    }
    break;
  case 'D':
    switch (out) {
    case 'C':
      parOut = 100 - par * 2 / 3;
      break;
    case 'D':
      parOut = par;
      break;
    case 'F':
      parOut = 212 - par * 1.2;
      break;
    case 'K':
      parOut = 373.15 - par * 2 / 3;
      break;
    case 'R':
      parOut = 671.67 - par * 1.2;
      break;
    default:
      parOut = (float)-1;
      break;
    }
    break;
  case 'F':
    switch (out) {
    case 'C':
      parOut = (par - 32) * 5 / 9;
      break;
    case 'D':
      parOut = (212 - par) * 5 / 6;
      break;
    case 'F':
      parOut = par;
      break;
    case 'K':
      parOut = (par + 459.67) * 5 / 9;
      break;
    case 'R':
      parOut = par + 459.67;
      break;
    default:
      parOut = (float)-1;
      break;
    }
    break;
  case 'K':
    switch (out) {
    case 'C':
      parOut = par - 275.15;
      break;
    case 'D':
      parOut = (373.15 - par) * 1.5;
      break;
    case 'F':
      parOut = par * 1.8 - 459.67;
      break;
    case 'K':
      parOut = par;
      break;
    case 'R':
      parOut = par * 1.8;
      break;
    default:
      parOut = (float)-1;
      break;
    }
    break;
  case 'R':
    switch (out) {
    case 'C':
      parOut = par * 5 / 9 - 273.15;
      break;
    case 'D':
      parOut = (671.67 - par) * 5 / 6;
      break;
    case 'F':
      parOut = par - 459.67;
      break;
    case 'K':
      parOut = par * 5 / 9;
      break;
    case 'R':
      parOut = par;
      break;
    default:
      parOut = -1;
      break;
    }
    break;
  default:
    parOut = (float)-1;
    break;
  }
  return parOut;
}


x86 assembly (clang, -O0):
<fromTo>:
push   %rbp
mov    %rsp,%rbp
mov    %sil,%al
mov    %dil,%cl
mov    %cl,-0x1(%rbp)
mov    %al,-0x2(%rbp)
movss  %xmm0,-0x8(%rbp)
movsbl -0x1(%rbp),%eax
add    $0xffffffbd,%eax
mov    %eax,%ecx
mov    %rcx,-0x18(%rbp)
sub    $0xf,%eax
ja     1670 <fromTo+0x570>
mov    -0x18(%rbp),%rax
lea    0xf6a(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movsbl -0x2(%rbp),%eax
add    $0xffffffbd,%eax
mov    %eax,%ecx
mov    %rcx,-0x20(%rbp)
sub    $0xf,%eax
ja     1224 <fromTo+0x124>
mov    -0x20(%rbp),%rax
lea    0x1080(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1231 <fromTo+0x131>
movss  0xea0(%rip),%xmm0
subss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xecf(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1231 <fromTo+0x131>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe9c(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xed8(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1231 <fromTo+0x131>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe65(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1231 <fromTo+0x131>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe4a(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe7e(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1231 <fromTo+0x131>
movss  0xddc(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    167d <fromTo+0x57d>
movsbl -0x2(%rbp),%eax
add    $0xffffffbd,%eax
mov    %eax,%ecx
mov    %rcx,-0x28(%rbp)
sub    $0xf,%eax
ja     1361 <fromTo+0x261>
mov    -0x28(%rbp),%rax
lea    0xf49(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movss  0xdb4(%rip),%xmm1
mulss  -0x8(%rbp),%xmm1
movss  0xda3(%rip),%xmm0
divss  %xmm0,%xmm1
movss  0xd9f(%rip),%xmm0
subss  %xmm1,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    136e <fromTo+0x26e>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    136e <fromTo+0x26e>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xdba(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xdb6(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    136e <fromTo+0x26e>
movss  0xd30(%rip),%xmm0
mulss  -0x8(%rbp),%xmm0
movss  0xd1f(%rip),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd5f(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    136e <fromTo+0x26e>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movq   %xmm0,%rax
movabs $0x8000000000000000,%rcx
xor    %rcx,%rax
movq   %rax,%xmm0
movsd  0xd3d(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xcf1(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    136e <fromTo+0x26e>
movss  0xc9f(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    167d <fromTo+0x57d>
movsbl -0x2(%rbp),%eax
add    $0xffffffbd,%eax
mov    %eax,%ecx
mov    %rcx,-0x30(%rbp)
sub    $0xf,%eax
ja     146c <fromTo+0x36c>
mov    -0x30(%rbp),%rax
lea    0xdcc(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movss  -0x8(%rbp),%xmm0
movss  0xc6a(%rip),%xmm1
subss  %xmm1,%xmm0
movss  0xc4e(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  0xc3e(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1479 <fromTo+0x379>
movss  0xc38(%rip),%xmm0
subss  -0x8(%rbp),%xmm0
movss  0xc1f(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  0xc1b(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1479 <fromTo+0x379>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1479 <fromTo+0x379>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc09(%rip),%xmm1
addsd  %xmm1,%xmm0
movsd  0xc0d(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xc41(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1479 <fromTo+0x379>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbce(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1479 <fromTo+0x379>
movss  0xb94(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    167d <fromTo+0x57d>
movsbl -0x2(%rbp),%eax
add    $0xffffffbd,%eax
mov    %eax,%ecx
mov    %rcx,-0x38(%rbp)
sub    $0xf,%eax
ja     155b <fromTo+0x45b>
mov    -0x38(%rbp),%rax
lea    0xc81(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xbb7(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1568 <fromTo+0x468>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xb8c(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0xb78(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1568 <fromTo+0x468>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb45(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xb41(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1568 <fromTo+0x468>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1568 <fromTo+0x468>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb07(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    1568 <fromTo+0x468>
movss  0xaa5(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    167d <fromTo+0x57d>
movsbl -0x2(%rbp),%eax
add    $0xffffffbd,%eax
mov    %eax,%ecx
mov    %rcx,-0x40(%rbp)
sub    $0xf,%eax
ja     165e <fromTo+0x55e>
mov    -0x40(%rbp),%rax
lea    0xb52(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movss  0xa65(%rip),%xmm0
mulss  -0x8(%rbp),%xmm0
movss  0xa54(%rip),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa8c(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    166b <fromTo+0x56b>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xa61(%rip),%xmm0
subsd  %xmm1,%xmm0
movsd  0xa4d(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xa39(%rip),%xmm1
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    166b <fromTo+0x56b>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xa0e(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    166b <fromTo+0x56b>
movss  0x9d0(%rip),%xmm0
mulss  -0x8(%rbp),%xmm0
movss  0x9bf(%rip),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    166b <fromTo+0x56b>
movss  -0x8(%rbp),%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    166b <fromTo+0x56b>
movss  0x9a2(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
jmp    167d <fromTo+0x57d>
movss  0x990(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
movss  -0xc(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<fromTo>:
movss  0xef8(%rip),%xmm2
add    $0xffffffbd,%edi
cmp    $0xf,%edi
ja     1237 <fromTo+0x137>
lea    0xf8d(%rip),%rax
movslq (%rax,%rdi,4),%rcx
add    %rax,%rcx
movaps %xmm2,%xmm1
jmp    *%rcx
movsbl %sil,%eax
add    $0xffffffbd,%eax
cmp    $0xf,%eax
ja     1237 <fromTo+0x137>
lea    0x10aa(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
movaps %xmm0,%xmm1
jmp    *%rax
movss  0xeca(%rip),%xmm1
subss  %xmm0,%xmm1
mulss  0xec2(%rip),%xmm1
movaps %xmm1,%xmm0
ret
movsbl %sil,%eax
add    $0xffffffbd,%eax
cmp    $0xf,%eax
ja     1237 <fromTo+0x137>
lea    0x102f(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
movaps %xmm0,%xmm1
jmp    *%rax
addss  %xmm0,%xmm0
divss  0xe87(%rip),%xmm0
addss  0xe83(%rip),%xmm0
ret
movsbl %sil,%eax
add    $0xffffffbd,%eax
cmp    $0xf,%eax
ja     1237 <fromTo+0x137>
lea    0xfb7(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
movaps %xmm0,%xmm1
jmp    *%rax
addss  0xe4f(%rip),%xmm0
jmp    123e <fromTo+0x13e>
movsbl %sil,%eax
add    $0xffffffbd,%eax
cmp    $0xf,%eax
ja     1237 <fromTo+0x137>
lea    0xf4e(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
movaps %xmm0,%xmm1
jmp    *%rax
cvtss2sd %xmm0,%xmm0
addsd  0xe76(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
movsbl %sil,%eax
add    $0xffffffbd,%eax
cmp    $0xf,%eax
ja     1237 <fromTo+0x137>
lea    0xede(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
movaps %xmm0,%xmm1
jmp    *%rax
mulss  0xde6(%rip),%xmm0
divss  0xde2(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xe16(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
movaps %xmm2,%xmm1
movaps %xmm1,%xmm0
ret
mulss  0xdbe(%rip),%xmm0
divss  0xdba(%rip),%xmm0
ret
cvtss2sd %xmm0,%xmm0
mulsd  0xdf5(%rip),%xmm0
addsd  0xe3d(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
cvtss2sd %xmm0,%xmm0
addsd  0xe24(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
cvtss2sd %xmm0,%xmm0
mulsd  0xdcb(%rip),%xmm0
addsd  0xe03(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
cvtss2sd %xmm0,%xmm0
mulsd  0xde2(%rip),%xmm0
addsd  0xde2(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
addss  %xmm0,%xmm0
divss  0xd61(%rip),%xmm0
cvtss2sd %xmm0,%xmm0
addsd  0xd95(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
cvtss2sd %xmm0,%xmm0
mulsd  0xdac(%rip),%xmm0
addsd  0xd54(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
movss  0xd23(%rip),%xmm1
subss  %xmm0,%xmm1
mulss  0xd0f(%rip),%xmm1
divss  0xd13(%rip),%xmm1
movaps %xmm1,%xmm0
ret
cvtss2sd %xmm0,%xmm0
addsd  0xd63(%rip),%xmm0
mulsd  0xd23(%rip),%xmm0
divsd  0xd5b(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
cvtss2sd %xmm0,%xmm0
addsd  0xd42(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
cvtss2sd %xmm0,%xmm0
movsd  0xd19(%rip),%xmm1
subsd  %xmm0,%xmm1
mulsd  0xd15(%rip),%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
ret
cvtss2sd %xmm0,%xmm0
mulsd  0xcf1(%rip),%xmm0
jmp    139e <fromTo+0x29e>
cvtss2sd %xmm0,%xmm0
mulsd  0xce3(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret
cvtss2sd %xmm0,%xmm0
movsd  0xcb2(%rip),%xmm1
subsd  %xmm0,%xmm1
mulsd  0xcae(%rip),%xmm1
divsd  0xcae(%rip),%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
ret
cvtss2sd %xmm0,%xmm0
addsd  0xc82(%rip),%xmm0
cvtsd2ss %xmm0,%xmm0
ret

LLVM IR (-O0):
define float @fromTo(i8 signext %0, i8 signext %1, float %2) {
%4 = alloca i8
%5 = alloca i8
%6 = alloca float
%7 = alloca float
store i8 %0, i8* %4
store i8 %1, i8* %5
store float %2, float* %6
%8 = load i8, i8* %4
%9 = sext i8 %8 to i32
switch i32 %9, label %156 [
i32 67, label %10
i32 68, label %38
i32 70, label %69
i32 75, label %98
i32 82, label %126
]
10: ; preds = %3
%11 = load i8, i8* %5
%12 = sext i8 %11 to i32
switch i32 %12, label %36 [
i32 67, label %13
i32 68, label %15
i32 70, label %21
i32 75, label %26
i32 82, label %31
]
13: ; preds = %10
%14 = load float, float* %6
store float %14, float* %7
br label %37
15: ; preds = %10
%16 = load float, float* %6
%17 = fsub float 1.000000e+02, %16
%18 = fpext float %17 to double
%19 = fmul double %18, 1.500000e+00
%20 = fptrunc double %19 to float
store float %20, float* %7
br label %37
21: ; preds = %10
%22 = load float, float* %6
%23 = fpext float %22 to double
%24 = call double @llvm.fmuladd.f64(double %23, double 1.800000e+00, double 3.200000e+01)
%25 = fptrunc double %24 to float
store float %25, float* %7
br label %37
26: ; preds = %10
%27 = load float, float* %6
%28 = fpext float %27 to double
%29 = fadd double %28, 2.731500e+02
%30 = fptrunc double %29 to float
store float %30, float* %7
br label %37
31: ; preds = %10
%32 = load float, float* %6
%33 = fpext float %32 to double
%34 = call double @llvm.fmuladd.f64(double %33, double 1.800000e+00, double 4.916700e+02)
%35 = fptrunc double %34 to float
store float %35, float* %7
br label %37
36: ; preds = %10
store float -1.000000e+00, float* %7
br label %37
37: ; preds = %36, %31, %26, %21, %15, %13
br label %157
38: ; preds = %3
%39 = load i8, i8* %5
%40 = sext i8 %39 to i32
switch i32 %40, label %67 [
i32 67, label %41
i32 68, label %46
i32 70, label %48
i32 75, label %54
i32 82, label %61
]
41: ; preds = %38
%42 = load float, float* %6
%43 = fmul float %42, 2.000000e+00
%44 = fdiv float %43, 3.000000e+00
%45 = fsub float 1.000000e+02, %44
store float %45, float* %7
br label %68
46: ; preds = %38
%47 = load float, float* %6
store float %47, float* %7
br label %68
48: ; preds = %38
%49 = load float, float* %6
%50 = fpext float %49 to double
%51 = fneg double %50
%52 = call double @llvm.fmuladd.f64(double %51, double 1.200000e+00, double 2.120000e+02)
%53 = fptrunc double %52 to float
store float %53, float* %7
br label %68
54: ; preds = %38
%55 = load float, float* %6
%56 = fmul float %55, 2.000000e+00
%57 = fdiv float %56, 3.000000e+00
%58 = fpext float %57 to double
%59 = fsub double 3.731500e+02, %58
%60 = fptrunc double %59 to float
store float %60, float* %7
br label %68
61: ; preds = %38
%62 = load float, float* %6
%63 = fpext float %62 to double
%64 = fneg double %63
%65 = call double @llvm.fmuladd.f64(double %64, double 1.200000e+00, double 0x4084FD5C28F5C28F)
%66 = fptrunc double %65 to float
store float %66, float* %7
br label %68
67: ; preds = %38
store float -1.000000e+00, float* %7
br label %68
68: ; preds = %67, %61, %54, %48, %46, %41
br label %157
69: ; preds = %3
%70 = load i8, i8* %5
%71 = sext i8 %70 to i32
switch i32 %71, label %96 [
i32 67, label %72
i32 68, label %77
i32 70, label %82
i32 75, label %84
i32 82, label %91
]
72: ; preds = %69
%73 = load float, float* %6
%74 = fsub float %73, 3.200000e+01
%75 = fmul float %74, 5.000000e+00
%76 = fdiv float %75, 9.000000e+00
store float %76, float* %7
br label %97
77: ; preds = %69
%78 = load float, float* %6
%79 = fsub float 2.120000e+02, %78
%80 = fmul float %79, 5.000000e+00
%81 = fdiv float %80, 6.000000e+00
store float %81, float* %7
br label %97
82: ; preds = %69
%83 = load float, float* %6
store float %83, float* %7
br label %97
84: ; preds = %69
%85 = load float, float* %6
%86 = fpext float %85 to double
%87 = fadd double %86, 4.596700e+02
%88 = fmul double %87, 5.000000e+00
%89 = fdiv double %88, 9.000000e+00
%90 = fptrunc double %89 to float
store float %90, float* %7
br label %97
91: ; preds = %69
%92 = load float, float* %6
%93 = fpext float %92 to double
%94 = fadd double %93, 4.596700e+02
%95 = fptrunc double %94 to float
store float %95, float* %7
br label %97
96: ; preds = %69
store float -1.000000e+00, float* %7
br label %97
97: ; preds = %96, %91, %84, %82, %77, %72
br label %157
98: ; preds = %3
%99 = load i8, i8* %5
%100 = sext i8 %99 to i32
switch i32 %100, label %124 [
i32 67, label %101
i32 68, label %106
i32 70, label %112
i32 75, label %117
i32 82, label %119
]
101: ; preds = %98
%102 = load float, float* %6
%103 = fpext float %102 to double
%104 = fsub double %103, 2.751500e+02
%105 = fptrunc double %104 to float
store float %105, float* %7
br label %125
106: ; preds = %98
%107 = load float, float* %6
%108 = fpext float %107 to double
%109 = fsub double 3.731500e+02, %108
%110 = fmul double %109, 1.500000e+00
%111 = fptrunc double %110 to float
store float %111, float* %7
br label %125
112: ; preds = %98
%113 = load float, float* %6
%114 = fpext float %113 to double
%115 = call double @llvm.fmuladd.f64(double %114, double 1.800000e+00, double -4.596700e+02)
%116 = fptrunc double %115 to float
store float %116, float* %7
br label %125
117: ; preds = %98
%118 = load float, float* %6
store float %118, float* %7
br label %125
119: ; preds = %98
%120 = load float, float* %6
%121 = fpext float %120 to double
%122 = fmul double %121, 1.800000e+00
%123 = fptrunc double %122 to float
store float %123, float* %7
br label %125
124: ; preds = %98
store float -1.000000e+00, float* %7
br label %125
125: ; preds = %124, %119, %117, %112, %106, %101
br label %157
126: ; preds = %3
%127 = load i8, i8* %5
%128 = sext i8 %127 to i32
switch i32 %128, label %154 [
i32 67, label %129
i32 68, label %136
i32 70, label %143
i32 75, label %148
i32 82, label %152
]
129: ; preds = %126
%130 = load float, float* %6
%131 = fmul float %130, 5.000000e+00
%132 = fdiv float %131, 9.000000e+00
%133 = fpext float %132 to double
%134 = fsub double %133, 2.731500e+02
%135 = fptrunc double %134 to float
store float %135, float* %7
br label %155
136: ; preds = %126
%137 = load float, float* %6
%138 = fpext float %137 to double
%139 = fsub double 0x4084FD5C28F5C28F, %138
%140 = fmul double %139, 5.000000e+00
%141 = fdiv double %140, 6.000000e+00
%142 = fptrunc double %141 to float
store float %142, float* %7
br label %155
143: ; preds = %126
%144 = load float, float* %6
%145 = fpext float %144 to double
%146 = fsub double %145, 4.596700e+02
%147 = fptrunc double %146 to float
store float %147, float* %7
br label %155
148: ; preds = %126
%149 = load float, float* %6
%150 = fmul float %149, 5.000000e+00
%151 = fdiv float %150, 9.000000e+00
store float %151, float* %7
br label %155
152: ; preds = %126
%153 = load float, float* %6
store float %153, float* %7
br label %155
154: ; preds = %126
store float -1.000000e+00, float* %7
br label %155
155: ; preds = %154, %152, %148, %143, %136, %129
br label %157
156: ; preds = %3
store float -1.000000e+00, float* %7
br label %157
157: ; preds = %156, %155, %125, %97, %68, %37
%158 = load float, float* %7
ret float %158
}

LLVM IR (-O2):
define float @fromTo(i8 signext %0, i8 signext %1, float %2) {
%4 = sext i8 %0 to i32
switch i32 %4, label %109 [
i32 67, label %5
i32 68, label %23
i32 70, label %46
i32 75, label %67
i32 82, label %87
]
5: ; preds = %3
%6 = sext i8 %1 to i32
switch i32 %6, label %22 [
i32 67, label %109
i32 68, label %7
i32 70, label %10
i32 75, label %14
i32 82, label %18
]
7: ; preds = %5
%8 = fsub float 1.000000e+02, %2
%9 = fmul float %8, 1.500000e+00
br label %109
10: ; preds = %5
%11 = fpext float %2 to double
%12 = tail call double @llvm.fmuladd.f64(double %11, double 1.800000e+00, double 3.200000e+01)
%13 = fptrunc double %12 to float
br label %109
14: ; preds = %5
%15 = fpext float %2 to double
%16 = fadd double %15, 2.731500e+02
%17 = fptrunc double %16 to float
br label %109
18: ; preds = %5
%19 = fpext float %2 to double
%20 = tail call double @llvm.fmuladd.f64(double %19, double 1.800000e+00, double 4.916700e+02)
%21 = fptrunc double %20 to float
br label %109
22: ; preds = %5
br label %109
23: ; preds = %3
%24 = sext i8 %1 to i32
switch i32 %24, label %45 [
i32 67, label %25
i32 68, label %109
i32 70, label %29
i32 75, label %34
i32 82, label %40
]
25: ; preds = %23
%26 = fmul float %2, 2.000000e+00
%27 = fdiv float %26, 3.000000e+00
%28 = fsub float 1.000000e+02, %27
br label %109
29: ; preds = %23
%30 = fpext float %2 to double
%31 = fneg double %30
%32 = tail call double @llvm.fmuladd.f64(double %31, double 1.200000e+00, double 2.120000e+02)
%33 = fptrunc double %32 to float
br label %109
34: ; preds = %23
%35 = fmul float %2, 2.000000e+00
%36 = fdiv float %35, 3.000000e+00
%37 = fpext float %36 to double
%38 = fsub double 3.731500e+02, %37
%39 = fptrunc double %38 to float
br label %109
40: ; preds = %23
%41 = fpext float %2 to double
%42 = fneg double %41
%43 = tail call double @llvm.fmuladd.f64(double %42, double 1.200000e+00, double 0x4084FD5C28F5C28F)
%44 = fptrunc double %43 to float
br label %109
45: ; preds = %23
br label %109
46: ; preds = %3
%47 = sext i8 %1 to i32
switch i32 %47, label %66 [
i32 67, label %48
i32 68, label %52
i32 70, label %109
i32 75, label %56
i32 82, label %62
]
48: ; preds = %46
%49 = fadd float %2, -3.200000e+01
%50 = fmul float %49, 5.000000e+00
%51 = fdiv float %50, 9.000000e+00
br label %109
52: ; preds = %46
%53 = fsub float 2.120000e+02, %2
%54 = fmul float %53, 5.000000e+00
%55 = fdiv float %54, 6.000000e+00
br label %109
56: ; preds = %46
%57 = fpext float %2 to double
%58 = fadd double %57, 4.596700e+02
%59 = fmul double %58, 5.000000e+00
%60 = fdiv double %59, 9.000000e+00
%61 = fptrunc double %60 to float
br label %109
62: ; preds = %46
%63 = fpext float %2 to double
%64 = fadd double %63, 4.596700e+02
%65 = fptrunc double %64 to float
br label %109
66: ; preds = %46
br label %109
67: ; preds = %3
%68 = sext i8 %1 to i32
switch i32 %68, label %86 [
i32 67, label %69
i32 68, label %73
i32 70, label %78
i32 75, label %109
i32 82, label %82
]
69: ; preds = %67
%70 = fpext float %2 to double
%71 = fadd double %70, -2.751500e+02
%72 = fptrunc double %71 to float
br label %109
73: ; preds = %67
%74 = fpext float %2 to double
%75 = fsub double 3.731500e+02, %74
%76 = fmul double %75, 1.500000e+00
%77 = fptrunc double %76 to float
br label %109
78: ; preds = %67
%79 = fpext float %2 to double
%80 = tail call double @llvm.fmuladd.f64(double %79, double 1.800000e+00, double -4.596700e+02)
%81 = fptrunc double %80 to float
br label %109
82: ; preds = %67
%83 = fpext float %2 to double
%84 = fmul double %83, 1.800000e+00
%85 = fptrunc double %84 to float
br label %109
86: ; preds = %67
br label %109
87: ; preds = %3
%88 = sext i8 %1 to i32
switch i32 %88, label %108 [
i32 67, label %89
i32 68, label %95
i32 70, label %101
i32 75, label %105
i32 82, label %109
]
89: ; preds = %87
%90 = fmul float %2, 5.000000e+00
%91 = fdiv float %90, 9.000000e+00
%92 = fpext float %91 to double
%93 = fadd double %92, -2.731500e+02
%94 = fptrunc double %93 to float
br label %109
95: ; preds = %87
%96 = fpext float %2 to double
%97 = fsub double 0x4084FD5C28F5C28F, %96
%98 = fmul double %97, 5.000000e+00
%99 = fdiv double %98, 6.000000e+00
%100 = fptrunc double %99 to float
br label %109
101: ; preds = %87
%102 = fpext float %2 to double
%103 = fadd double %102, -4.596700e+02
%104 = fptrunc double %103 to float
br label %109
105: ; preds = %87
%106 = fmul float %2, 5.000000e+00
%107 = fdiv float %106, 9.000000e+00
br label %109
108: ; preds = %87
br label %109
109: ; preds = %3, %87, %67, %46, %23, %5, %89, %95, %101, %105, %108, %69, %73, %78, %82, %86, %48, %52, %56, %62, %66, %25, %29, %34, %40, %45, %7, %10, %14, %18, %22
%110 = phi float [ -1.000000e+00, %108 ], [ %107, %105 ], [ %104, %101 ], [ %100, %95 ], [ %94, %89 ], [ -1.000000e+00, %86 ], [ %85, %82 ], [ %81, %78 ], [ %77, %73 ], [ %72, %69 ], [ -1.000000e+00, %66 ], [ %65, %62 ], [ %61, %56 ], [ %55, %52 ], [ %51, %48 ], [ -1.000000e+00, %45 ], [ %44, %40 ], [ %39, %34 ], [ %33, %29 ], [ %28, %25 ], [ -1.000000e+00, %22 ], [ %21, %18 ], [ %17, %14 ], [ %13, %10 ], [ %9, %7 ], [ %2, %5 ], [ %2, %23 ], [ %2, %46 ], [ %2, %67 ], [ %2, %87 ], [ -1.000000e+00, %3 ]
ret float %110
}