#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*/ printf(char *);
void print_usage(void) {
  printf("Usage: ./sample_grabber [-s num] [-i pid] [-h] [filename]\n"
         "Options:\n"
         "  [--verbose -v]  Print more verbose output.\n"
         "  [--size -s]     Number of samples to collect before exiting.\n"
         "                  Valid suffixes are k (1e3), M (1e6), or G (1e9).\n"
         "                  If no argument is supplied, samples will be\n"
         "                  collected until ^C (CTRL+C) is received.\n"
         "  [--id -i]       Product ID of Piksi to take samples from.\n"
         "                    Default is 0x8398.\n"
         "                    Valid range 0x0001 to 0xFFFF.\n"
         "  [--help -h]     Print usage information and exit.\n"
         "  [filename]      A filename to save samples to. If none is\n"
         "                  supplied then samples will not be saved.\n"
         "Note : set_fifo_mode must be run before sample_grabber to configure "
         "the FT232H\n"
         "       on the device for FIFO mode. Run set_uart_mode after "
         "sample_grabber\n"
         "       to set the FT232H back to UART mode for normal operation.\n");
  exit(1);
}


x86 assembly (clang, -O0):
<print_usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xed5(%rip),%rdi
call   1030 <printf@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

x86 assembly (clang, -O2):
<print_usage>:
push   %rax
lea    0xed8(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%edi
call   1040 <exit@plt>

LLVM IR (-O0):
@.str = [903 x i8] c"Usage: ./sample_grabber [-s num] [-i pid] [-h] [filename]\0AOptions:\0A [--verbose -v] Print more verbose output.\0A [--size -s] Number of samples to collect before exiting.\0A Valid suffixes are k (1e3), M (1e6), or G (1e9).\0A If no argument is supplied, samples will be\0A collected until ^C (CTRL+C) is received.\0A [--id -i] Product ID of Piksi to take samples from.\0A Default is 0x8398.\0A Valid range 0x0001 to 0xFFFF.\0A [--help -h] Print usage information and exit.\0A [filename] A filename to save samples to. If none is\0A supplied then samples will not be saved.\0ANote : set_fifo_mode must be run before sample_grabber to configure the FT232H\0A on the device for FIFO mode. Run set_uart_mode after sample_grabber\0A to set the FT232H back to UART mode for normal operation.\0A\00"
define void @print_usage() {
%1 = call i32 @printf(i8* getelementptr inbounds ([903 x i8], [903 x i8]* @.str, i64 0, i64 0))
%2 = call i32 @exit(i32 1)
unreachable
}

LLVM IR (-O2):
@str = [902 x i8] c"Usage: ./sample_grabber [-s num] [-i pid] [-h] [filename]\0AOptions:\0A [--verbose -v] Print more verbose output.\0A [--size -s] Number of samples to collect before exiting.\0A Valid suffixes are k (1e3), M (1e6), or G (1e9).\0A If no argument is supplied, samples will be\0A collected until ^C (CTRL+C) is received.\0A [--id -i] Product ID of Piksi to take samples from.\0A Default is 0x8398.\0A Valid range 0x0001 to 0xFFFF.\0A [--help -h] Print usage information and exit.\0A [filename] A filename to save samples to. If none is\0A supplied then samples will not be saved.\0ANote : set_fifo_mode must be run before sample_grabber to configure the FT232H\0A on the device for FIFO mode. Run set_uart_mode after sample_grabber\0A to set the FT232H back to UART mode for normal operation.\00"
define void @print_usage() {
%1 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([902 x i8], [902 x i8]* @str, i64 0, i64 0))
%2 = tail call i32 @exit(i32 1)
unreachable
}