#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 */
int abs(int);
float CG_FlareScreenTrans(int x, int y, int xmin, int ymin, int xmax,
                          int ymax) {
  int lx = abs(x);
  int ly = abs(y);
  int lxmin = abs(xmin);
  int lymin = abs(ymin);
  int lxmax = abs(xmax);
  int lymax = abs(ymax);
  int xDif = lxmax - lxmin;
  int yDif = lymax - lymin;
  float grad = ((float)lymax / (float)lxmax);
  float alpha = 1.0;
  if (lx < lxmin && ly < lymin) {
    return alpha;
  }
  if (ly < (lx * grad)) {
    alpha = (float)(1.0 - ((float)lx - (float)lxmin) / (float)xDif);
  }
  if (ly > (lx * grad)) {
    alpha = (float)(1.0 - ((float)ly - (float)lymin) / (float)yDif);
  }
  if (lx >= lxmax || ly >= lymax)
    alpha = 0.0;
  if (alpha > 1.0)
    alpha = 1.0;
  if (alpha < 0.0)
    alpha = 0.0;
  return alpha;
}


x86 assembly (clang, -O0):
<CG_FlareScreenTrans>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
mov    %r9d,-0x1c(%rbp)
mov    -0x8(%rbp),%edi
call   1030 <abs@plt>
mov    %eax,-0x20(%rbp)
mov    -0xc(%rbp),%edi
call   1030 <abs@plt>
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%edi
call   1030 <abs@plt>
mov    %eax,-0x28(%rbp)
mov    -0x14(%rbp),%edi
call   1030 <abs@plt>
mov    %eax,-0x2c(%rbp)
mov    -0x18(%rbp),%edi
call   1030 <abs@plt>
mov    %eax,-0x30(%rbp)
mov    -0x1c(%rbp),%edi
call   1030 <abs@plt>
mov    %eax,-0x34(%rbp)
mov    -0x30(%rbp),%eax
sub    -0x28(%rbp),%eax
mov    %eax,-0x38(%rbp)
mov    -0x34(%rbp),%eax
sub    -0x2c(%rbp),%eax
mov    %eax,-0x3c(%rbp)
cvtsi2ssl -0x34(%rbp),%xmm0
cvtsi2ssl -0x30(%rbp),%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x40(%rbp)
movss  0xe65(%rip),%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x28(%rbp),%eax
jge    11c7 <CG_FlareScreenTrans+0xb7>
mov    -0x24(%rbp),%eax
cmp    -0x2c(%rbp),%eax
jge    11c7 <CG_FlareScreenTrans+0xb7>
movss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
jmp    12c7 <CG_FlareScreenTrans+0x1b7>
cvtsi2ssl -0x24(%rbp),%xmm1
cvtsi2ssl -0x20(%rbp),%xmm0
mulss  -0x40(%rbp),%xmm0
ucomiss %xmm1,%xmm0
jbe    120f <CG_FlareScreenTrans+0xff>
cvtsi2ssl -0x20(%rbp),%xmm0
cvtsi2ssl -0x28(%rbp),%xmm1
subss  %xmm1,%xmm0
cvtsi2ssl -0x38(%rbp),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xe06(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
cvtsi2ssl -0x24(%rbp),%xmm0
cvtsi2ssl -0x20(%rbp),%xmm1
mulss  -0x40(%rbp),%xmm1
ucomiss %xmm1,%xmm0
jbe    1257 <CG_FlareScreenTrans+0x147>
cvtsi2ssl -0x24(%rbp),%xmm0
cvtsi2ssl -0x2c(%rbp),%xmm1
subss  %xmm1,%xmm0
cvtsi2ssl -0x3c(%rbp),%xmm1
divss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm1
movsd  0xdbe(%rip),%xmm0
subsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
mov    -0x20(%rbp),%eax
cmp    -0x30(%rbp),%eax
jge    126f <CG_FlareScreenTrans+0x15f>
mov    -0x24(%rbp),%eax
cmp    -0x34(%rbp),%eax
jl     1277 <CG_FlareScreenTrans+0x167>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd80(%rip),%xmm1
ucomisd %xmm1,%xmm0
jbe    129f <CG_FlareScreenTrans+0x18f>
movss  0xd66(%rip),%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
cvtss2sd %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jbe    12bd <CG_FlareScreenTrans+0x1ad>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x44(%rbp)
movss  -0x44(%rbp),%xmm0
movss  %xmm0,-0x4(%rbp)
movss  -0x4(%rbp),%xmm0
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<CG_FlareScreenTrans>:
mov    %edi,%r10d
neg    %r10d
cmovs  %edi,%r10d
mov    %esi,%edi
neg    %edi
cmovs  %esi,%edi
mov    %edx,%eax
neg    %eax
cmovs  %edx,%eax
mov    %ecx,%esi
neg    %esi
cmovs  %ecx,%esi
mov    %r8d,%ecx
neg    %ecx
cmovs  %r8d,%ecx
mov    %r9d,%edx
neg    %edx
cmovs  %r9d,%edx
cmp    %eax,%r10d
jae    1143 <CG_FlareScreenTrans+0x43>
cmp    %esi,%edi
jae    1143 <CG_FlareScreenTrans+0x43>
movss  0xebe(%rip),%xmm0
ret
cvtsi2ss %edx,%xmm2
cvtsi2ss %ecx,%xmm1
cvtsi2ss %edi,%xmm0
cvtsi2ss %r10d,%xmm3
divss  %xmm1,%xmm2
mulss  %xmm3,%xmm2
ucomiss %xmm0,%xmm2
jbe    118e <CG_FlareScreenTrans+0x8e>
mov    %ecx,%r8d
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
sub    %eax,%r8d
cvtsi2ss %r8d,%xmm4
subss  %xmm1,%xmm3
divss  %xmm4,%xmm3
movss  0xe7d(%rip),%xmm1
subss  %xmm3,%xmm1
ucomiss %xmm2,%xmm0
ja     119b <CG_FlareScreenTrans+0x9b>
jmp    11c1 <CG_FlareScreenTrans+0xc1>
movss  0xe6a(%rip),%xmm1
ucomiss %xmm2,%xmm0
jbe    11c1 <CG_FlareScreenTrans+0xc1>
mov    %edx,%eax
xorps  %xmm1,%xmm1
cvtsi2ss %esi,%xmm1
sub    %esi,%eax
xorps  %xmm2,%xmm2
cvtsi2ss %eax,%xmm2
subss  %xmm1,%xmm0
divss  %xmm2,%xmm0
movss  0xe43(%rip),%xmm1
subss  %xmm0,%xmm1
xorps  %xmm0,%xmm0
cmp    %edx,%edi
jb     11cb <CG_FlareScreenTrans+0xcb>
xorps  %xmm1,%xmm1
cmp    %ecx,%r10d
jb     11d3 <CG_FlareScreenTrans+0xd3>
xorps  %xmm1,%xmm1
movss  0xe25(%rip),%xmm2
minss  %xmm1,%xmm2
maxss  %xmm2,%xmm0
ret

LLVM IR (-O0):
define float @CG_FlareScreenTrans(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = alloca float
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca i32
%17 = alloca i32
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca float
%23 = alloca float
store i32 %0, i32* %8
store i32 %1, i32* %9
store i32 %2, i32* %10
store i32 %3, i32* %11
store i32 %4, i32* %12
store i32 %5, i32* %13
%24 = load i32, i32* %8
%25 = call i32 @abs(i32 %24)
store i32 %25, i32* %14
%26 = load i32, i32* %9
%27 = call i32 @abs(i32 %26)
store i32 %27, i32* %15
%28 = load i32, i32* %10
%29 = call i32 @abs(i32 %28)
store i32 %29, i32* %16
%30 = load i32, i32* %11
%31 = call i32 @abs(i32 %30)
store i32 %31, i32* %17
%32 = load i32, i32* %12
%33 = call i32 @abs(i32 %32)
store i32 %33, i32* %18
%34 = load i32, i32* %13
%35 = call i32 @abs(i32 %34)
store i32 %35, i32* %19
%36 = load i32, i32* %18
%37 = load i32, i32* %16
%38 = sub nsw i32 %36, %37
store i32 %38, i32* %20
%39 = load i32, i32* %19
%40 = load i32, i32* %17
%41 = sub nsw i32 %39, %40
store i32 %41, i32* %21
%42 = load i32, i32* %19
%43 = sitofp i32 %42 to float
%44 = load i32, i32* %18
%45 = sitofp i32 %44 to float
%46 = fdiv float %43, %45
store float %46, float* %22
store float 1.000000e+00, float* %23
%47 = load i32, i32* %14
%48 = load i32, i32* %16
%49 = icmp slt i32 %47, %48
br i1 %49, label %50, label %56
50: ; preds = %6
%51 = load i32, i32* %15
%52 = load i32, i32* %17
%53 = icmp slt i32 %51, %52
br i1 %53, label %54, label %56
54: ; preds = %50
%55 = load float, float* %23
store float %55, float* %7
br label %117
56: ; preds = %50, %6
%57 = load i32, i32* %15
%58 = sitofp i32 %57 to float
%59 = load i32, i32* %14
%60 = sitofp i32 %59 to float
%61 = load float, float* %22
%62 = fmul float %60, %61
%63 = fcmp olt float %58, %62
br i1 %63, label %64, label %76
64: ; preds = %56
%65 = load i32, i32* %14
%66 = sitofp i32 %65 to float
%67 = load i32, i32* %16
%68 = sitofp i32 %67 to float
%69 = fsub float %66, %68
%70 = load i32, i32* %20
%71 = sitofp i32 %70 to float
%72 = fdiv float %69, %71
%73 = fpext float %72 to double
%74 = fsub double 1.000000e+00, %73
%75 = fptrunc double %74 to float
store float %75, float* %23
br label %76
76: ; preds = %64, %56
%77 = load i32, i32* %15
%78 = sitofp i32 %77 to float
%79 = load i32, i32* %14
%80 = sitofp i32 %79 to float
%81 = load float, float* %22
%82 = fmul float %80, %81
%83 = fcmp ogt float %78, %82
br i1 %83, label %84, label %96
84: ; preds = %76
%85 = load i32, i32* %15
%86 = sitofp i32 %85 to float
%87 = load i32, i32* %17
%88 = sitofp i32 %87 to float
%89 = fsub float %86, %88
%90 = load i32, i32* %21
%91 = sitofp i32 %90 to float
%92 = fdiv float %89, %91
%93 = fpext float %92 to double
%94 = fsub double 1.000000e+00, %93
%95 = fptrunc double %94 to float
store float %95, float* %23
br label %96
96: ; preds = %84, %76
%97 = load i32, i32* %14
%98 = load i32, i32* %18
%99 = icmp sge i32 %97, %98
br i1 %99, label %104, label %100
100: ; preds = %96
%101 = load i32, i32* %15
%102 = load i32, i32* %19
%103 = icmp sge i32 %101, %102
br i1 %103, label %104, label %105
104: ; preds = %100, %96
store float 0.000000e+00, float* %23
br label %105
105: ; preds = %104, %100
%106 = load float, float* %23
%107 = fpext float %106 to double
%108 = fcmp ogt double %107, 1.000000e+00
br i1 %108, label %109, label %110
109: ; preds = %105
store float 1.000000e+00, float* %23
br label %110
110: ; preds = %109, %105
%111 = load float, float* %23
%112 = fpext float %111 to double
%113 = fcmp olt double %112, 0.000000e+00
br i1 %113, label %114, label %115
114: ; preds = %110
store float 0.000000e+00, float* %23
br label %115
115: ; preds = %114, %110
%116 = load float, float* %23
store float %116, float* %7
br label %117
117: ; preds = %115, %54
%118 = load float, float* %7
ret float %118
}

LLVM IR (-O2):
define float @CG_FlareScreenTrans(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5) {
%7 = tail call i32 @llvm.abs.i32(i32 %0, i1 true)
%8 = tail call i32 @llvm.abs.i32(i32 %1, i1 true)
%9 = tail call i32 @llvm.abs.i32(i32 %2, i1 true)
%10 = tail call i32 @llvm.abs.i32(i32 %3, i1 true)
%11 = tail call i32 @llvm.abs.i32(i32 %4, i1 true)
%12 = tail call i32 @llvm.abs.i32(i32 %5, i1 true)
%13 = sub nsw i32 %11, %9
%14 = sub nsw i32 %12, %10
%15 = icmp ult i32 %7, %9
%16 = icmp ult i32 %8, %10
%17 = select i1 %15, i1 %16, i1 false
br i1 %17, label %51, label %18
18: ; preds = %6
%19 = sitofp i32 %12 to float
%20 = sitofp i32 %11 to float
%21 = fdiv float %19, %20
%22 = sitofp i32 %8 to float
%23 = sitofp i32 %7 to float
%24 = fmul float %21, %23
%25 = fcmp ogt float %24, %22
br i1 %25, label %26, label %32
26: ; preds = %18
%27 = sitofp i32 %9 to float
%28 = fsub float %23, %27
%29 = sitofp i32 %13 to float
%30 = fdiv float %28, %29
%31 = fsub float 1.000000e+00, %30
br label %32
32: ; preds = %26, %18
%33 = phi float [ %31, %26 ], [ 1.000000e+00, %18 ]
%34 = fcmp olt float %24, %22
br i1 %34, label %35, label %41
35: ; preds = %32
%36 = sitofp i32 %10 to float
%37 = fsub float %22, %36
%38 = sitofp i32 %14 to float
%39 = fdiv float %37, %38
%40 = fsub float 1.000000e+00, %39
br label %41
41: ; preds = %35, %32
%42 = phi float [ %40, %35 ], [ %33, %32 ]
%43 = icmp ult i32 %7, %11
%44 = icmp ult i32 %8, %12
%45 = select i1 %43, i1 %44, i1 false
%46 = select i1 %45, float %42, float 0.000000e+00
%47 = fcmp ogt float %46, 1.000000e+00
%48 = select i1 %47, float 1.000000e+00, float %46
%49 = fcmp olt float %48, 0.000000e+00
%50 = select i1 %49, float 0.000000e+00, float %48
br label %51
51: ; preds = %6, %41
%52 = phi float [ %50, %41 ], [ 1.000000e+00, %6 ]
ret float %52
}