#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 exp(float);
int /*<<< orphan*/ printf(char *);
int main() {
  int i;
  float a = 0.4, x, y1, y2;
  printf("                            Y---->                      \n");
  printf(" 0 ---------------------------------------------------- \n");
  for (x = 0; x < 5; x += 0.25) {
    y1 = (int)(50 * exp(-a * x) + 0.5);
    y2 = (int)(50 * exp(-a * x * x / 2) + 0.5);
    if (y1 == y2) {
      if (x == 2.5)
        printf("X  |");
      else
        printf("  |");
      for (i = 1; i <= y1 - 1; ++i)
        printf(" ");
      printf("#\n");
    } else if (y1 > y2) {
      if (x == 2.5)
        printf("X |");
      else
        printf("  |");
      for (i = 1; i <= y2 - 1; ++i)
        printf(" ");
      printf("*");
      for (i = 1; i <= (y1 - y2 - 1); ++i)
        printf("-");
      printf("0\n");
    } else {
      if (x == 2.5)
        printf(" X   |");
      else
        printf("  |");
      for (i = 1; i <= y1 - 1; ++i)
        printf(" ");
      printf("0");
      for (i = 1; i <= y2 - y1 - 1; ++i)
        printf("-");
      printf("* \n");
    }
    printf("   \n");
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x20,%rsp
movl   $0x0,-0x4(%rbp)
movss  0xec9(%rip),%xmm0
movss  %xmm0,-0xc(%rbp)
lea    0xee5(%rip),%rdi
call   1030 <printf@plt>
lea    0xf13(%rip),%rdi
call   1030 <printf@plt>
xorps  %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
movss  0xea0(%rip),%xmm0
ucomiss -0x10(%rbp),%xmm0
jbe    1499 <main+0x379>
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x10(%rbp),%xmm0
call   1040 <exp@plt>
imul   $0x32,%eax,%eax
cvtsi2sd %eax,%xmm0
movsd  0xe77(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x14(%rbp)
movss  -0xc(%rbp),%xmm0
movd   %xmm0,%eax
xor    $0x80000000,%eax
movd   %eax,%xmm0
mulss  -0x10(%rbp),%xmm0
mulss  -0x10(%rbp),%xmm0
movss  0xe3a(%rip),%xmm1
divss  %xmm1,%xmm0
call   1040 <exp@plt>
imul   $0x32,%eax,%eax
cvtsi2sd %eax,%xmm0
movsd  0xe2a(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x18(%rbp)
movss  -0x14(%rbp),%xmm0
ucomiss -0x18(%rbp),%xmm0
jne    129b <main+0x17b>
jp     129b <main+0x17b>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xdfb(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    123e <main+0x11e>
jp     123e <main+0x11e>
lea    0xe68(%rip),%rdi
call   1030 <printf@plt>
jmp    124a <main+0x12a>
lea    0xe6f(%rip),%rdi
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cvtsi2ssl -0x8(%rbp),%xmm1
movss  -0x14(%rbp),%xmm0
movss  0xda9(%rip),%xmm2
subss  %xmm2,%xmm0
ucomiss %xmm1,%xmm0
jb     128a <main+0x16a>
lea    0xe2a(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    1251 <main+0x131>
lea    0xe12(%rip),%rdi
call   1030 <printf@plt>
jmp    146a <main+0x34a>
movss  -0x14(%rbp),%xmm0
ucomiss -0x18(%rbp),%xmm0
jbe    138a <main+0x26a>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xd5d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    12dc <main+0x1bc>
jp     12dc <main+0x1bc>
lea    0xdd4(%rip),%rdi
call   1030 <printf@plt>
jmp    12e8 <main+0x1c8>
lea    0xdd1(%rip),%rdi
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cvtsi2ssl -0x8(%rbp),%xmm1
movss  -0x18(%rbp),%xmm0
movss  0xd0b(%rip),%xmm2
subss  %xmm2,%xmm0
ucomiss %xmm1,%xmm0
jb     1328 <main+0x208>
lea    0xd8c(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    12ef <main+0x1cf>
lea    0xd7b(%rip),%rdi
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cvtsi2ssl -0x8(%rbp),%xmm1
movss  -0x14(%rbp),%xmm0
subss  -0x18(%rbp),%xmm0
movss  0xcba(%rip),%xmm2
subss  %xmm2,%xmm0
ucomiss %xmm1,%xmm0
jb     1379 <main+0x259>
lea    0xd46(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    133b <main+0x21b>
lea    0xd2e(%rip),%rdi
call   1030 <printf@plt>
jmp    1465 <main+0x345>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xc7d(%rip),%xmm1
ucomisd %xmm1,%xmm0
jne    13bc <main+0x29c>
jp     13bc <main+0x29c>
lea    0xcff(%rip),%rdi
call   1030 <printf@plt>
jmp    13c8 <main+0x2a8>
lea    0xcf1(%rip),%rdi
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cvtsi2ssl -0x8(%rbp),%xmm1
movss  -0x14(%rbp),%xmm0
movss  0xc2b(%rip),%xmm2
subss  %xmm2,%xmm0
ucomiss %xmm1,%xmm0
jb     1408 <main+0x2e8>
lea    0xcac(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    13cf <main+0x2af>
lea    0xca9(%rip),%rdi
call   1030 <printf@plt>
movl   $0x1,-0x8(%rbp)
cvtsi2ssl -0x8(%rbp),%xmm1
movss  -0x18(%rbp),%xmm0
subss  -0x14(%rbp),%xmm0
movss  0xbda(%rip),%xmm2
subss  %xmm2,%xmm0
ucomiss %xmm1,%xmm0
jb     1459 <main+0x339>
lea    0xc66(%rip),%rdi
call   1030 <printf@plt>
mov    -0x8(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x8(%rbp)
jmp    141b <main+0x2fb>
lea    0xc5a(%rip),%rdi
call   1030 <printf@plt>
jmp    146a <main+0x34a>
lea    0xbec(%rip),%rdi
call   1030 <printf@plt>
movss  -0x10(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xb99(%rip),%xmm1
addsd  %xmm1,%xmm0
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x10(%rbp)
jmp    115c <main+0x3c>
xor    %eax,%eax
add    $0x20,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
lea    0xefb(%rip),%rdi
call   1040 <puts@plt>
lea    0xf28(%rip),%rdi
call   1040 <puts@plt>
xorps  %xmm0,%xmm0
lea    0xedc(%rip),%rbx
lea    0xec9(%rip),%r15
lea    0xf49(%rip),%r12
lea    0xf00(%rip),%r14
lea    0xf36(%rip),%r13
jmp    11bc <main+0x7c>
xchg   %ax,%ax
call   1040 <puts@plt>
mov    %r14,%rdi
call   1040 <puts@plt>
movss  0x8(%rsp),%xmm0
addss  0xe69(%rip),%xmm0
movss  0xe65(%rip),%xmm1
ucomiss %xmm0,%xmm1
jbe    1456 <main+0x316>
movss  %xmm0,0x8(%rsp)
mulss  0xe36(%rip),%xmm0
movss  %xmm0,0x10(%rsp)
call   1060 <exp@plt>
mov    %eax,%ebp
movss  0x10(%rsp),%xmm0
mulss  0x8(%rsp),%xmm0
mulss  0xe19(%rip),%xmm0
call   1060 <exp@plt>
movd   %eax,%xmm0
movd   %ebp,%xmm1
movdqa 0xe20(%rip),%xmm2
pmuludq %xmm2,%xmm1
pmuludq %xmm2,%xmm0
punpckldq %xmm0,%xmm1
cvtdq2pd %xmm1,%xmm0
addpd  0xe18(%rip),%xmm0
cvttpd2dq %xmm0,%xmm0
cvtdq2ps %xmm0,%xmm0
movaps %xmm0,%xmm1
shufps $0x55,%xmm0,%xmm1
ucomiss %xmm1,%xmm0
movaps %xmm0,0x10(%rsp)
jne    12b0 <main+0x170>
jp     12b0 <main+0x170>
movss  0x8(%rsp),%xmm1
ucomiss 0xdc5(%rip),%xmm1
mov    %r15,%rdi
cmovne %rbx,%rdi
cmovp  %rbx,%rdi
call   1050 <printf@plt>
movaps 0x10(%rsp),%xmm0
addss  0xdac(%rip),%xmm0
ucomiss 0xda9(%rip),%xmm0
mov    %r12,%rdi
jb     1190 <main+0x50>
mov    $0x2,%ebp
movaps %xmm0,0x10(%rsp)
nopw   0x0(%rax,%rax,1)
mov    $0x20,%edi
call   1030 <putchar@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %ebp,%xmm0
add    $0x1,%ebp
movaps 0x10(%rsp),%xmm1
ucomiss %xmm0,%xmm1
jae    1280 <main+0x140>
mov    %r12,%rdi
jmp    1190 <main+0x50>
cs nopw 0x0(%rax,%rax,1)
ucomiss %xmm1,%xmm0
movaps %xmm1,0x20(%rsp)
jbe    138a <main+0x24a>
movss  0x8(%rsp),%xmm0
ucomiss 0xd3d(%rip),%xmm0
lea    0xd73(%rip),%rdi
cmovne %rbx,%rdi
cmovp  %rbx,%rdi
call   1050 <printf@plt>
movaps 0x20(%rsp),%xmm0
addss  0xd20(%rip),%xmm0
ucomiss 0xd1d(%rip),%xmm0
jb     131f <main+0x1df>
mov    $0x2,%ebp
movss  %xmm0,0xc(%rsp)
mov    $0x20,%edi
call   1030 <putchar@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %ebp,%xmm0
add    $0x1,%ebp
movss  0xc(%rsp),%xmm1
ucomiss %xmm0,%xmm1
jae    1300 <main+0x1c0>
mov    $0x2a,%edi
call   1030 <putchar@plt>
movaps 0x10(%rsp),%xmm0
subss  0x20(%rsp),%xmm0
addss  0xcd0(%rip),%xmm0
ucomiss 0xccd(%rip),%xmm0
lea    0xd7b(%rip),%rdi
jb     1190 <main+0x50>
mov    $0x2,%ebp
movaps %xmm0,0x10(%rsp)
nopw   0x0(%rax,%rax,1)
mov    $0x2d,%edi
call   1030 <putchar@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %ebp,%xmm0
add    $0x1,%ebp
movaps 0x10(%rsp),%xmm1
ucomiss %xmm0,%xmm1
jae    1360 <main+0x220>
lea    0xd40(%rip),%rdi
jmp    1190 <main+0x50>
movss  0x8(%rsp),%xmm0
ucomiss 0xc71(%rip),%xmm0
lea    0xcab(%rip),%rdi
cmovne %rbx,%rdi
cmovp  %rbx,%rdi
call   1050 <printf@plt>
movaps 0x10(%rsp),%xmm0
addss  0xc54(%rip),%xmm0
ucomiss 0xc51(%rip),%xmm0
jb     13ef <main+0x2af>
mov    $0x2,%ebp
movss  %xmm0,0xc(%rsp)
nopl   0x0(%rax)
mov    $0x20,%edi
call   1030 <putchar@plt>
xorps  %xmm0,%xmm0
cvtsi2ss %ebp,%xmm0
add    $0x1,%ebp
movss  0xc(%rsp),%xmm1
ucomiss %xmm0,%xmm1
jae    13d0 <main+0x290>
mov    $0x30,%edi
call   1030 <putchar@plt>
movaps 0x20(%rsp),%xmm1
subss  0x10(%rsp),%xmm1
addss  0xc00(%rip),%xmm1
ucomiss 0xbfd(%rip),%xmm1
mov    %r13,%rdi
jb     1190 <main+0x50>
mov    $0x2,%ebp
movaps %xmm1,0x20(%rsp)
cs nopw 0x0(%rax,%rax,1)
mov    $0x2d,%edi
call   1030 <putchar@plt>
movaps 0x20(%rsp),%xmm1
xorps  %xmm0,%xmm0
cvtsi2ss %ebp,%xmm0
add    $0x1,%ebp
ucomiss %xmm0,%xmm1
jae    1430 <main+0x2f0>
mov    %r13,%rdi
jmp    1190 <main+0x50>
xor    %eax,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str.2 = [5 x i8] c"X |\00"
@.str.3 = [4 x i8] c" |\00"
@.str.6 = [4 x i8] c"X |\00"
@.str.10 = [7 x i8] c" X |\00"
@str = [57 x i8] c" Y----> \00"
@str.14 = [57 x i8] c" 0 ---------------------------------------------------- \00"
@str.15 = [3 x i8] c"* \00"
@str.16 = [4 x i8] c" \00"
@str.17 = [2 x i8] c"0\00"
@str.18 = [2 x i8] c"#\00"
define i32 @main() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([57 x i8], [57 x i8]* @str.14, i64 0, i64 0))
br label %3
3: ; preds = %0, %79
%4 = phi float [ 0.000000e+00, %0 ], [ %83, %79 ]
%5 = fmul float %4, 0xBFD99999A0000000
%6 = tail call i32 @exp(float %5)
%7 = fmul float %4, %5
%8 = fmul float %7, 5.000000e-01
%9 = tail call i32 @exp(float %8)
%10 = insertelement <2 x i32> poison, i32 %6, i64 0
%11 = insertelement <2 x i32> %10, i32 %9, i64 1
%12 = mul nsw <2 x i32> %11, <i32 50, i32 50>
%13 = sitofp <2 x i32> %12 to <2 x double>
%14 = fadd <2 x double> %13, <double 5.000000e-01, double 5.000000e-01>
%15 = fptosi <2 x double> %14 to <2 x i32>
%16 = sitofp <2 x i32> %15 to <2 x float>
%17 = extractelement <2 x float> %16, i64 0
%18 = extractelement <2 x float> %16, i64 1
%19 = fcmp oeq float %17, %18
br i1 %19, label %20, label %32
20: ; preds = %3
%21 = fcmp oeq float %4, 2.500000e+00
%22 = select i1 %21, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0)
%23 = tail call i32 @printf(i8* dereferenceable(1) %22)
%24 = fadd float %17, -1.000000e+00
%25 = fcmp ult float %24, 1.000000e+00
br i1 %25, label %79, label %26
26: ; preds = %20, %26
%27 = phi i32 [ %29, %26 ], [ 1, %20 ]
%28 = tail call i32 @putchar(i32 32)
%29 = add nuw nsw i32 %27, 1
%30 = sitofp i32 %29 to float
%31 = fcmp ult float %24, %30
br i1 %31, label %79, label %26
32: ; preds = %3
%33 = fcmp ogt float %17, %18
%34 = fcmp oeq float %4, 2.500000e+00
br i1 %33, label %35, label %57
35: ; preds = %32
%36 = select i1 %34, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0)
%37 = tail call i32 @printf(i8* dereferenceable(1) %36)
%38 = fadd float %18, -1.000000e+00
%39 = fcmp ult float %38, 1.000000e+00
br i1 %39, label %46, label %40
40: ; preds = %35, %40
%41 = phi i32 [ %43, %40 ], [ 1, %35 ]
%42 = tail call i32 @putchar(i32 32)
%43 = add nuw nsw i32 %41, 1
%44 = sitofp i32 %43 to float
%45 = fcmp ult float %38, %44
br i1 %45, label %46, label %40
46: ; preds = %40, %35
%47 = tail call i32 @putchar(i32 42)
%48 = fsub float %17, %18
%49 = fadd float %48, -1.000000e+00
%50 = fcmp ult float %49, 1.000000e+00
br i1 %50, label %79, label %51
51: ; preds = %46, %51
%52 = phi i32 [ %54, %51 ], [ 1, %46 ]
%53 = tail call i32 @putchar(i32 45)
%54 = add nuw nsw i32 %52, 1
%55 = sitofp i32 %54 to float
%56 = fcmp ult float %49, %55
br i1 %56, label %79, label %51
57: ; preds = %32
%58 = select i1 %34, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i64 0, i64 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0)
%59 = tail call i32 @printf(i8* dereferenceable(1) %58)
%60 = fadd float %17, -1.000000e+00
%61 = fcmp ult float %60, 1.000000e+00
br i1 %61, label %68, label %62
62: ; preds = %57, %62
%63 = phi i32 [ %65, %62 ], [ 1, %57 ]
%64 = tail call i32 @putchar(i32 32)
%65 = add nuw nsw i32 %63, 1
%66 = sitofp i32 %65 to float
%67 = fcmp ult float %60, %66
br i1 %67, label %68, label %62
68: ; preds = %62, %57
%69 = tail call i32 @putchar(i32 48)
%70 = fsub float %18, %17
%71 = fadd float %70, -1.000000e+00
%72 = fcmp ult float %71, 1.000000e+00
br i1 %72, label %79, label %73
73: ; preds = %68, %73
%74 = phi i32 [ %76, %73 ], [ 1, %68 ]
%75 = tail call i32 @putchar(i32 45)
%76 = add nuw nsw i32 %74, 1
%77 = sitofp i32 %76 to float
%78 = fcmp ult float %71, %77
br i1 %78, label %79, label %73
79: ; preds = %73, %51, %26, %68, %46, %20
%80 = phi i8* [ getelementptr inbounds ([2 x i8], [2 x i8]* @str.18, i64 0, i64 0), %20 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @str.17, i64 0, i64 0), %46 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @str.15, i64 0, i64 0), %68 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @str.18, i64 0, i64 0), %26 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @str.17, i64 0, i64 0), %51 ], [ getelementptr inbounds ([3 x i8], [3 x i8]* @str.15, i64 0, i64 0), %73 ]
%81 = tail call i32 @puts(i8* dereferenceable(1) %80)
%82 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @str.16, i64 0, i64 0))
%83 = fadd float %4, 2.500000e-01
%84 = fcmp olt float %83, 5.000000e+00
br i1 %84, label %3, label %85
85: ; preds = %79
ret i32 0
}