float JellyValueAnimation(float p) {
  if (p < 0.2) {
    return -1 / (0.2 * 0.2) * p * p + 1.5;
  } else if (p < 0.4) {
    float t = (p - 0.3);
    return 80 * t * t - 0.8;
  } else if (p < 0.6) {
    float t = (p - 0.5);
    return -60 * t * t + 0.6;
  } else if (p < 0.8) {
    float t = (p - 0.7);
    return 40 * t * t - 0.4;
  } else if (p <= 1.0) {
    float t = (p - 0.9);
    return -20 * t * t + 0.2;
  } else {
    return 0;
  }
}


x86 assembly (clang, -O0):
<JellyValueAnimation>:
push   %rbp
mov    %rsp,%rbp
movss  %xmm0,-0x8(%rbp)
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xee6(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1160 <JellyValueAnimation+0x60>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xf1b(%rip),%xmm0
mulsd  %xmm1,%xmm0
movss  -0x8(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
mulsd  %xmm1,%xmm0
movsd  0xefa(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    130c <JellyValueAnimation+0x20c>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe97(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    11c9 <JellyValueAnimation+0xc9>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xeb4(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0xc(%rbp)
movss  0xec3(%rip),%xmm0
mulss  -0xc(%rbp),%xmm0
mulss  -0xc(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe61(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    130c <JellyValueAnimation+0x20c>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe36(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    1232 <JellyValueAnimation+0x132>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe43(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
movss  0xe56(%rip),%xmm0
mulss  -0x10(%rbp),%xmm0
mulss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdf0(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    130c <JellyValueAnimation+0x20c>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdd5(%rip),%xmm0
ucomisd %xmm1,%xmm0
jbe    129b <JellyValueAnimation+0x19b>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdd2(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  0xde9(%rip),%xmm0
mulss  -0x14(%rbp),%xmm0
mulss  -0x14(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd7f(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    130c <JellyValueAnimation+0x20c>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xd74(%rip),%xmm0
ucomisd %xmm1,%xmm0
jb     1304 <JellyValueAnimation+0x204>
movss  -0x8(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd61(%rip),%xmm1
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  0xd7c(%rip),%xmm0
mulss  -0x18(%rbp),%xmm0
mulss  -0x18(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd0e(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    130c <JellyValueAnimation+0x20c>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
pop    %rbp
ret

x86 assembly (clang, -O2):
<JellyValueAnimation>:
cvtss2sd %xmm0,%xmm2
movsd  0xef4(%rip),%xmm1
ucomisd %xmm2,%xmm1
jbe    112f <JellyValueAnimation+0x2f>
movsd  0xf2e(%rip),%xmm0
mulsd  %xmm2,%xmm0
mulsd  %xmm2,%xmm0
addsd  0xf26(%rip),%xmm0
jmp    1224 <JellyValueAnimation+0x124>
movsd  0xed1(%rip),%xmm1
ucomisd %xmm2,%xmm1
jbe    1170 <JellyValueAnimation+0x70>
addsd  0xef3(%rip),%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
movss  0xf18(%rip),%xmm1
mulss  %xmm0,%xmm1
mulss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
addsd  0xed5(%rip),%xmm0
jmp    1224 <JellyValueAnimation+0x124>
movsd  0xe98(%rip),%xmm1
ucomisd %xmm2,%xmm1
jbe    11a7 <JellyValueAnimation+0xa7>
addss  0xede(%rip),%xmm0
movss  0xeda(%rip),%xmm1
mulss  %xmm0,%xmm1
mulss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
addsd  0xe6b(%rip),%xmm0
jmp    1224 <JellyValueAnimation+0x124>
movsd  0xe69(%rip),%xmm1
ucomisd %xmm2,%xmm1
jbe    11e5 <JellyValueAnimation+0xe5>
addsd  0xe6b(%rip),%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
movss  0xe94(%rip),%xmm1
mulss  %xmm0,%xmm1
mulss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
addsd  0xe4d(%rip),%xmm0
jmp    1224 <JellyValueAnimation+0x124>
xorpd  %xmm1,%xmm1
movss  0xe67(%rip),%xmm3
ucomiss %xmm0,%xmm3
jb     122b <JellyValueAnimation+0x12b>
addsd  0xe22(%rip),%xmm2
xorps  %xmm0,%xmm0
cvtsd2ss %xmm2,%xmm0
movss  0xe4f(%rip),%xmm1
mulss  %xmm0,%xmm1
mulss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtss2sd %xmm1,%xmm0
addsd  0xddc(%rip),%xmm0
xorps  %xmm1,%xmm1
cvtsd2ss %xmm0,%xmm1
movapd %xmm1,%xmm0
ret

LLVM IR (-O0):
define float @JellyValueAnimation(float %0) {
%2 = alloca float
%3 = alloca float
%4 = alloca float
%5 = alloca float
%6 = alloca float
%7 = alloca float
store float %0, float* %3
%8 = load float, float* %3
%9 = fpext float %8 to double
%10 = fcmp olt double %9, 2.000000e-01
br i1 %10, label %11, label %19
11: ; preds = %1
%12 = load float, float* %3
%13 = fpext float %12 to double
%14 = fmul double 0xC038FFFFFFFFFFFF, %13
%15 = load float, float* %3
%16 = fpext float %15 to double
%17 = call double @llvm.fmuladd.f64(double %14, double %16, double 1.500000e+00)
%18 = fptrunc double %17 to float
store float %18, float* %2
br label %84
19: ; preds = %1
%20 = load float, float* %3
%21 = fpext float %20 to double
%22 = fcmp olt double %21, 4.000000e-01
br i1 %22, label %23, label %35
23: ; preds = %19
%24 = load float, float* %3
%25 = fpext float %24 to double
%26 = fsub double %25, 3.000000e-01
%27 = fptrunc double %26 to float
store float %27, float* %4
%28 = load float, float* %4
%29 = fmul float 8.000000e+01, %28
%30 = load float, float* %4
%31 = fmul float %29, %30
%32 = fpext float %31 to double
%33 = fsub double %32, 8.000000e-01
%34 = fptrunc double %33 to float
store float %34, float* %2
br label %84
35: ; preds = %19
%36 = load float, float* %3
%37 = fpext float %36 to double
%38 = fcmp olt double %37, 6.000000e-01
br i1 %38, label %39, label %51
39: ; preds = %35
%40 = load float, float* %3
%41 = fpext float %40 to double
%42 = fsub double %41, 5.000000e-01
%43 = fptrunc double %42 to float
store float %43, float* %5
%44 = load float, float* %5
%45 = fmul float -6.000000e+01, %44
%46 = load float, float* %5
%47 = fmul float %45, %46
%48 = fpext float %47 to double
%49 = fadd double %48, 6.000000e-01
%50 = fptrunc double %49 to float
store float %50, float* %2
br label %84
51: ; preds = %35
%52 = load float, float* %3
%53 = fpext float %52 to double
%54 = fcmp olt double %53, 8.000000e-01
br i1 %54, label %55, label %67
55: ; preds = %51
%56 = load float, float* %3
%57 = fpext float %56 to double
%58 = fsub double %57, 0x3FE6666666666666
%59 = fptrunc double %58 to float
store float %59, float* %6
%60 = load float, float* %6
%61 = fmul float 4.000000e+01, %60
%62 = load float, float* %6
%63 = fmul float %61, %62
%64 = fpext float %63 to double
%65 = fsub double %64, 4.000000e-01
%66 = fptrunc double %65 to float
store float %66, float* %2
br label %84
67: ; preds = %51
%68 = load float, float* %3
%69 = fpext float %68 to double
%70 = fcmp ole double %69, 1.000000e+00
br i1 %70, label %71, label %83
71: ; preds = %67
%72 = load float, float* %3
%73 = fpext float %72 to double
%74 = fsub double %73, 9.000000e-01
%75 = fptrunc double %74 to float
store float %75, float* %7
%76 = load float, float* %7
%77 = fmul float -2.000000e+01, %76
%78 = load float, float* %7
%79 = fmul float %77, %78
%80 = fpext float %79 to double
%81 = fadd double %80, 2.000000e-01
%82 = fptrunc double %81 to float
store float %82, float* %2
br label %84
83: ; preds = %67
store float 0.000000e+00, float* %2
br label %84
84: ; preds = %83, %71, %55, %39, %23, %11
%85 = load float, float* %2
ret float %85
}

LLVM IR (-O2):
define float @JellyValueAnimation(float %0) {
%2 = fpext float %0 to double
%3 = fcmp olt double %2, 2.000000e-01
br i1 %3, label %4, label %8
4: ; preds = %1
%5 = fmul double %2, 0xC038FFFFFFFFFFFF
%6 = tail call double @llvm.fmuladd.f64(double %5, double %2, double 1.500000e+00)
%7 = fptrunc double %6 to float
br label %47
8: ; preds = %1
%9 = fcmp olt double %2, 4.000000e-01
br i1 %9, label %10, label %18
10: ; preds = %8
%11 = fadd double %2, -3.000000e-01
%12 = fptrunc double %11 to float
%13 = fmul float %12, 8.000000e+01
%14 = fmul float %13, %12
%15 = fpext float %14 to double
%16 = fadd double %15, -8.000000e-01
%17 = fptrunc double %16 to float
br label %47
18: ; preds = %8
%19 = fcmp olt double %2, 6.000000e-01
br i1 %19, label %20, label %27
20: ; preds = %18
%21 = fadd float %0, -5.000000e-01
%22 = fmul float %21, -6.000000e+01
%23 = fmul float %21, %22
%24 = fpext float %23 to double
%25 = fadd double %24, 6.000000e-01
%26 = fptrunc double %25 to float
br label %47
27: ; preds = %18
%28 = fcmp olt double %2, 8.000000e-01
br i1 %28, label %29, label %37
29: ; preds = %27
%30 = fadd double %2, 0xBFE6666666666666
%31 = fptrunc double %30 to float
%32 = fmul float %31, 4.000000e+01
%33 = fmul float %32, %31
%34 = fpext float %33 to double
%35 = fadd double %34, -4.000000e-01
%36 = fptrunc double %35 to float
br label %47
37: ; preds = %27
%38 = fcmp ugt float %0, 1.000000e+00
br i1 %38, label %47, label %39
39: ; preds = %37
%40 = fadd double %2, -9.000000e-01
%41 = fptrunc double %40 to float
%42 = fmul float %41, -2.000000e+01
%43 = fmul float %42, %41
%44 = fpext float %43 to double
%45 = fadd double %44, 2.000000e-01
%46 = fptrunc double %45 to float
br label %47
47: ; preds = %37, %39, %29, %20, %10, %4
%48 = phi float [ %7, %4 ], [ %17, %10 ], [ %26, %20 ], [ %36, %29 ], [ %46, %39 ], [ 0.000000e+00, %37 ]
ret float %48
}