#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 EXIT_FAILURE;
int abs(short);
void *atoi(int /*<<< orphan*/);
int /*<<< orphan*/ fflush(int /*<<< orphan*/);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, int);
int getopt(int, char **, char *);
int /*<<< orphan*/ optarg;
int optopt;
scalar_t__ read(int /*<<< orphan*/, short *, short);
int /*<<< orphan*/ stderr;
int /*<<< orphan*/ stdout;
int /*<<< orphan*/ write(int, short **, int);
int main(int argc, char **argv) {
  short int ssize = 16;
  unsigned int buflen = 2048;
  int limit = 1024;
  unsigned int duration = 4096;
  unsigned int ttime = 512;
  unsigned short bufptr = 0;
  short int pcm;
  short int outbuf[buflen];
  short int silcount = 0, ampcount = 0;
  float amp = 1.0f;
  bool silent = false, falling = false, rising = false;
  int c;
  while ((c = getopt(argc, argv, "u:l:d:t:")) != -1)
    switch (c) {
    case 'u':
      buflen = atoi(optarg);
      break;
    case 'l':
      limit = atoi(optarg);
      break;
    case 'd':
      duration = atoi(optarg);
      break;
    case 't':
      ttime = atoi(optarg);
      break;
    case '?':
      fprintf(stderr, "Unknown option `-%c'.\n", optopt);
      return EXIT_FAILURE;
    default:
      break;
    }
  while (read(0, &pcm, ssize / 8)) {
    if (silent) {
      if (falling) {
        amp = (float)(ttime - ampcount) / ttime;
        outbuf[bufptr] = pcm * amp;
        ampcount++;
        if (ampcount > ttime)
          falling = false;
      } else {
        outbuf[bufptr] = 0x0000;
      }
      if (abs(pcm) > limit) {
        silent = false;
        rising = true;
        ampcount = 0;
        silcount = 0;
      }
    } else {
      if (rising) {
        amp = ((float)ampcount) / ttime;
        outbuf[bufptr] = pcm * amp;
        ampcount++;
        if (ampcount > ttime)
          rising = false;
      } else {
        outbuf[bufptr] = pcm;
      }
      if (abs(pcm) < limit) {
        silcount++;
        if (silcount > duration) {
          silent = true;
          falling = true;
          ampcount = 0;
        }
      }
    }
    if (++bufptr == buflen) {
      if (!write(1, &outbuf, 2 * buflen))
        return (EXIT_FAILURE);
      fflush(stdout);
      bufptr = 0;
    }
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x70,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movw   $0x10,-0x12(%rbp)
movl   $0x800,-0x18(%rbp)
movl   $0x400,-0x1c(%rbp)
movl   $0x1000,-0x20(%rbp)
movl   $0x200,-0x24(%rbp)
movw   $0x0,-0x26(%rbp)
mov    -0x18(%rbp),%eax
mov    %rsp,%rcx
mov    %rcx,-0x30(%rbp)
lea    0xf(%rax,%rax,1),%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rcx
sub    %rdx,%rcx
mov    %rcx,-0x60(%rbp)
mov    %rcx,%rsp
mov    %rax,-0x38(%rbp)
movw   $0x0,-0x3a(%rbp)
movw   $0x0,-0x3c(%rbp)
movss  0xe1a(%rip),%xmm0
movss  %xmm0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x8(%rbp),%edi
mov    -0x10(%rbp),%rsi
lea    0xdf6(%rip),%rdx
call   1080 <getopt@plt>
mov    %eax,-0x50(%rbp)
cmp    $0xffffffff,%eax
je     130f <main+0x19f>
mov    -0x50(%rbp),%eax
mov    %eax,-0x64(%rbp)
sub    $0x3f,%eax
je     12cf <main+0x15f>
jmp    1233 <main+0xc3>
mov    -0x64(%rbp),%eax
sub    $0x64,%eax
je     12a3 <main+0x133>
jmp    1244 <main+0xd4>
mov    -0x64(%rbp),%eax
sub    $0x6c,%eax
je     128d <main+0x11d>
jmp    1255 <main+0xe5>
mov    -0x64(%rbp),%eax
sub    $0x74,%eax
je     12b9 <main+0x149>
jmp    1266 <main+0xf6>
mov    -0x64(%rbp),%eax
sub    $0x75,%eax
jne    1305 <main+0x195>
jmp    1277 <main+0x107>
mov    0x2d7a(%rip),%rax
mov    (%rax),%edi
call   1090 <atoi@plt>
mov    %eax,-0x18(%rbp)
jmp    130a <main+0x19a>
mov    0x2d64(%rip),%rax
mov    (%rax),%edi
call   1090 <atoi@plt>
mov    %eax,-0x1c(%rbp)
jmp    130a <main+0x19a>
mov    0x2d4e(%rip),%rax
mov    (%rax),%edi
call   1090 <atoi@plt>
mov    %eax,-0x20(%rbp)
jmp    130a <main+0x19a>
mov    0x2d38(%rip),%rax
mov    (%rax),%edi
call   1090 <atoi@plt>
mov    %eax,-0x24(%rbp)
jmp    130a <main+0x19a>
mov    0x2cfa(%rip),%rax
mov    (%rax),%edi
mov    0x2d01(%rip),%rax
mov    (%rax),%edx
lea    0xd25(%rip),%rsi
call   1060 <fprintf@plt>
mov    0x2cd4(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
movl   $0x1,-0x54(%rbp)
jmp    1524 <main+0x3b4>
jmp    130a <main+0x19a>
jmp    1200 <main+0x90>
jmp    1314 <main+0x1a4>
movswl -0x12(%rbp),%eax
mov    $0x8,%ecx
cltd
idiv   %ecx
xor    %edi,%edi
lea    -0x28(%rbp),%rsi
movswl %ax,%edx
call   1050 <read@plt>
cmp    $0x0,%rax
je     151d <main+0x3ad>
cmpl   $0x0,-0x44(%rbp)
je     13f2 <main+0x282>
cmpl   $0x0,-0x48(%rbp)
je     13b3 <main+0x243>
mov    -0x60(%rbp),%rax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
movswl -0x3c(%rbp),%esi
sub    %esi,%edx
cvtsi2ss %rdx,%xmm0
cvtsi2ss %rcx,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x40(%rbp)
movswl -0x28(%rbp),%ecx
cvtsi2ss %ecx,%xmm0
movss  -0x40(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%ecx
mov    %cx,%dx
movzwl -0x26(%rbp),%ecx
mov    %dx,(%rax,%rcx,2)
mov    -0x3c(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x3c(%rbp)
movswl -0x3c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jbe    13ae <main+0x23e>
movl   $0x0,-0x48(%rbp)
jmp    13c1 <main+0x251>
mov    -0x60(%rbp),%rax
movzwl -0x26(%rbp),%ecx
movw   $0x0,(%rax,%rcx,2)
movswl -0x28(%rbp),%edi
call   1030 <abs@plt>
cmp    -0x1c(%rbp),%eax
jle    13ed <main+0x27d>
movl   $0x0,-0x44(%rbp)
movl   $0x1,-0x4c(%rbp)
movw   $0x0,-0x3c(%rbp)
movw   $0x0,-0x3a(%rbp)
jmp    14b7 <main+0x347>
cmpl   $0x0,-0x4c(%rbp)
je     145e <main+0x2ee>
mov    -0x60(%rbp),%rax
movswl -0x3c(%rbp),%ecx
cvtsi2ss %ecx,%xmm0
mov    -0x24(%rbp),%ecx
cvtsi2ss %rcx,%xmm1
divss  %xmm1,%xmm0
movss  %xmm0,-0x40(%rbp)
movswl -0x28(%rbp),%ecx
cvtsi2ss %ecx,%xmm0
movss  -0x40(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvttss2si %xmm0,%ecx
mov    %cx,%dx
movzwl -0x26(%rbp),%ecx
mov    %dx,(%rax,%rcx,2)
mov    -0x3c(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x3c(%rbp)
movswl -0x3c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jbe    1459 <main+0x2e9>
movl   $0x0,-0x4c(%rbp)
jmp    146e <main+0x2fe>
mov    -0x60(%rbp),%rax
mov    -0x28(%rbp),%dx
movzwl -0x26(%rbp),%ecx
mov    %dx,(%rax,%rcx,2)
movswl -0x28(%rbp),%edi
call   1030 <abs@plt>
cmp    -0x1c(%rbp),%eax
jge    14b2 <main+0x342>
mov    -0x3a(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x3a(%rbp)
movswl -0x3a(%rbp),%eax
cmp    -0x20(%rbp),%eax
jbe    14ad <main+0x33d>
movl   $0x1,-0x44(%rbp)
movl   $0x1,-0x48(%rbp)
movw   $0x0,-0x3c(%rbp)
jmp    14b2 <main+0x342>
jmp    14b7 <main+0x347>
mov    -0x26(%rbp),%ax
add    $0x1,%ax
mov    %ax,-0x26(%rbp)
movzwl %ax,%eax
cmp    -0x18(%rbp),%eax
jne    1518 <main+0x3a8>
mov    -0x60(%rbp),%rsi
mov    -0x18(%rbp),%edx
shl    $0x1,%edx
mov    $0x1,%edi
call   1040 <write@plt>
cmp    $0x0,%eax
jne    1504 <main+0x394>
mov    0x2ad5(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
movl   $0x1,-0x54(%rbp)
jmp    1524 <main+0x3b4>
mov    0x2ab5(%rip),%rax
mov    (%rax),%edi
call   1070 <fflush@plt>
movw   $0x0,-0x26(%rbp)
jmp    1314 <main+0x1a4>
movl   $0x0,-0x54(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rsp
mov    -0x4(%rbp),%eax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x1048,%rsp
mov    %rsi,%rbp
mov    %edi,%ebx
mov    %rsp,0x38(%rsp)
mov    $0x800,%eax
mov    %rax,0x20(%rsp)
mov    $0x400,%eax
mov    %rax,0x18(%rsp)
mov    $0x200,%eax
mov    %rax,0x10(%rsp)
mov    $0x1000,%r12d
lea    0xe92(%rip),%r13
lea    0xe43(%rip),%r14
mov    0x2e34(%rip),%r15
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %ebx,%edi
mov    %rbp,%rsi
mov    %r13,%rdx
call   1080 <getopt@plt>
lea    -0x64(%rax),%ecx
cmp    $0x11,%ecx
ja     1200 <main+0x90>
movslq (%r14,%rcx,4),%rax
add    %r14,%rax
jmp    *%rax
mov    (%r15),%edi
call   1090 <atoi@plt>
mov    %rax,%r12
jmp    11d0 <main+0x60>
nopl   0x0(%rax,%rax,1)
cmp    $0x3f,%eax
je     1239 <main+0xc9>
cmp    $0xffffffff,%eax
jne    11d0 <main+0x60>
jmp    1265 <main+0xf5>
mov    (%r15),%edi
call   1090 <atoi@plt>
mov    %rax,0x18(%rsp)
jmp    11d0 <main+0x60>
mov    (%r15),%edi
call   1090 <atoi@plt>
mov    %rax,0x10(%rsp)
jmp    11d0 <main+0x60>
mov    (%r15),%edi
call   1090 <atoi@plt>
mov    %rax,0x20(%rsp)
jmp    11d0 <main+0x60>
mov    0x2d90(%rip),%rax
mov    (%rax),%edi
mov    0x2d97(%rip),%rax
mov    (%rax),%edx
lea    0xdff(%rip),%rsi
call   1060 <fprintf@plt>
mov    0x2d6a(%rip),%rax
mov    (%rax),%ebx
jmp    1443 <main+0x2d3>
mov    %r12,0x30(%rsp)
xor    %ebx,%ebx
lea    0x6(%rsp),%rsi
xor    %edi,%edi
mov    $0x2,%edx
call   1050 <read@plt>
test   %rax,%rax
je     1443 <main+0x2d3>
mov    0x10(%rsp),%eax
cvtsi2ss %rax,%xmm0
movss  %xmm0,0xc(%rsp)
mov    0x20(%rsp),%rax
add    %eax,%eax
mov    %eax,0x2c(%rsp)
xor    %r15d,%r15d
xor    %r12d,%r12d
xor    %r13d,%r13d
xor    %ebp,%ebp
movl   $0x0,0x8(%rsp)
xor    %r14d,%r14d
xor    %ebx,%ebx
jmp    12da <main+0x16a>
nopw   0x0(%rax,%rax,1)
xor    %edi,%edi
lea    0x6(%rsp),%rsi
mov    $0x2,%edx
call   1050 <read@plt>
test   %rax,%rax
je     1443 <main+0x2d3>
test   %r13d,%r13d
je     1330 <main+0x1c0>
movzwl %r14w,%ecx
test   %r12d,%r12d
je     1380 <main+0x210>
movswl %bp,%eax
mov    0x10(%rsp),%rsi
mov    %esi,%edx
sub    %eax,%edx
xorps  %xmm0,%xmm0
cvtsi2ss %rdx,%xmm0
divss  0xc(%rsp),%xmm0
movswl 0x6(%rsp),%eax
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
mulss  %xmm0,%xmm1
cvttss2si %xmm1,%edx
mov    %dx,0x40(%rsp,%rcx,2)
add    $0x1,%ebp
movswl %bp,%ecx
xor    %r12d,%r12d
cmp    %ecx,%esi
setae  %r12b
jmp    138f <main+0x21f>
test   %r15d,%r15d
je     13b8 <main+0x248>
movswl %bp,%eax
xorps  %xmm0,%xmm0
cvtsi2ss %eax,%xmm0
movswl 0x6(%rsp),%eax
xorps  %xmm1,%xmm1
cvtsi2ss %eax,%xmm1
divss  0xc(%rsp),%xmm0
mulss  %xmm0,%xmm1
cvttss2si %xmm1,%ecx
movzwl %r14w,%edx
mov    %cx,0x40(%rsp,%rdx,2)
add    $0x1,%ebp
movswl %bp,%ecx
xor    %r15d,%r15d
cmp    %ecx,0x10(%rsp)
setae  %r15b
jmp    13c9 <main+0x259>
nopl   0x0(%rax)
movw   $0x0,0x40(%rsp,%rcx,2)
xor    %r12d,%r12d
movzwl 0x6(%rsp),%eax
movswl %ax,%edi
call   1030 <abs@plt>
mov    $0x1,%r13d
cmp    0x18(%rsp),%eax
jle    1400 <main+0x290>
mov    $0x1,%r15d
movl   $0x0,0x8(%rsp)
xor    %ebp,%ebp
xor    %r13d,%r13d
jmp    1400 <main+0x290>
movzwl 0x6(%rsp),%eax
movzwl %r14w,%ecx
mov    %ax,0x40(%rsp,%rcx,2)
xor    %r15d,%r15d
movswl %ax,%edi
call   1030 <abs@plt>
xor    %r13d,%r13d
cmp    0x18(%rsp),%eax
jge    1400 <main+0x290>
mov    0x8(%rsp),%eax
add    $0x1,%eax
mov    %eax,0x8(%rsp)
cwtl
cmp    %eax,0x30(%rsp)
jae    1400 <main+0x290>
mov    $0x1,%r13d
xor    %ebp,%ebp
mov    $0x1,%r12d
nopw   0x0(%rax,%rax,1)
add    $0x1,%r14d
movzwl %r14w,%eax
cmp    %eax,0x20(%rsp)
jne    12c0 <main+0x150>
mov    $0x1,%edi
lea    0x40(%rsp),%rsi
mov    0x2c(%rsp),%edx
call   1040 <write@plt>
test   %eax,%eax
je     1257 <main+0xe7>
mov    0x2b8c(%rip),%rax
mov    (%rax),%edi
call   1070 <fflush@plt>
xor    %r14d,%r14d
jmp    12c0 <main+0x150>
mov    0x38(%rsp),%rsp
mov    %ebx,%eax
add    $0x1048,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [9 x i8] c"u:l:d:t:\00"
@optarg = global i32 0
@stderr = global i32 0
@.str.1 = [23 x i8] c"Unknown option `-%c'.\0A\00"
@optopt = global i32 0
@EXIT_FAILURE = global i32 0
@stdout = global i32 0
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i16
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i16
%12 = alloca i16
%13 = alloca i8*
%14 = alloca i64
%15 = alloca i16
%16 = alloca i16
%17 = alloca float
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store i16 16, i16* %6
store i32 2048, i32* %7
store i32 1024, i32* %8
store i32 4096, i32* %9
store i32 512, i32* %10
store i16 0, i16* %11
%23 = load i32, i32* %7
%24 = zext i32 %23 to i64
%25 = call i8* @llvm.stacksave()
store i8* %25, i8** %13
%26 = alloca i16, i64 %24
store i64 %24, i64* %14
store i16 0, i16* %15
store i16 0, i16* %16
store float 1.000000e+00, float* %17
store i32 0, i32* %18
store i32 0, i32* %19
store i32 0, i32* %20
br label %27
27: ; preds = %56, %2
%28 = load i32, i32* %4
%29 = load i8**, i8*** %5
%30 = call i32 @getopt(i32 %28, i8** %29, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
store i32 %30, i32* %21
%31 = icmp ne i32 %30, -1
br i1 %31, label %32, label %57
32: ; preds = %27
%33 = load i32, i32* %21
switch i32 %33, label %55 [
i32 117, label %34
i32 108, label %38
i32 100, label %42
i32 116, label %46
i32 63, label %50
]
34: ; preds = %32
%35 = load i32, i32* @optarg
%36 = call i8* @atoi(i32 %35)
%37 = ptrtoint i8* %36 to i32
store i32 %37, i32* %7
br label %56
38: ; preds = %32
%39 = load i32, i32* @optarg
%40 = call i8* @atoi(i32 %39)
%41 = ptrtoint i8* %40 to i32
store i32 %41, i32* %8
br label %56
42: ; preds = %32
%43 = load i32, i32* @optarg
%44 = call i8* @atoi(i32 %43)
%45 = ptrtoint i8* %44 to i32
store i32 %45, i32* %9
br label %56
46: ; preds = %32
%47 = load i32, i32* @optarg
%48 = call i8* @atoi(i32 %47)
%49 = ptrtoint i8* %48 to i32
store i32 %49, i32* %10
br label %56
50: ; preds = %32
%51 = load i32, i32* @stderr
%52 = load i32, i32* @optopt
%53 = call i32 @fprintf(i32 %51, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 %52)
%54 = load i32, i32* @EXIT_FAILURE
store i32 %54, i32* %3
store i32 1, i32* %22
br label %173
55: ; preds = %32
br label %56
56: ; preds = %55, %46, %42, %38, %34
br label %27
57: ; preds = %27
br label %58
58: ; preds = %171, %57
%59 = load i16, i16* %6
%60 = sext i16 %59 to i32
%61 = sdiv i32 %60, 8
%62 = trunc i32 %61 to i16
%63 = call i64 @read(i32 0, i16* %12, i16 signext %62)
%64 = icmp ne i64 %63, 0
br i1 %64, label %65, label %172
65: ; preds = %58
%66 = load i32, i32* %18
%67 = icmp ne i32 %66, 0
br i1 %67, label %68, label %108
68: ; preds = %65
%69 = load i32, i32* %19
%70 = icmp ne i32 %69, 0
br i1 %70, label %71, label %97
71: ; preds = %68
%72 = load i32, i32* %10
%73 = load i16, i16* %16
%74 = sext i16 %73 to i32
%75 = sub i32 %72, %74
%76 = uitofp i32 %75 to float
%77 = load i32, i32* %10
%78 = uitofp i32 %77 to float
%79 = fdiv float %76, %78
store float %79, float* %17
%80 = load i16, i16* %12
%81 = sext i16 %80 to i32
%82 = sitofp i32 %81 to float
%83 = load float, float* %17
%84 = fmul float %82, %83
%85 = fptosi float %84 to i16
%86 = load i16, i16* %11
%87 = zext i16 %86 to i64
%88 = getelementptr inbounds i16, i16* %26, i64 %87
store i16 %85, i16* %88
%89 = load i16, i16* %16
%90 = add i16 %89, 1
store i16 %90, i16* %16
%91 = load i16, i16* %16
%92 = sext i16 %91 to i32
%93 = load i32, i32* %10
%94 = icmp ugt i32 %92, %93
br i1 %94, label %95, label %96
95: ; preds = %71
store i32 0, i32* %19
br label %96
96: ; preds = %95, %71
br label %101
97: ; preds = %68
%98 = load i16, i16* %11
%99 = zext i16 %98 to i64
%100 = getelementptr inbounds i16, i16* %26, i64 %99
store i16 0, i16* %100
br label %101
101: ; preds = %97, %96
%102 = load i16, i16* %12
%103 = call i32 @abs(i16 signext %102)
%104 = load i32, i32* %8
%105 = icmp sgt i32 %103, %104
br i1 %105, label %106, label %107
106: ; preds = %101
store i32 0, i32* %18
store i32 1, i32* %20
store i16 0, i16* %16
store i16 0, i16* %15
br label %107
107: ; preds = %106, %101
br label %154
108: ; preds = %65
%109 = load i32, i32* %20
%110 = icmp ne i32 %109, 0
br i1 %110, label %111, label %134
111: ; preds = %108
%112 = load i16, i16* %16
%113 = sitofp i16 %112 to float
%114 = load i32, i32* %10
%115 = uitofp i32 %114 to float
%116 = fdiv float %113, %115
store float %116, float* %17
%117 = load i16, i16* %12
%118 = sext i16 %117 to i32
%119 = sitofp i32 %118 to float
%120 = load float, float* %17
%121 = fmul float %119, %120
%122 = fptosi float %121 to i16
%123 = load i16, i16* %11
%124 = zext i16 %123 to i64
%125 = getelementptr inbounds i16, i16* %26, i64 %124
store i16 %122, i16* %125
%126 = load i16, i16* %16
%127 = add i16 %126, 1
store i16 %127, i16* %16
%128 = load i16, i16* %16
%129 = sext i16 %128 to i32
%130 = load i32, i32* %10
%131 = icmp ugt i32 %129, %130
br i1 %131, label %132, label %133
132: ; preds = %111
store i32 0, i32* %20
br label %133
133: ; preds = %132, %111
br label %139
134: ; preds = %108
%135 = load i16, i16* %12
%136 = load i16, i16* %11
%137 = zext i16 %136 to i64
%138 = getelementptr inbounds i16, i16* %26, i64 %137
store i16 %135, i16* %138
br label %139
139: ; preds = %134, %133
%140 = load i16, i16* %12
%141 = call i32 @abs(i16 signext %140)
%142 = load i32, i32* %8
%143 = icmp slt i32 %141, %142
br i1 %143, label %144, label %153
144: ; preds = %139
%145 = load i16, i16* %15
%146 = add i16 %145, 1
store i16 %146, i16* %15
%147 = load i16, i16* %15
%148 = sext i16 %147 to i32
%149 = load i32, i32* %9
%150 = icmp ugt i32 %148, %149
br i1 %150, label %151, label %152
151: ; preds = %144
store i32 1, i32* %18
store i32 1, i32* %19
store i16 0, i16* %16
br label %152
152: ; preds = %151, %144
br label %153
153: ; preds = %152, %139
br label %154
154: ; preds = %153, %107
%155 = load i16, i16* %11
%156 = add i16 %155, 1
store i16 %156, i16* %11
%157 = zext i16 %156 to i32
%158 = load i32, i32* %7
%159 = icmp eq i32 %157, %158
br i1 %159, label %160, label %171
160: ; preds = %154
%161 = bitcast i16* %26 to i16**
%162 = load i32, i32* %7
%163 = mul i32 2, %162
%164 = call i32 @write(i32 1, i16** %161, i32 %163)
%165 = icmp ne i32 %164, 0
br i1 %165, label %168, label %166
166: ; preds = %160
%167 = load i32, i32* @EXIT_FAILURE
store i32 %167, i32* %3
store i32 1, i32* %22
br label %173
168: ; preds = %160
%169 = load i32, i32* @stdout
%170 = call i32 @fflush(i32 %169)
store i16 0, i16* %11
br label %171
171: ; preds = %168, %154
br label %58
172: ; preds = %58
store i32 0, i32* %22
br label %173
173: ; preds = %172, %166, %50
%174 = load i8*, i8** %13
%175 = load i32, i32* %22
switch i32 %175, label %178 [
i32 0, label %176
i32 1, label %176
]
176: ; preds = %173, %173
%177 = load i32, i32* %3
ret i32 %177
178: ; preds = %173
unreachable
}

LLVM IR (-O2):
@.str = [9 x i8] c"u:l:d:t:\00"
@optarg = global i32 0
@stderr = global i32 0
@.str.1 = [23 x i8] c"Unknown option `-%c'.\0A\00"
@optopt = global i32 0
@EXIT_FAILURE = global i32 0
@stdout = global i32 0
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i16
%4 = bitcast i16* %3 to i8*
%5 = tail call i8* @llvm.stacksave()
%6 = alloca [2048 x i16]
br label %7
7: ; preds = %40, %2
%8 = phi i32 [ %44, %40 ], [ 4096, %2 ]
%9 = phi i32 [ %13, %40 ], [ 512, %2 ]
%10 = phi i32 [ %17, %40 ], [ 1024, %2 ]
%11 = phi i32 [ %20, %40 ], [ 2048, %2 ]
br label %12
12: ; preds = %7, %45
%13 = phi i32 [ %9, %7 ], [ %49, %45 ]
%14 = phi i32 [ %10, %7 ], [ %17, %45 ]
%15 = phi i32 [ %11, %7 ], [ %20, %45 ]
br label %16
16: ; preds = %12, %35
%17 = phi i32 [ %14, %12 ], [ %39, %35 ]
%18 = phi i32 [ %15, %12 ], [ %20, %35 ]
br label %19
19: ; preds = %16, %30
%20 = phi i32 [ %18, %16 ], [ %34, %30 ]
br label %21
21: ; preds = %19, %21
%22 = tail call i32 @getopt(i32 %0, i8** %1, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str, i64 0, i64 0))
switch i32 %22, label %21 [
i32 -1, label %23
i32 117, label %30
i32 108, label %35
i32 100, label %40
i32 116, label %45
i32 63, label %50
]
23: ; preds = %21
%24 = call i64 @read(i32 0, i16* %3, i16 signext 2)
%25 = icmp eq i64 %24, 0
br i1 %25, label %142, label %26
26: ; preds = %23
%27 = uitofp i32 %13 to float
%28 = bitcast [2048 x i16]* %6 to i16**
%29 = shl i32 %20, 1
br label %55
30: ; preds = %21
%31 = load i32, i32* @optarg
%32 = tail call i8* @atoi(i32 %31)
%33 = ptrtoint i8* %32 to i64
%34 = trunc i64 %33 to i32
br label %19
35: ; preds = %21
%36 = load i32, i32* @optarg
%37 = tail call i8* @atoi(i32 %36)
%38 = ptrtoint i8* %37 to i64
%39 = trunc i64 %38 to i32
br label %16
40: ; preds = %21
%41 = load i32, i32* @optarg
%42 = tail call i8* @atoi(i32 %41)
%43 = ptrtoint i8* %42 to i64
%44 = trunc i64 %43 to i32
br label %7
45: ; preds = %21
%46 = load i32, i32* @optarg
%47 = tail call i8* @atoi(i32 %46)
%48 = ptrtoint i8* %47 to i64
%49 = trunc i64 %48 to i32
br label %12
50: ; preds = %21
%51 = load i32, i32* @stderr
%52 = load i32, i32* @optopt
%53 = tail call i32 @fprintf(i32 %51, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.1, i64 0, i64 0), i32 %52)
%54 = load i32, i32* @EXIT_FAILURE
br label %142
55: ; preds = %26, %138
%56 = phi i32 [ 0, %26 ], [ %126, %138 ]
%57 = phi i32 [ 0, %26 ], [ %125, %138 ]
%58 = phi i32 [ 0, %26 ], [ %124, %138 ]
%59 = phi i16 [ 0, %26 ], [ %123, %138 ]
%60 = phi i16 [ 0, %26 ], [ %122, %138 ]
%61 = phi i16 [ 0, %26 ], [ %139, %138 ]
%62 = icmp eq i32 %58, 0
br i1 %62, label %91, label %63
63: ; preds = %55
%64 = icmp eq i32 %57, 0
br i1 %64, label %80, label %65
65: ; preds = %63
%66 = sext i16 %59 to i32
%67 = sub i32 %13, %66
%68 = uitofp i32 %67 to float
%69 = fdiv float %68, %27
%70 = load i16, i16* %3
%71 = sitofp i16 %70 to float
%72 = fmul float %69, %71
%73 = fptosi float %72 to i16
%74 = zext i16 %61 to i64
%75 = getelementptr inbounds [2048 x i16], [2048 x i16]* %6, i64 0, i64 %74
store i16 %73, i16* %75
%76 = add i16 %59, 1
%77 = sext i16 %76 to i32
%78 = icmp uge i32 %13, %77
%79 = zext i1 %78 to i32
br label %84
80: ; preds = %63
%81 = zext i16 %61 to i64
%82 = getelementptr inbounds [2048 x i16], [2048 x i16]* %6, i64 0, i64 %81
store i16 0, i16* %82
%83 = load i16, i16* %3
br label %84
84: ; preds = %65, %80
%85 = phi i16 [ %83, %80 ], [ %70, %65 ]
%86 = phi i16 [ %59, %80 ], [ %76, %65 ]
%87 = phi i32 [ 0, %80 ], [ %79, %65 ]
%88 = tail call i32 @abs(i16 signext %85)
%89 = icmp sgt i32 %88, %17
br i1 %89, label %90, label %121
90: ; preds = %84
br label %121
91: ; preds = %55
%92 = icmp eq i32 %56, 0
br i1 %92, label %106, label %93
93: ; preds = %91
%94 = sitofp i16 %59 to float
%95 = fdiv float %94, %27
%96 = load i16, i16* %3
%97 = sitofp i16 %96 to float
%98 = fmul float %95, %97
%99 = fptosi float %98 to i16
%100 = zext i16 %61 to i64
%101 = getelementptr inbounds [2048 x i16], [2048 x i16]* %6, i64 0, i64 %100
store i16 %99, i16* %101
%102 = add i16 %59, 1
%103 = sext i16 %102 to i32
%104 = icmp uge i32 %13, %103
%105 = zext i1 %104 to i32
br label %110
106: ; preds = %91
%107 = load i16, i16* %3
%108 = zext i16 %61 to i64
%109 = getelementptr inbounds [2048 x i16], [2048 x i16]* %6, i64 0, i64 %108
store i16 %107, i16* %109
br label %110
110: ; preds = %93, %106
%111 = phi i16 [ %107, %106 ], [ %96, %93 ]
%112 = phi i16 [ %59, %106 ], [ %102, %93 ]
%113 = phi i32 [ 0, %106 ], [ %105, %93 ]
%114 = tail call i32 @abs(i16 signext %111)
%115 = icmp slt i32 %114, %17
br i1 %115, label %116, label %121
116: ; preds = %110
%117 = add i16 %60, 1
%118 = sext i16 %117 to i32
%119 = icmp ult i32 %8, %118
br i1 %119, label %120, label %121
120: ; preds = %116
br label %121
121: ; preds = %110, %120, %116, %84, %90
%122 = phi i16 [ 0, %90 ], [ %60, %84 ], [ %117, %120 ], [ %117, %116 ], [ %60, %110 ]
%123 = phi i16 [ 0, %90 ], [ %86, %84 ], [ 0, %120 ], [ %112, %116 ], [ %112, %110 ]
%124 = phi i32 [ 0, %90 ], [ 1, %84 ], [ 1, %120 ], [ 0, %116 ], [ 0, %110 ]
%125 = phi i32 [ %87, %90 ], [ %87, %84 ], [ 1, %120 ], [ %57, %116 ], [ %57, %110 ]
%126 = phi i32 [ 1, %90 ], [ %56, %84 ], [ %113, %120 ], [ %113, %116 ], [ %113, %110 ]
%127 = add i16 %61, 1
%128 = zext i16 %127 to i32
%129 = icmp eq i32 %20, %128
br i1 %129, label %130, label %138
130: ; preds = %121
%131 = call i32 @write(i32 1, i16** %28, i32 %29)
%132 = icmp eq i32 %131, 0
br i1 %132, label %133, label %135
133: ; preds = %130
%134 = load i32, i32* @EXIT_FAILURE
br label %142
135: ; preds = %130
%136 = load i32, i32* @stdout
%137 = tail call i32 @fflush(i32 %136)
br label %138
138: ; preds = %135, %121
%139 = phi i16 [ 0, %135 ], [ %127, %121 ]
%140 = call i64 @read(i32 0, i16* %3, i16 signext 2)
%141 = icmp eq i64 %140, 0
br i1 %141, label %142, label %55
142: ; preds = %138, %23, %133, %50
%143 = phi i32 [ %54, %50 ], [ %134, %133 ], [ 0, %23 ], [ 0, %138 ]
tail call void @llvm.stackrestore(i8* %5)
ret i32 %143
}