#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 */
typedef int /*<<< orphan*/ ptrdiff_t;

/* Variables and functions */
int exp(int);
float ffloor(float);
int /*<<< orphan*/ hash_1d(int /*<<< orphan*/);
float tiled_func(float (*f)(float, float, ptrdiff_t), float x, float y,
                 float wrapx, float wrapy, ptrdiff_t seed) {
  float base;
  float wx, wy;
  float ex, ey;
  float mx, my;
  ptrdiff_t salt = hash_1d(seed);
  if (wrapx > 0) {
    wx = x - wrapx * ffloor(x / wrapx);
    ex = wx + wrapx;
    mx = 1.0 / (1 + exp(6 - (2 * (1 - (wx / wrapx)) - 1) * 12));
  } else {
    wx = x;
    ex = x;
    mx = 0;
  }
  if (wrapy > 0) {
    wy = y - wrapy * ffloor(y / wrapy);
    ey = wy + wrapy;
    my = 1.0 / (1 + exp(6 - (2 * (1 - (wy / wrapy)) - 1) * 12));
  } else {
    wy = y;
    ey = y;
    my = 0;
  }
  base = f(wx, wy, salt);
  if (wrapx > 0) {
    base = (1 - mx) * base + mx * f(ex, wy, salt);
    if (wrapy > 0) {
      base = ((1 - my) * base +
              my * ((1 - mx) * f(wx, ey, salt) + mx * f(ex, ey, salt)));
    }
  } else if (wrapy > 0) {
    base = (1 - my) * base + my * f(wx, ey, salt);
  }
  return base;
}


x86 assembly (clang, -O0):
<tiled_func>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x8(%rbp)
movss  %xmm0,-0xc(%rbp)
movss  %xmm1,-0x10(%rbp)
movss  %xmm2,-0x14(%rbp)
movss  %xmm3,-0x18(%rbp)
mov    %esi,-0x1c(%rbp)
mov    -0x1c(%rbp),%edi
call   1030 <hash_1d@plt>
mov    %eax,-0x3c(%rbp)
movss  -0x14(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1240 <tiled_func+0x110>
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x40(%rbp)
movss  -0xc(%rbp),%xmm0
divss  -0x14(%rbp),%xmm0
call   1040 <ffloor@plt>
movss  -0x44(%rbp),%xmm1
movaps %xmm0,%xmm2
movss  -0x40(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0x24(%rbp),%xmm0
addss  -0x14(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
movss  -0x24(%rbp),%xmm1
divss  -0x14(%rbp),%xmm1
movss  0xe37(%rip),%xmm0
subss  %xmm1,%xmm0
addss  %xmm0,%xmm0
movss  0xe23(%rip),%xmm1
addss  %xmm1,%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  0xe02(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  0xdfa(%rip),%xmm1
addss  %xmm1,%xmm0
cvttss2si %xmm0,%edi
call   1050 <exp@plt>
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
movsd  0xdd2(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
jmp    125c <tiled_func+0x12c>
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x24(%rbp)
movss  -0xc(%rbp),%xmm0
movss  %xmm0,-0x2c(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x34(%rbp)
movss  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    133b <tiled_func+0x20b>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x4c(%rbp)
movss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x48(%rbp)
movss  -0x10(%rbp),%xmm0
divss  -0x18(%rbp),%xmm0
call   1040 <ffloor@plt>
movss  -0x4c(%rbp),%xmm1
movaps %xmm0,%xmm2
movss  -0x48(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x28(%rbp),%xmm0
addss  -0x18(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
movss  -0x28(%rbp),%xmm1
divss  -0x18(%rbp),%xmm1
movss  0xd3c(%rip),%xmm0
subss  %xmm1,%xmm0
addss  %xmm0,%xmm0
movss  0xd28(%rip),%xmm1
addss  %xmm1,%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
movss  0xd07(%rip),%xmm1
mulss  %xmm1,%xmm0
movss  0xcff(%rip),%xmm1
addss  %xmm1,%xmm0
cvttss2si %xmm0,%edi
call   1050 <exp@plt>
add    $0x1,%eax
cvtsi2sd %eax,%xmm1
movsd  0xcd7(%rip),%xmm0
divsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
jmp    1357 <tiled_func+0x227>
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x28(%rbp)
movss  -0x10(%rbp),%xmm0
movss  %xmm0,-0x30(%rbp)
xorps  %xmm0,%xmm0
movss  %xmm0,-0x38(%rbp)
mov    -0x8(%rbp),%rax
movss  -0x24(%rbp),%xmm0
movss  -0x28(%rbp),%xmm1
mov    -0x3c(%rbp),%edi
call   *%rax
movss  %xmm0,-0x20(%rbp)
movss  -0x14(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    149d <tiled_func+0x36d>
movss  0xc8c(%rip),%xmm0
subss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x50(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x54(%rbp)
movss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x58(%rbp)
mov    -0x8(%rbp),%rax
movss  -0x2c(%rbp),%xmm0
movss  -0x28(%rbp),%xmm1
mov    -0x3c(%rbp),%edi
call   *%rax
movss  -0x58(%rbp),%xmm1
movss  -0x54(%rbp),%xmm2
movaps %xmm0,%xmm3
movss  -0x50(%rbp),%xmm0
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    1498 <tiled_func+0x368>
movss  0xc1f(%rip),%xmm0
subss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x5c(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x60(%rbp)
movss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x64(%rbp)
movss  0xbf9(%rip),%xmm0
subss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x6c(%rbp)
mov    -0x8(%rbp),%rax
movss  -0x24(%rbp),%xmm0
movss  -0x30(%rbp),%xmm1
mov    -0x3c(%rbp),%edi
call   *%rax
movss  %xmm0,-0x68(%rbp)
movss  -0x34(%rbp),%xmm0
movss  %xmm0,-0x70(%rbp)
mov    -0x8(%rbp),%rax
movss  -0x2c(%rbp),%xmm0
movss  -0x30(%rbp),%xmm1
mov    -0x3c(%rbp),%edi
call   *%rax
movss  -0x70(%rbp),%xmm4
movss  -0x6c(%rbp),%xmm3
movss  -0x68(%rbp),%xmm5
movss  -0x64(%rbp),%xmm1
movss  -0x60(%rbp),%xmm2
movaps %xmm0,%xmm6
movss  -0x5c(%rbp),%xmm0
mulss  %xmm6,%xmm4
mulss  %xmm5,%xmm3
addss  %xmm4,%xmm3
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
jmp    150f <tiled_func+0x3df>
movss  -0x18(%rbp),%xmm0
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm0
jbe    150a <tiled_func+0x3da>
movss  0xb5e(%rip),%xmm0
subss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x74(%rbp)
movss  -0x20(%rbp),%xmm0
movss  %xmm0,-0x78(%rbp)
movss  -0x38(%rbp),%xmm0
movss  %xmm0,-0x7c(%rbp)
mov    -0x8(%rbp),%rax
movss  -0x24(%rbp),%xmm0
movss  -0x30(%rbp),%xmm1
mov    -0x3c(%rbp),%edi
call   *%rax
movss  -0x7c(%rbp),%xmm1
movss  -0x78(%rbp),%xmm2
movaps %xmm0,%xmm3
movss  -0x74(%rbp),%xmm0
mulss  %xmm3,%xmm1
mulss  %xmm2,%xmm0
addss  %xmm1,%xmm0
movss  %xmm0,-0x20(%rbp)
jmp    150f <tiled_func+0x3df>
movss  -0x20(%rbp),%xmm0
add    $0x80,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<tiled_func>:
push   %rbp
push   %r14
push   %rbx
sub    $0x20,%rsp
movss  %xmm3,0x4(%rsp)
movss  %xmm2,0xc(%rsp)
movss  %xmm1,(%rsp)
movss  %xmm0,0x8(%rsp)
mov    %rdi,%r14
mov    %esi,%edi
call   1030 <hash_1d@plt>
movss  0xc(%rsp),%xmm2
mov    %eax,%ebx
xorps  %xmm1,%xmm1
ucomiss %xmm1,%xmm2
jbe    123d <tiled_func+0x10d>
movss  0x8(%rsp),%xmm0
divss  %xmm2,%xmm0
call   1040 <ffloor@plt>
movss  0xc(%rsp),%xmm2
mulss  %xmm2,%xmm0
movss  0x8(%rsp),%xmm1
subss  %xmm0,%xmm1
movaps %xmm1,%xmm0
addss  %xmm2,%xmm0
movss  %xmm0,0x18(%rsp)
movss  %xmm1,0x8(%rsp)
movaps %xmm1,%xmm0
divss  %xmm2,%xmm0
movss  0xe4e(%rip),%xmm1
subss  %xmm0,%xmm1
addss  %xmm1,%xmm1
addss  0xe42(%rip),%xmm1
mulss  0xe3e(%rip),%xmm1
addss  0xe3a(%rip),%xmm1
cvttss2si %xmm1,%edi
call   1050 <exp@plt>
add    $0x1,%eax
xorps  %xmm0,%xmm0
cvtsi2sd %eax,%xmm0
movsd  0xe23(%rip),%xmm1
divsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsd2ss %xmm1,%xmm0
movss  %xmm0,0x14(%rsp)
xorps  %xmm0,%xmm0
movss  0x4(%rsp),%xmm1
ucomiss %xmm0,%xmm1
ja     1264 <tiled_func+0x134>
xorps  %xmm0,%xmm0
movss  %xmm0,0x10(%rsp)
movss  0x8(%rsp),%xmm0
movss  (%rsp),%xmm1
mov    %ebx,%edi
call   *%r14
movss  (%rsp),%xmm1
movss  %xmm0,0xc(%rsp)
xor    %ebp,%ebp
movss  %xmm1,0x4(%rsp)
jmp    132b <tiled_func+0x1fb>
movss  0x8(%rsp),%xmm0
xorps  %xmm2,%xmm2
movss  %xmm2,0x14(%rsp)
movss  0x4(%rsp),%xmm2
ucomiss %xmm1,%xmm2
jbe    13d0 <tiled_func+0x2a0>
movaps %xmm2,%xmm1
movss  %xmm0,0x18(%rsp)
movss  (%rsp),%xmm0
divss  %xmm1,%xmm0
call   1040 <ffloor@plt>
mulss  0x4(%rsp),%xmm0
movss  (%rsp),%xmm1
subss  %xmm0,%xmm1
movss  %xmm1,(%rsp)
movaps %xmm1,%xmm0
divss  0x4(%rsp),%xmm0
movss  0xd69(%rip),%xmm1
subss  %xmm0,%xmm1
addss  %xmm1,%xmm1
addss  0xd5d(%rip),%xmm1
mulss  0xd59(%rip),%xmm1
addss  0xd55(%rip),%xmm1
cvttss2si %xmm1,%edi
call   1050 <exp@plt>
mov    %eax,%ebp
add    $0x1,%ebp
movss  0x8(%rsp),%xmm0
movss  (%rsp),%xmm1
mov    %ebx,%edi
call   *%r14
movss  0x4(%rsp),%xmm1
xorps  %xmm2,%xmm2
movss  0xc(%rsp),%xmm3
ucomiss %xmm2,%xmm3
movaps %xmm0,%xmm4
movss  (%rsp),%xmm0
movaps %xmm0,%xmm3
addss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cvtsi2sd %ebp,%xmm0
movsd  0xd0b(%rip),%xmm2
divsd  %xmm0,%xmm2
cvtsd2ss %xmm2,%xmm2
movss  %xmm2,0x10(%rsp)
movss  %xmm4,0xc(%rsp)
jbe    13e4 <tiled_func+0x2b4>
movss  %xmm1,0x4(%rsp)
mov    $0x1,%bpl
movaps %xmm3,%xmm1
movss  0xccd(%rip),%xmm0
subss  0x14(%rsp),%xmm0
movss  %xmm0,(%rsp)
movss  0x18(%rsp),%xmm0
mov    %ebx,%edi
call   *%r14
movss  0x14(%rsp),%xmm1
mulss  %xmm1,%xmm0
movss  0xc(%rsp),%xmm2
mulss  (%rsp),%xmm2
addss  %xmm0,%xmm2
test   %bpl,%bpl
je     1419 <tiled_func+0x2e9>
movss  0xc8d(%rip),%xmm0
subss  0x10(%rsp),%xmm0
movss  %xmm0,0x1c(%rsp)
movss  0x8(%rsp),%xmm0
movss  0x4(%rsp),%xmm1
mov    %ebx,%edi
movss  %xmm2,0xc(%rsp)
call   *%r14
movss  %xmm0,0x8(%rsp)
movss  0x18(%rsp),%xmm0
movss  0x4(%rsp),%xmm1
mov    %ebx,%edi
call   *%r14
mulss  0x14(%rsp),%xmm0
movss  (%rsp),%xmm1
mulss  0x8(%rsp),%xmm1
addss  %xmm1,%xmm0
mulss  0x10(%rsp),%xmm0
movss  0x1c(%rsp),%xmm1
jmp    140d <tiled_func+0x2dd>
movss  (%rsp),%xmm1
mov    %ebx,%edi
mov    %r14,%rax
add    $0x20,%rsp
pop    %rbx
pop    %r14
pop    %rbp
jmp    *%rax
movss  0xc14(%rip),%xmm0
subss  %xmm2,%xmm0
movss  %xmm0,0x4(%rsp)
movss  0x8(%rsp),%xmm0
mov    %ebx,%edi
call   *%r14
mulss  0x10(%rsp),%xmm0
movss  0x4(%rsp),%xmm1
mulss  0xc(%rsp),%xmm1
addss  %xmm1,%xmm0
jmp    141c <tiled_func+0x2ec>
movaps %xmm2,%xmm0
add    $0x20,%rsp
pop    %rbx
pop    %r14
pop    %rbp
ret

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

LLVM IR (-O2):
define float @tiled_func(float (float, float, i32)* nocapture %0, float %1, float %2, float %3, float %4, i32 %5) {
%7 = tail call i32 @hash_1d(i32 %5)
%8 = fcmp ogt float %3, 0.000000e+00
br i1 %8, label %9, label %27
9: ; preds = %6
%10 = fdiv float %1, %3
%11 = tail call float @ffloor(float %10)
%12 = fneg float %3
%13 = tail call float @llvm.fmuladd.f32(float %12, float %11, float %1)
%14 = fadd float %13, %3
%15 = fdiv float %13, %3
%16 = fsub float 1.000000e+00, %15
%17 = tail call float @llvm.fmuladd.f32(float %16, float 2.000000e+00, float -1.000000e+00)
%18 = fneg float %17
%19 = tail call float @llvm.fmuladd.f32(float %18, float 1.200000e+01, float 6.000000e+00)
%20 = fptosi float %19 to i32
%21 = tail call i32 @exp(i32 %20)
%22 = add nsw i32 %21, 1
%23 = sitofp i32 %22 to double
%24 = fdiv double 1.000000e+00, %23
%25 = fptrunc double %24 to float
%26 = fcmp ogt float %4, 0.000000e+00
br i1 %26, label %31, label %52
27: ; preds = %6
%28 = fcmp ogt float %4, 0.000000e+00
br i1 %28, label %31, label %29
29: ; preds = %27
%30 = tail call float %0(float %1, float %2, i32 %7)
br label %80
31: ; preds = %27, %9
%32 = phi float [ 0.000000e+00, %27 ], [ %25, %9 ]
%33 = phi float [ %1, %27 ], [ %14, %9 ]
%34 = phi float [ %1, %27 ], [ %13, %9 ]
%35 = fdiv float %2, %4
%36 = tail call float @ffloor(float %35)
%37 = fneg float %4
%38 = tail call float @llvm.fmuladd.f32(float %37, float %36, float %2)
%39 = fadd float %38, %4
%40 = fdiv float %38, %4
%41 = fsub float 1.000000e+00, %40
%42 = tail call float @llvm.fmuladd.f32(float %41, float 2.000000e+00, float -1.000000e+00)
%43 = fneg float %42
%44 = tail call float @llvm.fmuladd.f32(float %43, float 1.200000e+01, float 6.000000e+00)
%45 = fptosi float %44 to i32
%46 = tail call i32 @exp(i32 %45)
%47 = add nsw i32 %46, 1
%48 = sitofp i32 %47 to double
%49 = fdiv double 1.000000e+00, %48
%50 = fptrunc double %49 to float
%51 = tail call float %0(float %34, float %38, i32 %7)
br i1 %8, label %54, label %75
52: ; preds = %9
%53 = tail call float %0(float %13, float %2, i32 %7)
br label %54
54: ; preds = %52, %31
%55 = phi i1 [ false, %52 ], [ true, %31 ]
%56 = phi float [ %25, %52 ], [ %32, %31 ]
%57 = phi float [ %14, %52 ], [ %33, %31 ]
%58 = phi float [ %13, %52 ], [ %34, %31 ]
%59 = phi float [ %53, %52 ], [ %51, %31 ]
%60 = phi float [ 0.000000e+00, %52 ], [ %50, %31 ]
%61 = phi float [ %2, %52 ], [ %39, %31 ]
%62 = phi float [ %2, %52 ], [ %38, %31 ]
%63 = fsub float 1.000000e+00, %56
%64 = tail call float %0(float %57, float %62, i32 %7)
%65 = fmul float %56, %64
%66 = tail call float @llvm.fmuladd.f32(float %63, float %59, float %65)
br i1 %55, label %67, label %80
67: ; preds = %54
%68 = fsub float 1.000000e+00, %60
%69 = tail call float %0(float %58, float %61, i32 %7)
%70 = tail call float %0(float %57, float %61, i32 %7)
%71 = fmul float %56, %70
%72 = tail call float @llvm.fmuladd.f32(float %63, float %69, float %71)
%73 = fmul float %60, %72
%74 = tail call float @llvm.fmuladd.f32(float %68, float %66, float %73)
br label %80
75: ; preds = %31
%76 = fsub float 1.000000e+00, %50
%77 = tail call float %0(float %34, float %39, i32 %7)
%78 = fmul float %77, %50
%79 = tail call float @llvm.fmuladd.f32(float %76, float %51, float %78)
br label %80
80: ; preds = %29, %75, %54, %67
%81 = phi float [ %74, %67 ], [ %66, %54 ], [ %79, %75 ], [ %30, %29 ]
ret float %81
}