#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 /*<<< orphan*/ exit(int);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *);
int /*<<< orphan*/ stderr;
void usage() {
  fprintf(
      stderr,
      "usage: desc [-hs] DATAFILE\n\n"
      "desc analyse the data in DATAFILE and prints summary statistics\n"
      "that describe the data.\n\n"
      "The input must consist of one number per line. If no DATAFILE is\n"
      "provided, desc reads from standard input which means it can be\n"
      "used with pipes.\n\n"
      "Options\n"
      "-------\n"
      "-h    Print this usage message and exit.\n\n"
      "-s    Run in streaming mode. This uses almost no memory and run \n"
      "      time scales linearly with input size. However, the percentiles\n"
      "      are calculated approximately.\n\n"
      "Examples\n"
      "--------\n"
      "cat data/large.dat | desc\n");
  exit(1);
}


x86 assembly (clang, -O0):
<usage>:
push   %rbp
mov    %rsp,%rbp
mov    0x2eb5(%rip),%rax
mov    (%rax),%edi
lea    0xecc(%rip),%rsi
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<usage>:
push   %rax
mov    0x2eb8(%rip),%rax
mov    (%rax),%edi
lea    0xecf(%rip),%rsi
call   1030 <fprintf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@stderr = global i32 0
@.str = [537 x i8] c"usage: desc [-hs] DATAFILE\0A\0Adesc analyse the data in DATAFILE and prints summary statistics\0Athat describe the data.\0A\0AThe input must consist of one number per line. If no DATAFILE is\0Aprovided, desc reads from standard input which means it can be\0Aused with pipes.\0A\0AOptions\0A-------\0A-h Print this usage message and exit.\0A\0A-s Run in streaming mode. This uses almost no memory and run \0A time scales linearly with input size. However, the percentiles\0A are calculated approximately.\0A\0AExamples\0A--------\0Acat data/large.dat | desc\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([537 x i8], [537 x i8]* @.str, i64 0, i64 0))
%3 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@stderr = global i32 0
@.str = [537 x i8] c"usage: desc [-hs] DATAFILE\0A\0Adesc analyse the data in DATAFILE and prints summary statistics\0Athat describe the data.\0A\0AThe input must consist of one number per line. If no DATAFILE is\0Aprovided, desc reads from standard input which means it can be\0Aused with pipes.\0A\0AOptions\0A-------\0A-h Print this usage message and exit.\0A\0A-s Run in streaming mode. This uses almost no memory and run \0A time scales linearly with input size. However, the percentiles\0A are calculated approximately.\0A\0AExamples\0A--------\0Acat data/large.dat | desc\0A\00"
define void @usage() {
%1 = load i32, i32* @stderr
%2 = tail call i32 @fprintf(i32 %1, i8* getelementptr inbounds ([537 x i8], [537 x i8]* @.str, i64 0, i64 0))
%3 = tail call i32 @exit(i32 1)
unreachable
}