#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*/ printf(char *, ...);
void print_usage() {
  printf("Author: %s\n", "Shihua (Simon) Xiao, sixiao@microsoft.com");
  printf("ntttcp: "
         "[-r|-s|-D|-M|-L|-e|-H|-P|-n|-l|-6|-u|-p|-f|-b|-B|-W|-t|-C|-N|-x|-O|-"
         "Q|-V|-h|-m <mapping>]\n");
  printf("        "
         "[--show-tcp-retrans|--show-nic-packets|--show-dev-interrupts|--fq-"
         "rate-limit]\n\n");
  printf("\t-r   Run as a receiver\n");
  printf("\t-s   Run as a sender\n");
  printf("\t-D   Run as daemon\n");
  printf("\t-M   [receiver only] multi-clients mode\n");
  printf("\t-L   [sender only] indicates this is the last client when receiver "
         "is running with multi-clients mode\n");
  printf("\t-e   [receiver only] use epoll() instead of select()\n");
  printf("\t-H   [receiver only] hold receiver always running even after one "
         "test finished\n");
  printf("\t-P   Number of ports listening on receiver side	[default: %d] "
         "[max: %d]\n",
         16, 512);
  printf("\t-n   [sender only] number of threads per each receiver port     "
         "[default: %d] [max: %d]\n",
         4, 25600);
  printf("\t-l   [sender only] number of connections per each sender thread "
         "[default: %d] [max: %d]\n",
         1, 1000);
  printf("\t-6   IPv6 mode    [default: IPv4]\n");
  printf("\t-u   UDP mode     [default: TCP]\n");
  printf("\t-p   Destination port number, or starting port number    [default: "
         "%d]\n",
         5001);
  printf("\t-f   Fixed source port number, or starting port number    "
         "[default: %d]\n",
         25001);
  printf("\t-b   <buffer size in n[KMG] Bytes>    [default: %d (receiver); %d "
         "(sender)]\n",
         (64 * 1024), (128 * 1024));
  printf("\t-B   <bandwidth limit in n[KMG] bits/sec> set limit to the "
         "bandwidth\n");
  printf("\t-W   Warm-up time in seconds          [default: %d]\n", 0);
  printf("\t-t   Time of test duration in seconds [default: %d]\n", 60);
  printf("\t-C   Cool-down time in seconds        [default: %d]\n", 0);
  printf("\t-N   No sync, senders will start sending as soon as possible\n");
  printf("\t     Otherwise, will use 'destination port - 1' as sync "
         "port	[default: %d]\n",
         5001 - 1);
  printf("\t-x   Save output to XML file, by default saves to %s\n",
         "ntttcp-for-linux-log.xml");
  printf("\t-O   Save console log to file, by default saves to %s\n",
         "ntttcp-for-linux-log.log");
  printf("\t-Q   Quiet mode\n");
  printf("\t-V   Verbose mode\n");
  printf("\t-h   Help, tool usage\n");
  printf("\t-m   <mapping>\tfor the purpose of compatible with Windows ntttcp "
         "usage\n");
  printf("\t     Where a mapping is a 3-tuple of NumberOfReceiverPorts, "
         "Processor, ReceiverAddress:\n");
  printf("\t     NumberOfReceiverPorts:    [default: %d]  [max: %d]\n", 16,
         512);
  printf("\t     Processor:\t\t*, or cpuid such as 0, 1, etc \n");
  printf("\t     e.g. -m 8,*,192.168.1.1\n");
  printf("\t\t    If for receiver role: 8 threads listening on 8 ports (one "
         "port per thread) on the network 192.168.1.1;\n\t\t\tand those "
         "threads will run on all processors.\n");
  printf("\t\t    If for sender role: receiver has 8 ports listening on the "
         "network 192.168.1.1;\n\t\t\tsender will create 8 threads to talk to "
         "all of those receiver ports\n\t\t\t(1 sender thread to one receiver "
         "port; this can be overridden by '-n');\n\t\t\tand all sender threads "
         "will run on all processors.\n");
  printf("\n");
  printf("\t--show-tcp-retrans\tShow system TCP retransmit counters in log "
         "from /proc\n ");
  printf("\t--show-nic-packets <network interface name>\n");
  printf("\t\t\t\tShow number of packets transferred (tx and rx) through this "
         "network interface\n");
  printf("\t--show-dev-interrupts <device differentiator>\n");
  printf("\t\t\t\tShow number of interrupts for the devices specified by the "
         "differentiator\n");
  printf("\t\t\t\tExamples for differentiator: Hyper-V PCIe MSI, mlx4, "
         "Hypervisor callback interrupts, ...\n");
  printf("\t--fq-rate-limit\t\tLimit socket rate by Fair Queue (FQ) traffic "
         "policing\n");
  printf("\n");
  printf("Example:\n");
  printf("\treceiver:\n");
  printf("\t1) ./ntttcp -r\n");
  printf("\t2) ./ntttcp -r 192.168.1.1\n");
  printf("\t3) ./ntttcp -r -m 8,*,192.168.1.1 -6\n");
  printf("\t4) ./ntttcp -r -m 8,0,192.168.1.1 -6 --show-tcp-retrans "
         "--show-nic-packets eth0 --show-dev-interrupts mlx4 -V\n");
  printf("\tsender:\n");
  printf("\t1) ./ntttcp -s\n");
  printf("\t2) ./ntttcp -s 192.168.1.1\n");
  printf("\t3) ./ntttcp -s -m 8,*,192.168.1.1 -n 16 -6\n");
  printf("\t4) ./ntttcp -s 192.168.1.1 -P 64 -n 16 -l 10 -f25001 -6 -V\n");
  printf("\t3) ./ntttcp -s 192.168.1.1 --fq-rate-limit 10G\n");
  printf("\t4) ./ntttcp -s 192.168.1.1 -B 10G\n");
  printf("\t4) ./ntttcp -s 192.168.1.1 --show-tcp-retrans --show-nic-packets "
         "eth0 --show-dev-interrupts mlx4 -V\n");
}


x86 assembly (clang, -O0):
<print_usage>:
push   %rbp
mov    %rsp,%rbp
lea    0xee5(%rip),%rdi
lea    0xeea(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf06(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xf5b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfa5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfb0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfb9(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfc0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xfdc(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1036(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x105f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10a2(%rip),%rdi
mov    $0x10,%esi
mov    $0x200,%edx
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x10d4(%rip),%rdi
mov    $0x4,%esi
mov    $0x6400,%edx
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1116(%rip),%rdi
mov    $0x1,%esi
mov    $0x3e8,%edx
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1158(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x116e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1183(%rip),%rdi
mov    $0x1389,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11b9(%rip),%rdi
mov    $0x61a9,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x11f0(%rip),%rdi
mov    $0x10000,%esi
mov    $0x20000,%edx
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1226(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x125f(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1285(%rip),%rdi
mov    $0x3c,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x12a8(%rip),%rdi
xor    %esi,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x12ce(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x12ff(%rip),%rdi
mov    $0x1388,%esi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1339(%rip),%rdi
lea    0x1369(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1374(%rip),%rdi
lea    0x13a5(%rip),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x13b0(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x13b4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x13ba(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x13c4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x13ff(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x144b(%rip),%rdi
mov    $0x10,%esi
mov    $0x200,%edx
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x146d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1491(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x14a2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1533(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd7d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1635(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1673(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x1693(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x16d8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x16fa(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x173b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x178b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0xd0d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x17b8(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x17b4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x17b2(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x17b5(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x17c4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x17dd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x183f(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x183b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x183e(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x184d(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x186c(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x189b(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x18be(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    0x18d4(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
pop    %rbp
ret

x86 assembly (clang, -O2):
<print_usage>:
push   %rax
lea    0xec8(%rip),%rdi
lea    0xecd(%rip),%rsi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x12de(%rip),%rdi
call   1040 <puts@plt>
lea    0x1334(%rip),%rdi
call   1040 <puts@plt>
lea    0x137f(%rip),%rdi
call   1040 <puts@plt>
lea    0x138b(%rip),%rdi
call   1040 <puts@plt>
lea    0x1395(%rip),%rdi
call   1040 <puts@plt>
lea    0x139d(%rip),%rdi
call   1040 <puts@plt>
lea    0x13ba(%rip),%rdi
call   1040 <puts@plt>
lea    0x1415(%rip),%rdi
call   1040 <puts@plt>
lea    0x143f(%rip),%rdi
call   1040 <puts@plt>
lea    0xe7d(%rip),%rdi
mov    $0x10,%esi
mov    $0x200,%edx
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xeaf(%rip),%rdi
mov    $0x4,%esi
mov    $0x6400,%edx
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xef1(%rip),%rdi
mov    $0x1,%esi
mov    $0x3e8,%edx
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x143b(%rip),%rdi
call   1040 <puts@plt>
lea    0x1452(%rip),%rdi
call   1040 <puts@plt>
lea    0xf1b(%rip),%rdi
mov    $0x1389,%esi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xf51(%rip),%rdi
mov    $0x61a9,%esi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xf88(%rip),%rdi
mov    $0x10000,%esi
mov    $0x20000,%edx
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x142a(%rip),%rdi
call   1040 <puts@plt>
lea    0xfb2(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xfd8(%rip),%rdi
mov    $0x3c,%esi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0xffb(%rip),%rdi
xor    %esi,%esi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x1431(%rip),%rdi
call   1040 <puts@plt>
lea    0x1015(%rip),%rdi
mov    $0x1388,%esi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x104f(%rip),%rdi
lea    0x107f(%rip),%rsi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x108a(%rip),%rdi
lea    0x10bb(%rip),%rsi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x1426(%rip),%rdi
call   1040 <puts@plt>
lea    0x142b(%rip),%rdi
call   1040 <puts@plt>
lea    0x1432(%rip),%rdi
call   1040 <puts@plt>
lea    0x143d(%rip),%rdi
call   1040 <puts@plt>
lea    0x1479(%rip),%rdi
call   1040 <puts@plt>
lea    0x108a(%rip),%rdi
mov    $0x10,%esi
mov    $0x200,%edx
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x14ae(%rip),%rdi
call   1040 <puts@plt>
lea    0x14d3(%rip),%rdi
call   1040 <puts@plt>
lea    0x14e5(%rip),%rdi
call   1040 <puts@plt>
lea    0x1577(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1072(%rip),%rdi
xor    %eax,%eax
call   1050 <printf@plt>
lea    0x1670(%rip),%rdi
call   1040 <puts@plt>
lea    0x1691(%rip),%rdi
call   1040 <puts@plt>
lea    0x16d7(%rip),%rdi
call   1040 <puts@plt>
lea    0x16fa(%rip),%rdi
call   1040 <puts@plt>
lea    0x173c(%rip),%rdi
call   1040 <puts@plt>
lea    0x178d(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x17bf(%rip),%rdi
call   1040 <puts@plt>
lea    0x17bc(%rip),%rdi
call   1040 <puts@plt>
lea    0x17bb(%rip),%rdi
call   1040 <puts@plt>
lea    0x17bf(%rip),%rdi
call   1040 <puts@plt>
lea    0x17cf(%rip),%rdi
call   1040 <puts@plt>
lea    0x17e9(%rip),%rdi
call   1040 <puts@plt>
lea    0x184c(%rip),%rdi
call   1040 <puts@plt>
lea    0x1849(%rip),%rdi
call   1040 <puts@plt>
lea    0x184d(%rip),%rdi
call   1040 <puts@plt>
lea    0x185d(%rip),%rdi
call   1040 <puts@plt>
lea    0x187d(%rip),%rdi
call   1040 <puts@plt>
lea    0x18ad(%rip),%rdi
call   1040 <puts@plt>
lea    0x18d1(%rip),%rdi
call   1040 <puts@plt>
lea    0x18e8(%rip),%rdi
pop    %rax
jmp    1040 <puts@plt>

LLVM IR (-O0):
@.str = [12 x i8] c"Author: %s\0A\00"
@.str.1 = [42 x i8] c"Shihua (Simon) Xiao, sixiao@microsoft.com\00"
@.str.2 = [99 x i8] c"ntttcp: [-r|-s|-D|-M|-L|-e|-H|-P|-n|-l|-6|-u|-p|-f|-b|-B|-W|-t|-C|-N|-x|-O|-Q|-V|-h|-m <mapping>]\0A\00"
@.str.3 = [88 x i8] c" [--show-tcp-retrans|--show-nic-packets|--show-dev-interrupts|--fq-rate-limit]\0A\0A\00"
@.str.4 = [25 x i8] c"\09-r Run as a receiver\0A\00"
@.str.5 = [23 x i8] c"\09-s Run as a sender\0A\00"
@.str.6 = [21 x i8] c"\09-D Run as daemon\0A\00"
@.str.7 = [42 x i8] c"\09-M [receiver only] multi-clients mode\0A\00"
@.str.8 = [104 x i8] c"\09-L [sender only] indicates this is the last client when receiver is running with multi-clients mode\0A\00"
@.str.9 = [55 x i8] c"\09-e [receiver only] use epoll() instead of select()\0A\00"
@.str.10 = [81 x i8] c"\09-H [receiver only] hold receiver always running even after one test finished\0A\00"
@.str.11 = [74 x i8] c"\09-P Number of ports listening on receiver side\09[default: %d] [max: %d]\0A\00"
@.str.12 = [90 x i8] c"\09-n [sender only] number of threads per each receiver port [default: %d] [max: %d]\0A\00"
@.str.13 = [90 x i8] c"\09-l [sender only] number of connections per each sender thread [default: %d] [max: %d]\0A\00"
@.str.14 = [36 x i8] c"\09-6 IPv6 mode [default: IPv4]\0A\00"
@.str.15 = [35 x i8] c"\09-u UDP mode [default: TCP]\0A\00"
@.str.16 = [73 x i8] c"\09-p Destination port number, or starting port number [default: %d]\0A\00"
@.str.17 = [74 x i8] c"\09-f Fixed source port number, or starting port number [default: %d]\0A\00"
@.str.18 = [78 x i8] c"\09-b <buffer size in n[KMG] Bytes> [default: %d (receiver); %d (sender)]\0A\00"
@.str.19 = [71 x i8] c"\09-B <bandwidth limit in n[KMG] bits/sec> set limit to the bandwidth\0A\00"
@.str.20 = [54 x i8] c"\09-W Warm-up time in seconds [default: %d]\0A\00"
@.str.21 = [54 x i8] c"\09-t Time of test duration in seconds [default: %d]\0A\00"
@.str.22 = [54 x i8] c"\09-C Cool-down time in seconds [default: %d]\0A\00"
@.str.23 = [63 x i8] c"\09-N No sync, senders will start sending as soon as possible\0A\00"
@.str.24 = [77 x i8] c"\09 Otherwise, will use 'destination port - 1' as sync port\09[default: %d]\0A\00"
@.str.25 = [55 x i8] c"\09-x Save output to XML file, by default saves to %s\0A\00"
@.str.26 = [25 x i8] c"ntttcp-for-linux-log.xml\00"
@.str.27 = [56 x i8] c"\09-O Save console log to file, by default saves to %s\0A\00"
@.str.28 = [25 x i8] c"ntttcp-for-linux-log.log\00"
@.str.29 = [18 x i8] c"\09-Q Quiet mode\0A\00"
@.str.30 = [20 x i8] c"\09-V Verbose mode\0A\00"
@.str.31 = [24 x i8] c"\09-h Help, tool usage\0A\00"
@.str.32 = [73 x i8] c"\09-m <mapping>\09for the purpose of compatible with Windows ntttcp usage\0A\00"
@.str.33 = [90 x i8] c"\09 Where a mapping is a 3-tuple of NumberOfReceiverPorts, Processor, ReceiverAddress:\0A\00"
@.str.34 = [58 x i8] c"\09 NumberOfReceiverPorts: [default: %d] [max: %d]\0A\00"
@.str.35 = [50 x i8] c"\09 Processor:\09\09*, or cpuid such as 0, 1, etc \0A\00"
@.str.36 = [31 x i8] c"\09 e.g. -m 8,*,192.168.1.1\0A\00"
@.str.37 = [159 x i8] c"\09\09 If for receiver role: 8 threads listening on 8 ports (one port per thread) on the network 192.168.1.1;\0A\09\09\09and those threads will run on all processors.\0A\00"
@.str.38 = [286 x i8] c"\09\09 If for sender role: receiver has 8 ports listening on the network 192.168.1.1;\0A\09\09\09sender will create 8 threads to talk to all of those receiver ports\0A\09\09\09(1 sender thread to one receiver port; this can be overridden by '-n');\0A\09\09\09and all sender threads will run on all processors.\0A\00"
@.str.39 = [2 x i8] c"\0A\00"
@.str.40 = [76 x i8] c"\09--show-tcp-retrans\09Show system TCP retransmit counters in log from /proc\0A \00"
@.str.41 = [46 x i8] c"\09--show-nic-packets <network interface name>\0A\00"
@.str.42 = [83 x i8] c"\09\09\09\09Show number of packets transferred (tx and rx) through this network interface\0A\00"
@.str.43 = [48 x i8] c"\09--show-dev-interrupts <device differentiator>\0A\00"
@.str.44 = [79 x i8] c"\09\09\09\09Show number of interrupts for the devices specified by the differentiator\0A\00"
@.str.45 = [94 x i8] c"\09\09\09\09Examples for differentiator: Hyper-V PCIe MSI, mlx4, Hypervisor callback interrupts, ...\0A\00"
@.str.46 = [73 x i8] c"\09--fq-rate-limit\09\09Limit socket rate by Fair Queue (FQ) traffic policing\0A\00"
@.str.47 = [10 x i8] c"Example:\0A\00"
@.str.48 = [12 x i8] c"\09receiver:\0A\00"
@.str.49 = [17 x i8] c"\091) ./ntttcp -r\0A\00"
@.str.50 = [29 x i8] c"\092) ./ntttcp -r 192.168.1.1\0A\00"
@.str.51 = [39 x i8] c"\093) ./ntttcp -r -m 8,*,192.168.1.1 -6\0A\00"
@.str.52 = [112 x i8] c"\094) ./ntttcp -r -m 8,0,192.168.1.1 -6 --show-tcp-retrans --show-nic-packets eth0 --show-dev-interrupts mlx4 -V\0A\00"
@.str.53 = [10 x i8] c"\09sender:\0A\00"
@.str.54 = [17 x i8] c"\091) ./ntttcp -s\0A\00"
@.str.55 = [29 x i8] c"\092) ./ntttcp -s 192.168.1.1\0A\00"
@.str.56 = [45 x i8] c"\093) ./ntttcp -s -m 8,*,192.168.1.1 -n 16 -6\0A\00"
@.str.57 = [61 x i8] c"\094) ./ntttcp -s 192.168.1.1 -P 64 -n 16 -l 10 -f25001 -6 -V\0A\00"
@.str.58 = [49 x i8] c"\093) ./ntttcp -s 192.168.1.1 --fq-rate-limit 10G\0A\00"
@.str.59 = [36 x i8] c"\094) ./ntttcp -s 192.168.1.1 -B 10G\0A\00"
@.str.60 = [102 x i8] c"\094) ./ntttcp -s 192.168.1.1 --show-tcp-retrans --show-nic-packets eth0 --show-dev-interrupts mlx4 -V\0A\00"
define void @print_usage() {
%1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.1, i64 0, i64 0))
%2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([99 x i8], [99 x i8]* @.str.2, i64 0, i64 0))
%3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([88 x i8], [88 x i8]* @.str.3, i64 0, i64 0))
%4 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.4, i64 0, i64 0))
%5 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.5, i64 0, i64 0))
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.6, i64 0, i64 0))
%7 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.7, i64 0, i64 0))
%8 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([104 x i8], [104 x i8]* @.str.8, i64 0, i64 0))
%9 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.9, i64 0, i64 0))
%10 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([81 x i8], [81 x i8]* @.str.10, i64 0, i64 0))
%11 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.11, i64 0, i64 0), i32 16, i32 512)
%12 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([90 x i8], [90 x i8]* @.str.12, i64 0, i64 0), i32 4, i32 25600)
%13 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([90 x i8], [90 x i8]* @.str.13, i64 0, i64 0), i32 1, i32 1000)
%14 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.14, i64 0, i64 0))
%15 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.15, i64 0, i64 0))
%16 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.16, i64 0, i64 0), i32 5001)
%17 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.17, i64 0, i64 0), i32 25001)
%18 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([78 x i8], [78 x i8]* @.str.18, i64 0, i64 0), i32 65536, i32 131072)
%19 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.19, i64 0, i64 0))
%20 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.20, i64 0, i64 0), i32 0)
%21 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.21, i64 0, i64 0), i32 60)
%22 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([54 x i8], [54 x i8]* @.str.22, i64 0, i64 0), i32 0)
%23 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([63 x i8], [63 x i8]* @.str.23, i64 0, i64 0))
%24 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.24, i64 0, i64 0), i32 5000)
%25 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.25, i64 0, i64 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.26, i64 0, i64 0))
%26 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.27, i64 0, i64 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.28, i64 0, i64 0))
%27 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.29, i64 0, i64 0))
%28 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.30, i64 0, i64 0))
%29 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.31, i64 0, i64 0))
%30 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.32, i64 0, i64 0))
%31 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([90 x i8], [90 x i8]* @.str.33, i64 0, i64 0))
%32 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([58 x i8], [58 x i8]* @.str.34, i64 0, i64 0), i32 16, i32 512)
%33 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.35, i64 0, i64 0))
%34 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.36, i64 0, i64 0))
%35 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([159 x i8], [159 x i8]* @.str.37, i64 0, i64 0))
%36 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([286 x i8], [286 x i8]* @.str.38, i64 0, i64 0))
%37 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.39, i64 0, i64 0))
%38 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.40, i64 0, i64 0))
%39 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.41, i64 0, i64 0))
%40 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([83 x i8], [83 x i8]* @.str.42, i64 0, i64 0))
%41 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.43, i64 0, i64 0))
%42 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.44, i64 0, i64 0))
%43 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([94 x i8], [94 x i8]* @.str.45, i64 0, i64 0))
%44 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.46, i64 0, i64 0))
%45 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.39, i64 0, i64 0))
%46 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.47, i64 0, i64 0))
%47 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.48, i64 0, i64 0))
%48 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.49, i64 0, i64 0))
%49 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.50, i64 0, i64 0))
%50 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.51, i64 0, i64 0))
%51 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([112 x i8], [112 x i8]* @.str.52, i64 0, i64 0))
%52 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.53, i64 0, i64 0))
%53 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.54, i64 0, i64 0))
%54 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.55, i64 0, i64 0))
%55 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.56, i64 0, i64 0))
%56 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([61 x i8], [61 x i8]* @.str.57, i64 0, i64 0))
%57 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([49 x i8], [49 x i8]* @.str.58, i64 0, i64 0))
%58 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.59, i64 0, i64 0))
%59 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([102 x i8], [102 x i8]* @.str.60, i64 0, i64 0))
ret void
}

LLVM IR (-O2):
@.str = [12 x i8] c"Author: %s\0A\00"
@.str.1 = [42 x i8] c"Shihua (Simon) Xiao, sixiao@microsoft.com\00"
@.str.11 = [74 x i8] c"\09-P Number of ports listening on receiver side\09[default: %d] [max: %d]\0A\00"
@.str.12 = [90 x i8] c"\09-n [sender only] number of threads per each receiver port [default: %d] [max: %d]\0A\00"
@.str.13 = [90 x i8] c"\09-l [sender only] number of connections per each sender thread [default: %d] [max: %d]\0A\00"
@.str.16 = [73 x i8] c"\09-p Destination port number, or starting port number [default: %d]\0A\00"
@.str.17 = [74 x i8] c"\09-f Fixed source port number, or starting port number [default: %d]\0A\00"
@.str.18 = [78 x i8] c"\09-b <buffer size in n[KMG] Bytes> [default: %d (receiver); %d (sender)]\0A\00"
@.str.20 = [54 x i8] c"\09-W Warm-up time in seconds [default: %d]\0A\00"
@.str.21 = [54 x i8] c"\09-t Time of test duration in seconds [default: %d]\0A\00"
@.str.22 = [54 x i8] c"\09-C Cool-down time in seconds [default: %d]\0A\00"
@.str.24 = [77 x i8] c"\09 Otherwise, will use 'destination port - 1' as sync port\09[default: %d]\0A\00"
@.str.25 = [55 x i8] c"\09-x Save output to XML file, by default saves to %s\0A\00"
@.str.26 = [25 x i8] c"ntttcp-for-linux-log.xml\00"
@.str.27 = [56 x i8] c"\09-O Save console log to file, by default saves to %s\0A\00"
@.str.28 = [25 x i8] c"ntttcp-for-linux-log.log\00"
@.str.34 = [58 x i8] c"\09 NumberOfReceiverPorts: [default: %d] [max: %d]\0A\00"
@.str.40 = [76 x i8] c"\09--show-tcp-retrans\09Show system TCP retransmit counters in log from /proc\0A \00"
@str = [98 x i8] c"ntttcp: [-r|-s|-D|-M|-L|-e|-H|-P|-n|-l|-6|-u|-p|-f|-b|-B|-W|-t|-C|-N|-x|-O|-Q|-V|-h|-m <mapping>]\00"
@str.61 = [87 x i8] c" [--show-tcp-retrans|--show-nic-packets|--show-dev-interrupts|--fq-rate-limit]\0A\00"
@str.62 = [24 x i8] c"\09-r Run as a receiver\00"
@str.63 = [22 x i8] c"\09-s Run as a sender\00"
@str.64 = [20 x i8] c"\09-D Run as daemon\00"
@str.65 = [41 x i8] c"\09-M [receiver only] multi-clients mode\00"
@str.66 = [103 x i8] c"\09-L [sender only] indicates this is the last client when receiver is running with multi-clients mode\00"
@str.67 = [54 x i8] c"\09-e [receiver only] use epoll() instead of select()\00"
@str.68 = [80 x i8] c"\09-H [receiver only] hold receiver always running even after one test finished\00"
@str.69 = [35 x i8] c"\09-6 IPv6 mode [default: IPv4]\00"
@str.70 = [34 x i8] c"\09-u UDP mode [default: TCP]\00"
@str.71 = [70 x i8] c"\09-B <bandwidth limit in n[KMG] bits/sec> set limit to the bandwidth\00"
@str.72 = [62 x i8] c"\09-N No sync, senders will start sending as soon as possible\00"
@str.73 = [17 x i8] c"\09-Q Quiet mode\00"
@str.74 = [19 x i8] c"\09-V Verbose mode\00"
@str.75 = [23 x i8] c"\09-h Help, tool usage\00"
@str.76 = [72 x i8] c"\09-m <mapping>\09for the purpose of compatible with Windows ntttcp usage\00"
@str.77 = [89 x i8] c"\09 Where a mapping is a 3-tuple of NumberOfReceiverPorts, Processor, ReceiverAddress:\00"
@str.78 = [49 x i8] c"\09 Processor:\09\09*, or cpuid such as 0, 1, etc \00"
@str.79 = [30 x i8] c"\09 e.g. -m 8,*,192.168.1.1\00"
@str.80 = [158 x i8] c"\09\09 If for receiver role: 8 threads listening on 8 ports (one port per thread) on the network 192.168.1.1;\0A\09\09\09and those threads will run on all processors.\00"
@str.81 = [285 x i8] c"\09\09 If for sender role: receiver has 8 ports listening on the network 192.168.1.1;\0A\09\09\09sender will create 8 threads to talk to all of those receiver ports\0A\09\09\09(1 sender thread to one receiver port; this can be overridden by '-n');\0A\09\09\09and all sender threads will run on all processors.\00"
@str.82 = [45 x i8] c"\09--show-nic-packets <network interface name>\00"
@str.83 = [82 x i8] c"\09\09\09\09Show number of packets transferred (tx and rx) through this network interface\00"
@str.84 = [47 x i8] c"\09--show-dev-interrupts <device differentiator>\00"
@str.85 = [78 x i8] c"\09\09\09\09Show number of interrupts for the devices specified by the differentiator\00"
@str.86 = [93 x i8] c"\09\09\09\09Examples for differentiator: Hyper-V PCIe MSI, mlx4, Hypervisor callback interrupts, ...\00"
@str.87 = [72 x i8] c"\09--fq-rate-limit\09\09Limit socket rate by Fair Queue (FQ) traffic policing\00"
@str.88 = [9 x i8] c"Example:\00"
@str.89 = [11 x i8] c"\09receiver:\00"
@str.90 = [16 x i8] c"\091) ./ntttcp -r\00"
@str.91 = [28 x i8] c"\092) ./ntttcp -r 192.168.1.1\00"
@str.92 = [38 x i8] c"\093) ./ntttcp -r -m 8,*,192.168.1.1 -6\00"
@str.93 = [111 x i8] c"\094) ./ntttcp -r -m 8,0,192.168.1.1 -6 --show-tcp-retrans --show-nic-packets eth0 --show-dev-interrupts mlx4 -V\00"
@str.94 = [9 x i8] c"\09sender:\00"
@str.95 = [16 x i8] c"\091) ./ntttcp -s\00"
@str.96 = [28 x i8] c"\092) ./ntttcp -s 192.168.1.1\00"
@str.97 = [44 x i8] c"\093) ./ntttcp -s -m 8,*,192.168.1.1 -n 16 -6\00"
@str.98 = [60 x i8] c"\094) ./ntttcp -s 192.168.1.1 -P 64 -n 16 -l 10 -f25001 -6 -V\00"
@str.99 = [48 x i8] c"\093) ./ntttcp -s 192.168.1.1 --fq-rate-limit 10G\00"
@str.100 = [35 x i8] c"\094) ./ntttcp -s 192.168.1.1 -B 10G\00"
@str.101 = [101 x i8] c"\094) ./ntttcp -s 192.168.1.1 --show-tcp-retrans --show-nic-packets eth0 --show-dev-interrupts mlx4 -V\00"
define void @print_usage() {
%1 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @.str, i64 0, i64 0), i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.1, i64 0, i64 0))
%2 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([98 x i8], [98 x i8]* @str, i64 0, i64 0))
%3 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([87 x i8], [87 x i8]* @str.61, i64 0, i64 0))
%4 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @str.62, i64 0, i64 0))
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @str.63, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.64, i64 0, i64 0))
%7 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.65, i64 0, i64 0))
%8 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([103 x i8], [103 x i8]* @str.66, i64 0, i64 0))
%9 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @str.67, i64 0, i64 0))
%10 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([80 x i8], [80 x i8]* @str.68, i64 0, i64 0))
%11 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([74 x i8], [74 x i8]* @.str.11, i64 0, i64 0), i32 16, i32 512)
%12 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([90 x i8], [90 x i8]* @.str.12, i64 0, i64 0), i32 4, i32 25600)
%13 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([90 x i8], [90 x i8]* @.str.13, i64 0, i64 0), i32 1, i32 1000)
%14 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @str.69, i64 0, i64 0))
%15 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.70, i64 0, i64 0))
%16 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @.str.16, i64 0, i64 0), i32 5001)
%17 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([74 x i8], [74 x i8]* @.str.17, i64 0, i64 0), i32 25001)
%18 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([78 x i8], [78 x i8]* @.str.18, i64 0, i64 0), i32 65536, i32 131072)
%19 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.71, i64 0, i64 0))
%20 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @.str.20, i64 0, i64 0), i32 0)
%21 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @.str.21, i64 0, i64 0), i32 60)
%22 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @.str.22, i64 0, i64 0), i32 0)
%23 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([62 x i8], [62 x i8]* @str.72, i64 0, i64 0))
%24 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([77 x i8], [77 x i8]* @.str.24, i64 0, i64 0), i32 5000)
%25 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([55 x i8], [55 x i8]* @.str.25, i64 0, i64 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.26, i64 0, i64 0))
%26 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([56 x i8], [56 x i8]* @.str.27, i64 0, i64 0), i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.28, i64 0, i64 0))
%27 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.73, i64 0, i64 0))
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.74, i64 0, i64 0))
%29 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str.75, i64 0, i64 0))
%30 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @str.76, i64 0, i64 0))
%31 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([89 x i8], [89 x i8]* @str.77, i64 0, i64 0))
%32 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @.str.34, i64 0, i64 0), i32 16, i32 512)
%33 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([49 x i8], [49 x i8]* @str.78, i64 0, i64 0))
%34 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @str.79, i64 0, i64 0))
%35 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([158 x i8], [158 x i8]* @str.80, i64 0, i64 0))
%36 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([285 x i8], [285 x i8]* @str.81, i64 0, i64 0))
%37 = tail call i32 @putchar(i32 10)
%38 = tail call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([76 x i8], [76 x i8]* @.str.40, i64 0, i64 0))
%39 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @str.82, i64 0, i64 0))
%40 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([82 x i8], [82 x i8]* @str.83, i64 0, i64 0))
%41 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @str.84, i64 0, i64 0))
%42 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([78 x i8], [78 x i8]* @str.85, i64 0, i64 0))
%43 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([93 x i8], [93 x i8]* @str.86, i64 0, i64 0))
%44 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @str.87, i64 0, i64 0))
%45 = tail call i32 @putchar(i32 10)
%46 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.88, i64 0, i64 0))
%47 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.89, i64 0, i64 0))
%48 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.90, i64 0, i64 0))
%49 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.91, i64 0, i64 0))
%50 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @str.92, i64 0, i64 0))
%51 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([111 x i8], [111 x i8]* @str.93, i64 0, i64 0))
%52 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([9 x i8], [9 x i8]* @str.94, i64 0, i64 0))
%53 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.95, i64 0, i64 0))
%54 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([28 x i8], [28 x i8]* @str.96, i64 0, i64 0))
%55 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([44 x i8], [44 x i8]* @str.97, i64 0, i64 0))
%56 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([60 x i8], [60 x i8]* @str.98, i64 0, i64 0))
%57 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([48 x i8], [48 x i8]* @str.99, i64 0, i64 0))
%58 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @str.100, i64 0, i64 0))
%59 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([101 x i8], [101 x i8]* @str.101, i64 0, i64 0))
ret void
}