#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 */
struct timeval {
  int tv_sec;
  scalar_t__ tv_usec;
};
struct termios {
  int /*<<< orphan*/ c_cflag;
};
typedef int /*<<< orphan*/ fd_set;

/* Variables and functions */
int /*<<< orphan*/ B9600;
int /*<<< orphan*/ CS8;
int /*<<< orphan*/ CSIZE;
int /*<<< orphan*/ CSTOPB;
int /*<<< orphan*/ FD_SET(int, int /*<<< orphan*/ *);
int O_NDELAY;
int O_NOCTTY;
int O_RDWR;
int /*<<< orphan*/ PARENB;
int /*<<< orphan*/ TCSANOW;
int /*<<< orphan*/ cfmakeraw(struct termios *);
int /*<<< orphan*/ cfsetospeed(struct termios *, int /*<<< orphan*/);
int /*<<< orphan*/ close(int);
int /*<<< orphan*/ errno;
int open(char *, int);
int /*<<< orphan*/ perror(char *);
int /*<<< orphan*/ printf(char *, ...);
int read(int, void *, int);
int select(int, int /*<<< orphan*/ *, int /*<<< orphan*/ *,
           int /*<<< orphan*/ *, struct timeval *);
int /*<<< orphan*/ tcsetattr(int, int /*<<< orphan*/, struct termios *);
int main(int argc, char *argv[]) {
  unsigned char buf;
  unsigned char data[24];
  int n;
  int i;
  int maxfd;
  fd_set readfs;
  struct timeval timeout;
  int res;
  int pos = 0;
  int myhid = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY);
  if (myhid == -1) {
    perror("open_port:Unable to open /dev/ttyUSB0");
  } else {
    struct termios port_settings;
    cfsetospeed(&port_settings, B9600);
    port_settings.c_cflag &= ~PARENB;
    port_settings.c_cflag &= ~CSTOPB;
    port_settings.c_cflag &= ~CSIZE;
    port_settings.c_cflag |= CS8;
    cfmakeraw(&port_settings);
    tcsetattr(myhid, TCSANOW, &port_settings);
    printf("端口配置完毕！\n");
    while (1) {
      maxfd = myhid + 1;
      FD_SET(myhid, &readfs);
      timeout.tv_usec = 0;
      timeout.tv_sec = 1;
      res = select(maxfd, &readfs, NULL, NULL, &timeout);
      if (res == 0)
        continue;
      n = read(myhid, (void *)&buf, 1);
      if (n > 0) {
        if (0xff == (unsigned int)buf) {
          data[0] = buf;
          pos = 1;
        } else {
          data[pos] = buf;
          pos++;
          if (pos == 24 && data[pos - 1] == 0xfe) {
            pos = 0;
            printf("\n*********************************************************"
                   "*******************\n");
            printf("接收到24byte数据：");
            for (i = 0; i < 24; i++) {
              printf("%02x ", data[i]);
            }
            printf("\n");
            printf("测量结果：\n");
            printf("高压:%dmmHg\t 低压:%dmmHg\t 脉搏:%d/min\n", data[10],
                   data[11], data[12]);
            unsigned char ResultDataDA, ResultDataHO;
            unsigned char year, month, day, hour, minute;
            year = data[13];
            ResultDataDA = data[14];
            ResultDataHO = data[15];
            minute = data[16] & 0x3f;
            month = (ResultDataDA & 0xc0) / 64 + (ResultDataHO & 0xc0) / 16;
            day = ResultDataDA & 0x3f;
            hour = ResultDataHO & 0x3f;
            printf("测量日期:20%02d-%02d-%02d\t 测量时间:%02d:%02d \n", year,
                   month, day, hour, minute);
            printf("***********************************************************"
                   "*****************\n\n\n");
          } else if (24 == pos) {
            printf("无效数据：");
            for (i = 0; i < pos; i++) {
              printf("%02x ", data[i]);
            }
            printf("\r");
            pos = 0;
          }
        }
      } else if (n == 0) {
        printf("read  returns 0\n");
      } else {
        printf("read  returns -1, errno:%u \n", n, errno);
      }
    }
    close(myhid);
  }
  return 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)
movl   $0x0,-0x58(%rbp)
mov    0x2e34(%rip),%rax
mov    (%rax),%esi
mov    0x2df3(%rip),%rax
or     (%rax),%esi
mov    0x2dda(%rip),%rax
or     (%rax),%esi
lea    0xe4a(%rip),%rdi
call   1090 <open@plt>
mov    %eax,-0x5c(%rbp)
cmpl   $0xffffffff,-0x5c(%rbp)
jne    11f2 <main+0x62>
lea    0xe18(%rip),%rdi
call   10a0 <perror@plt>
jmp    1517 <main+0x387>
mov    0x2dd7(%rip),%rax
mov    (%rax),%esi
lea    -0x60(%rbp),%rdi
call   1030 <cfsetospeed@plt>
mov    0x2dd5(%rip),%rax
mov    (%rax),%eax
xor    $0xffffffff,%eax
and    -0x60(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    0x2d73(%rip),%rax
mov    (%rax),%eax
xor    $0xffffffff,%eax
and    -0x60(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    0x2d91(%rip),%rax
mov    (%rax),%eax
xor    $0xffffffff,%eax
and    -0x60(%rbp),%eax
mov    %eax,-0x60(%rbp)
mov    0x2d87(%rip),%rax
mov    (%rax),%eax
or     -0x60(%rbp),%eax
mov    %eax,-0x60(%rbp)
lea    -0x60(%rbp),%rdi
call   1070 <cfmakeraw@plt>
mov    -0x5c(%rbp),%edi
mov    0x2d7c(%rip),%rax
mov    (%rax),%esi
lea    -0x60(%rbp),%rdx
call   1080 <tcsetattr@plt>
lea    0xdb8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x5c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
mov    -0x5c(%rbp),%edi
lea    -0x40(%rbp),%rsi
call   10b0 <FD_SET@plt>
movq   $0x0,-0x48(%rbp)
movl   $0x1,-0x50(%rbp)
mov    -0x3c(%rbp),%edi
lea    -0x40(%rbp),%rsi
xor    %eax,%eax
mov    %eax,%ecx
lea    -0x50(%rbp),%r8
mov    %rcx,%rdx
call   1060 <select@plt>
mov    %eax,-0x54(%rbp)
cmpl   $0x0,-0x54(%rbp)
jne    12c2 <main+0x132>
jmp    1275 <main+0xe5>
mov    -0x5c(%rbp),%edi
lea    -0x11(%rbp),%rsi
mov    $0x1,%edx
call   1050 <read@plt>
mov    %eax,-0x34(%rbp)
cmpl   $0x0,-0x34(%rbp)
jle    14d6 <main+0x346>
movzbl -0x11(%rbp),%ecx
mov    $0xff,%eax
cmp    %ecx,%eax
jne    1303 <main+0x173>
mov    -0x11(%rbp),%al
mov    %al,-0x30(%rbp)
movl   $0x1,-0x58(%rbp)
jmp    14d1 <main+0x341>
mov    -0x11(%rbp),%cl
movslq -0x58(%rbp),%rax
mov    %cl,-0x30(%rbp,%rax,1)
mov    -0x58(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x58(%rbp)
cmpl   $0x18,-0x58(%rbp)
jne    145e <main+0x2ce>
mov    -0x58(%rbp),%eax
sub    $0x1,%eax
cltq
movzbl -0x30(%rbp,%rax,1),%eax
cmp    $0xfe,%eax
jne    145e <main+0x2ce>
movl   $0x0,-0x58(%rbp)
lea    0xcf6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd37(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x38(%rbp)
cmpl   $0x18,-0x38(%rbp)
jge    1392 <main+0x202>
movslq -0x38(%rbp),%rax
movzbl -0x30(%rbp,%rax,1),%esi
lea    0xd28(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1363 <main+0x1d3>
lea    0xdd6(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xd04(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movzbl -0x26(%rbp),%esi
movzbl -0x25(%rbp),%edx
movzbl -0x24(%rbp),%ecx
lea    0xcfb(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x23(%rbp),%al
mov    %al,-0x63(%rbp)
mov    -0x22(%rbp),%al
mov    %al,-0x61(%rbp)
mov    -0x21(%rbp),%al
mov    %al,-0x62(%rbp)
movzbl -0x20(%rbp),%eax
and    $0x3f,%eax
mov    %al,-0x67(%rbp)
movzbl -0x61(%rbp),%eax
and    $0xc0,%eax
mov    $0x40,%ecx
cltd
idiv   %ecx
mov    %eax,-0x6c(%rbp)
movzbl -0x62(%rbp),%eax
and    $0xc0,%eax
mov    $0x10,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x6c(%rbp),%eax
add    %ecx,%eax
mov    %al,-0x64(%rbp)
movzbl -0x61(%rbp),%eax
and    $0x3f,%eax
mov    %al,-0x65(%rbp)
movzbl -0x62(%rbp),%eax
and    $0x3f,%eax
mov    %al,-0x66(%rbp)
movzbl -0x63(%rbp),%esi
movzbl -0x64(%rbp),%edx
movzbl -0x65(%rbp),%ecx
movzbl -0x66(%rbp),%r8d
movzbl -0x67(%rbp),%r9d
lea    0xca5(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
lea    0xccf(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    14cc <main+0x33c>
mov    $0x18,%eax
cmp    -0x58(%rbp),%eax
jne    14c7 <main+0x337>
lea    0xcfe(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%eax
cmp    -0x58(%rbp),%eax
jge    14b2 <main+0x322>
movslq -0x38(%rbp),%rax
movzbl -0x30(%rbp,%rax,1),%esi
lea    0xc08(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
mov    -0x38(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x38(%rbp)
jmp    1481 <main+0x2f1>
lea    0xcc8(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
movl   $0x0,-0x58(%rbp)
jmp    14cc <main+0x33c>
jmp    14d1 <main+0x341>
jmp    1512 <main+0x382>
cmpl   $0x0,-0x34(%rbp)
jne    14f3 <main+0x363>
lea    0xc9c(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    150d <main+0x37d>
mov    -0x34(%rbp),%esi
mov    0x2aab(%rip),%rax
mov    (%rax),%edx
lea    0xc8e(%rip),%rdi
mov    $0x0,%al
call   1040 <printf@plt>
jmp    1512 <main+0x382>
jmp    1275 <main+0xe5>
xor    %eax,%eax
add    $0x70,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x48,%rsp
mov    0x2e23(%rip),%rax
mov    0x2de4(%rip),%rcx
mov    (%rcx),%esi
or     (%rax),%esi
mov    0x2dc9(%rip),%rax
or     (%rax),%esi
lea    0xe39(%rip),%rdi
call   10b0 <open@plt>
cmp    $0xffffffff,%eax
je     16ec <main+0x53c>
mov    %eax,%r14d
mov    0x2dd8(%rip),%rax
mov    (%rax),%esi
lea    0x30(%rsp),%rbx
mov    %rbx,%rdi
call   1050 <cfsetospeed@plt>
mov    0x2dd2(%rip),%rax
mov    (%rax),%eax
mov    0x2d79(%rip),%rcx
or     (%rcx),%eax
mov    0x2da0(%rip),%rcx
or     (%rcx),%eax
not    %eax
and    0x30(%rsp),%eax
mov    0x2d99(%rip),%rcx
or     (%rcx),%eax
mov    %eax,0x30(%rsp)
mov    %rbx,%rdi
call   1090 <cfmakeraw@plt>
mov    0x2d94(%rip),%rax
mov    (%rax),%esi
mov    %r14d,%edi
mov    %rbx,%rdx
call   10a0 <tcsetattr@plt>
lea    0xe7f(%rip),%rdi
call   1040 <puts@plt>
mov    %r14d,%ebp
add    $0x1,%ebp
lea    0x34(%rsp),%rbx
lea    0x38(%rsp),%r15
lea    0x27(%rsp),%r12
lea    0xe74(%rip),%r13
xor    %eax,%eax
jmp    1289 <main+0xd9>
nopl   (%rax)
movb   $0xff,(%rsp)
mov    $0x1,%eax
mov    %rax,0x28(%rsp)
jmp    12a0 <main+0xf0>
mov    %r13,%rdi
call   1040 <puts@plt>
nopl   0x0(%rax,%rax,1)
mov    %r14d,%edi
mov    %rbx,%rsi
call   10d0 <FD_SET@plt>
movq   $0x0,0x40(%rsp)
movl   $0x1,0x38(%rsp)
mov    %ebp,%edi
mov    %rbx,%rsi
xor    %edx,%edx
xor    %ecx,%ecx
mov    %r15,%r8
call   1080 <select@plt>
test   %eax,%eax
je     12a0 <main+0xf0>
mov    %r14d,%edi
mov    %r12,%rsi
mov    $0x1,%edx
call   1070 <read@plt>
test   %eax,%eax
jg     1302 <main+0x152>
je     1290 <main+0xe0>
mov    0x2cba(%rip),%rcx
mov    (%rcx),%edx
lea    0xdc3(%rip),%rdi
mov    %eax,%esi
xor    %eax,%eax
call   1060 <printf@plt>
jmp    12a0 <main+0xf0>
movzbl 0x27(%rsp),%eax
cmp    $0xff,%al
je     1280 <main+0xd0>
mov    0x28(%rsp),%rcx
movslq %ecx,%rcx
mov    %al,(%rsp,%rcx,1)
add    $0x1,%ecx
cmp    $0x18,%ecx
jne    1545 <main+0x395>
cmp    $0xfe,%al
jne    1545 <main+0x395>
lea    0xdc8(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
mov    %rax,0x28(%rsp)
lea    0xcde(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl (%rsp),%esi
lea    0xce5(%rip),%r13
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x1(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x2(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x3(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x4(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x5(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x6(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x7(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x8(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x9(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xa(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xb(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xc(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xd(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xe(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xf(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x10(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x11(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x12(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x13(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x14(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x15(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x16(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x17(%rsp),%esi
mov    %r13,%rdi
lea    0xc30(%rip),%r13
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xc76(%rip),%rdi
call   1040 <puts@plt>
movzbl 0xa(%rsp),%esi
movzbl 0xb(%rsp),%edx
movzbl 0xc(%rsp),%ecx
lea    0xb55(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xd(%rsp),%esi
movzbl 0xe(%rsp),%ecx
movzbl 0xf(%rsp),%r8d
movzbl 0x10(%rsp),%r9d
and    $0x3f,%r9d
mov    %ecx,%eax
shr    $0x6,%eax
mov    %r8d,%edx
shr    $0x6,%edx
lea    (%rax,%rdx,4),%edx
and    $0x3f,%ecx
and    $0x3f,%r8d
lea    0xb45(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
lea    0xc20(%rip),%rdi
call   1040 <puts@plt>
jmp    12a0 <main+0xf0>
mov    %rcx,0x28(%rsp)
cmp    $0x18,%ecx
jne    12a0 <main+0xf0>
xor    %eax,%eax
mov    %rax,0x28(%rsp)
lea    0xb49(%rip),%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl (%rsp),%esi
lea    0xacc(%rip),%r13
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x1(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x2(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x3(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x4(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x5(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x6(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x7(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x8(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x9(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xa(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xb(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xc(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xd(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xe(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0xf(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x10(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x11(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x12(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x13(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x14(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x15(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x16(%rsp),%esi
mov    %r13,%rdi
xor    %eax,%eax
call   1060 <printf@plt>
movzbl 0x17(%rsp),%esi
mov    %r13,%rdi
lea    0xa17(%rip),%r13
xor    %eax,%eax
call   1060 <printf@plt>
mov    $0xd,%edi
call   1030 <putchar@plt>
jmp    12a0 <main+0xf0>
lea    0x90d(%rip),%rdi
call   10c0 <perror@plt>
xor    %eax,%eax
add    $0x48,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
%struct.timeval = type { i32, i64 }
%struct.termios = type { i32 }
@.str = [13 x i8] c"/dev/ttyUSB0\00"
@O_RDWR = global i32 0
@O_NOCTTY = global i32 0
@O_NDELAY = global i32 0
@.str.1 = [38 x i8] c"open_port:Unable to open /dev/ttyUSB0\00"
@B9600 = global i32 0
@PARENB = global i32 0
@CSTOPB = global i32 0
@CSIZE = global i32 0
@CS8 = global i32 0
@TCSANOW = global i32 0
@.str.2 = [23 x i8] c"\E7\AB\AF\E5\8F\A3\E9\85\8D\E7\BD\AE\E5\AE\8C\E6\AF\95\EF\BC\81\0A\00"
@.str.3 = [79 x i8] c"\0A****************************************************************************\0A\00"
@.str.4 = [25 x i8] c"\E6\8E\A5\E6\94\B6\E5\88\B024byte\E6\95\B0\E6\8D\AE\EF\BC\9A\00"
@.str.5 = [6 x i8] c"%02x \00"
@.str.6 = [2 x i8] c"\0A\00"
@.str.7 = [17 x i8] c"\E6\B5\8B\E9\87\8F\E7\BB\93\E6\9E\9C\EF\BC\9A\0A\00"
@.str.8 = [45 x i8] c"\E9\AB\98\E5\8E\8B:%dmmHg\09 \E4\BD\8E\E5\8E\8B:%dmmHg\09 \E8\84\89\E6\90\8F:%d/min\0A\00"
@.str.9 = [56 x i8] c"\E6\B5\8B\E9\87\8F\E6\97\A5\E6\9C\9F:20%02d-%02d-%02d\09 \E6\B5\8B\E9\87\8F\E6\97\B6\E9\97\B4:%02d:%02d \0A\00"
@.str.10 = [80 x i8] c"****************************************************************************\0A\0A\0A\00"
@.str.11 = [16 x i8] c"\E6\97\A0\E6\95\88\E6\95\B0\E6\8D\AE\EF\BC\9A\00"
@.str.12 = [2 x i8] c"\0D\00"
@.str.13 = [17 x i8] c"read returns 0\0A\00"
@.str.14 = [29 x i8] c"read returns -1, errno:%u \0A\00"
@errno = global i32 0
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i8
%7 = alloca [24 x i8]
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca %struct.timeval
%13 = alloca i32
%14 = alloca i32
%15 = alloca i32
%16 = alloca %struct.termios
%17 = alloca i8
%18 = alloca i8
%19 = alloca i8
%20 = alloca i8
%21 = alloca i8
%22 = alloca i8
%23 = alloca i8
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store i32 0, i32* %14
%24 = load i32, i32* @O_RDWR
%25 = load i32, i32* @O_NOCTTY
%26 = or i32 %24, %25
%27 = load i32, i32* @O_NDELAY
%28 = or i32 %26, %27
%29 = call i32 @open(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0), i32 %28)
store i32 %29, i32* %15
%30 = load i32, i32* %15
%31 = icmp eq i32 %30, -1
br i1 %31, label %32, label %34
32: ; preds = %2
%33 = call i32 @perror(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.1, i64 0, i64 0))
br label %207
34: ; preds = %2
%35 = load i32, i32* @B9600
%36 = call i32 @cfsetospeed(%struct.termios* %16, i32 %35)
%37 = load i32, i32* @PARENB
%38 = xor i32 %37, -1
%39 = getelementptr inbounds %struct.termios, %struct.termios* %16, i32 0, i32 0
%40 = load i32, i32* %39
%41 = and i32 %40, %38
store i32 %41, i32* %39
%42 = load i32, i32* @CSTOPB
%43 = xor i32 %42, -1
%44 = getelementptr inbounds %struct.termios, %struct.termios* %16, i32 0, i32 0
%45 = load i32, i32* %44
%46 = and i32 %45, %43
store i32 %46, i32* %44
%47 = load i32, i32* @CSIZE
%48 = xor i32 %47, -1
%49 = getelementptr inbounds %struct.termios, %struct.termios* %16, i32 0, i32 0
%50 = load i32, i32* %49
%51 = and i32 %50, %48
store i32 %51, i32* %49
%52 = load i32, i32* @CS8
%53 = getelementptr inbounds %struct.termios, %struct.termios* %16, i32 0, i32 0
%54 = load i32, i32* %53
%55 = or i32 %54, %52
store i32 %55, i32* %53
%56 = call i32 @cfmakeraw(%struct.termios* %16)
%57 = load i32, i32* %15
%58 = load i32, i32* @TCSANOW
%59 = call i32 @tcsetattr(i32 %57, i32 %58, %struct.termios* %16)
%60 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.2, i64 0, i64 0))
br label %61
61: ; preds = %34, %72, %206
%62 = load i32, i32* %15
%63 = add nsw i32 %62, 1
store i32 %63, i32* %10
%64 = load i32, i32* %15
%65 = call i32 @FD_SET(i32 %64, i32* %11)
%66 = getelementptr inbounds %struct.timeval, %struct.timeval* %12, i32 0, i32 1
store i64 0, i64* %66
%67 = getelementptr inbounds %struct.timeval, %struct.timeval* %12, i32 0, i32 0
store i32 1, i32* %67
%68 = load i32, i32* %10
%69 = call i32 @select(i32 %68, i32* %11, i32* null, i32* null, %struct.timeval* %12)
store i32 %69, i32* %13
%70 = load i32, i32* %13
%71 = icmp eq i32 %70, 0
br i1 %71, label %72, label %73
72: ; preds = %61
br label %61
73: ; preds = %61
%74 = load i32, i32* %15
%75 = call i32 @read(i32 %74, i8* %6, i32 1)
store i32 %75, i32* %8
%76 = load i32, i32* %8
%77 = icmp sgt i32 %76, 0
br i1 %77, label %78, label %196
78: ; preds = %73
%79 = load i8, i8* %6
%80 = zext i8 %79 to i32
%81 = icmp eq i32 255, %80
br i1 %81, label %82, label %85
82: ; preds = %78
%83 = load i8, i8* %6
%84 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 0
store i8 %83, i8* %84
store i32 1, i32* %14
br label %195
85: ; preds = %78
%86 = load i8, i8* %6
%87 = load i32, i32* %14
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 %88
store i8 %86, i8* %89
%90 = load i32, i32* %14
%91 = add nsw i32 %90, 1
store i32 %91, i32* %14
%92 = load i32, i32* %14
%93 = icmp eq i32 %92, 24
br i1 %93, label %94, label %172
94: ; preds = %85
%95 = load i32, i32* %14
%96 = sub nsw i32 %95, 1
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 %97
%99 = load i8, i8* %98
%100 = zext i8 %99 to i32
%101 = icmp eq i32 %100, 254
br i1 %101, label %102, label %172
102: ; preds = %94
store i32 0, i32* %14
%103 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([79 x i8], [79 x i8]* @.str.3, i64 0, i64 0))
%104 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.4, i64 0, i64 0))
store i32 0, i32* %9
br label %105
105: ; preds = %115, %102
%106 = load i32, i32* %9
%107 = icmp slt i32 %106, 24
br i1 %107, label %108, label %118
108: ; preds = %105
%109 = load i32, i32* %9
%110 = sext i32 %109 to i64
%111 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 %110
%112 = load i8, i8* %111
%113 = zext i8 %112 to i32
%114 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %113)
br label %115
115: ; preds = %108
%116 = load i32, i32* %9
%117 = add nsw i32 %116, 1
store i32 %117, i32* %9
br label %105
118: ; preds = %105
%119 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.6, i64 0, i64 0))
%120 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.7, i64 0, i64 0))
%121 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 10
%122 = load i8, i8* %121
%123 = zext i8 %122 to i32
%124 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 11
%125 = load i8, i8* %124
%126 = zext i8 %125 to i32
%127 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 12
%128 = load i8, i8* %127
%129 = zext i8 %128 to i32
%130 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.8, i64 0, i64 0), i32 %123, i32 %126, i32 %129)
%131 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 13
%132 = load i8, i8* %131
store i8 %132, i8* %19
%133 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 14
%134 = load i8, i8* %133
store i8 %134, i8* %17
%135 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 15
%136 = load i8, i8* %135
store i8 %136, i8* %18
%137 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 16
%138 = load i8, i8* %137
%139 = zext i8 %138 to i32
%140 = and i32 %139, 63
%141 = trunc i32 %140 to i8
store i8 %141, i8* %23
%142 = load i8, i8* %17
%143 = zext i8 %142 to i32
%144 = and i32 %143, 192
%145 = sdiv i32 %144, 64
%146 = load i8, i8* %18
%147 = zext i8 %146 to i32
%148 = and i32 %147, 192
%149 = sdiv i32 %148, 16
%150 = add nsw i32 %145, %149
%151 = trunc i32 %150 to i8
store i8 %151, i8* %20
%152 = load i8, i8* %17
%153 = zext i8 %152 to i32
%154 = and i32 %153, 63
%155 = trunc i32 %154 to i8
store i8 %155, i8* %21
%156 = load i8, i8* %18
%157 = zext i8 %156 to i32
%158 = and i32 %157, 63
%159 = trunc i32 %158 to i8
store i8 %159, i8* %22
%160 = load i8, i8* %19
%161 = zext i8 %160 to i32
%162 = load i8, i8* %20
%163 = zext i8 %162 to i32
%164 = load i8, i8* %21
%165 = zext i8 %164 to i32
%166 = load i8, i8* %22
%167 = zext i8 %166 to i32
%168 = load i8, i8* %23
%169 = zext i8 %168 to i32
%170 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.9, i64 0, i64 0), i32 %161, i32 %163, i32 %165, i32 %167, i32 %169)
%171 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([80 x i8], [80 x i8]* @.str.10, i64 0, i64 0))
br label %194
172: ; preds = %94, %85
%173 = load i32, i32* %14
%174 = icmp eq i32 24, %173
br i1 %174, label %175, label %193
175: ; preds = %172
%176 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.11, i64 0, i64 0))
store i32 0, i32* %9
br label %177
177: ; preds = %188, %175
%178 = load i32, i32* %9
%179 = load i32, i32* %14
%180 = icmp slt i32 %178, %179
br i1 %180, label %181, label %191
181: ; preds = %177
%182 = load i32, i32* %9
%183 = sext i32 %182 to i64
%184 = getelementptr inbounds [24 x i8], [24 x i8]* %7, i64 0, i64 %183
%185 = load i8, i8* %184
%186 = zext i8 %185 to i32
%187 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %186)
br label %188
188: ; preds = %181
%189 = load i32, i32* %9
%190 = add nsw i32 %189, 1
store i32 %190, i32* %9
br label %177
191: ; preds = %177
%192 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.12, i64 0, i64 0))
store i32 0, i32* %14
br label %193
193: ; preds = %191, %172
br label %194
194: ; preds = %193, %118
br label %195
195: ; preds = %194, %82
br label %206
196: ; preds = %73
%197 = load i32, i32* %8
%198 = icmp eq i32 %197, 0
br i1 %198, label %199, label %201
199: ; preds = %196
%200 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.13, i64 0, i64 0))
br label %205
201: ; preds = %196
%202 = load i32, i32* %8
%203 = load i32, i32* @errno
%204 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([29 x i8], [29 x i8]* @.str.14, i64 0, i64 0), i32 %202, i32 %203)
br label %205
205: ; preds = %201, %199
br label %206
206: ; preds = %205, %195
br label %61
207: ; preds = %32
ret i32 0
}

LLVM IR (-O2):
%struct.timeval = type { i32, i64 }
%struct.termios = type { i32 }
@.str = [13 x i8] c"/dev/ttyUSB0\00"
@O_RDWR = global i32 0
@O_NOCTTY = global i32 0
@O_NDELAY = global i32 0
@.str.1 = [38 x i8] c"open_port:Unable to open /dev/ttyUSB0\00"
@B9600 = global i32 0
@PARENB = global i32 0
@CSTOPB = global i32 0
@CSIZE = global i32 0
@CS8 = global i32 0
@TCSANOW = global i32 0
@.str.4 = [25 x i8] c"\E6\8E\A5\E6\94\B6\E5\88\B024byte\E6\95\B0\E6\8D\AE\EF\BC\9A\00"
@.str.5 = [6 x i8] c"%02x \00"
@.str.8 = [45 x i8] c"\E9\AB\98\E5\8E\8B:%dmmHg\09 \E4\BD\8E\E5\8E\8B:%dmmHg\09 \E8\84\89\E6\90\8F:%d/min\0A\00"
@.str.9 = [56 x i8] c"\E6\B5\8B\E9\87\8F\E6\97\A5\E6\9C\9F:20%02d-%02d-%02d\09 \E6\B5\8B\E9\87\8F\E6\97\B6\E9\97\B4:%02d:%02d \0A\00"
@.str.11 = [16 x i8] c"\E6\97\A0\E6\95\88\E6\95\B0\E6\8D\AE\EF\BC\9A\00"
@.str.14 = [29 x i8] c"read returns -1, errno:%u \0A\00"
@errno = global i32 0
@str = [22 x i8] c"\E7\AB\AF\E5\8F\A3\E9\85\8D\E7\BD\AE\E5\AE\8C\E6\AF\95\EF\BC\81\00"
@str.15 = [16 x i8] c"read returns 0\00"
@str.16 = [78 x i8] c"\0A****************************************************************************\00"
@str.17 = [16 x i8] c"\E6\B5\8B\E9\87\8F\E7\BB\93\E6\9E\9C\EF\BC\9A\00"
@str.18 = [79 x i8] c"****************************************************************************\0A\0A\00"
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = alloca i8
%4 = alloca [24 x i8]
%5 = alloca i32
%6 = alloca %struct.timeval
%7 = alloca %struct.termios
%8 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 0
%9 = bitcast i32* %5 to i8*
%10 = bitcast %struct.timeval* %6 to i8*
%11 = load i32, i32* @O_RDWR
%12 = load i32, i32* @O_NOCTTY
%13 = or i32 %12, %11
%14 = load i32, i32* @O_NDELAY
%15 = or i32 %13, %14
%16 = tail call i32 @open(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0), i32 %15)
%17 = icmp eq i32 %16, -1
br i1 %17, label %18, label %20
18: ; preds = %2
%19 = tail call i32 @perror(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.1, i64 0, i64 0))
ret i32 0
20: ; preds = %2
%21 = bitcast %struct.termios* %7 to i8*
%22 = load i32, i32* @B9600
%23 = call i32 @cfsetospeed(%struct.termios* %7, i32 %22)
%24 = load i32, i32* @PARENB
%25 = getelementptr inbounds %struct.termios, %struct.termios* %7, i64 0, i32 0
%26 = load i32, i32* %25
%27 = load i32, i32* @CSTOPB
%28 = or i32 %24, %27
%29 = load i32, i32* @CSIZE
%30 = or i32 %28, %29
%31 = xor i32 %30, -1
%32 = and i32 %26, %31
%33 = load i32, i32* @CS8
%34 = or i32 %33, %32
store i32 %34, i32* %25
%35 = call i32 @cfmakeraw(%struct.termios* %7)
%36 = load i32, i32* @TCSANOW
%37 = call i32 @tcsetattr(i32 %16, i32 %36, %struct.termios* %7)
%38 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([22 x i8], [22 x i8]* @str, i64 0, i64 0))
%39 = add nuw nsw i32 %16, 1
%40 = getelementptr inbounds %struct.timeval, %struct.timeval* %6, i64 0, i32 1
%41 = getelementptr inbounds %struct.timeval, %struct.timeval* %6, i64 0, i32 0
%42 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 10
%43 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 11
%44 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 12
%45 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 13
%46 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 14
%47 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 15
%48 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 16
%49 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 1
%50 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 2
%51 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 3
%52 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 4
%53 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 5
%54 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 6
%55 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 7
%56 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 8
%57 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 9
%58 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 17
%59 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 18
%60 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 19
%61 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 20
%62 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 21
%63 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 22
%64 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 23
%65 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 1
%66 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 2
%67 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 3
%68 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 4
%69 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 5
%70 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 6
%71 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 7
%72 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 8
%73 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 9
%74 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 17
%75 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 18
%76 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 19
%77 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 20
%78 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 21
%79 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 22
%80 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 23
br label %81
81: ; preds = %95, %20
%82 = phi i32 [ 0, %20 ], [ %96, %95 ]
br label %83
83: ; preds = %286, %81
br label %84
84: ; preds = %83, %84
%85 = call i32 @FD_SET(i32 %16, i32* %5)
store i64 0, i64* %40
store i32 1, i32* %41
%86 = call i32 @select(i32 %39, i32* %5, i32* null, i32* null, %struct.timeval* %6)
%87 = icmp eq i32 %86, 0
br i1 %87, label %84, label %88
88: ; preds = %84
%89 = call i32 @read(i32 %16, i8* %3, i32 1)
%90 = icmp sgt i32 %89, 0
br i1 %90, label %91, label %282
91: ; preds = %88
%92 = load i8, i8* %3
%93 = icmp eq i8 %92, -1
br i1 %93, label %94, label %97
94: ; preds = %91
store i8 -1, i8* %8
br label %95
95: ; preds = %94, %104, %207, %206
%96 = phi i32 [ %100, %206 ], [ 0, %207 ], [ 0, %104 ], [ 1, %94 ]
br label %81
97: ; preds = %91
%98 = sext i32 %82 to i64
%99 = getelementptr inbounds [24 x i8], [24 x i8]* %4, i64 0, i64 %98
store i8 %92, i8* %99
%100 = add nsw i32 %82, 1
%101 = icmp eq i32 %100, 24
%102 = icmp eq i8 %92, -2
%103 = select i1 %101, i1 %102, i1 false
br i1 %103, label %104, label %206
104: ; preds = %97
%105 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([78 x i8], [78 x i8]* @str.16, i64 0, i64 0))
%106 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @.str.4, i64 0, i64 0))
%107 = load i8, i8* %8
%108 = zext i8 %107 to i32
%109 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %108)
%110 = load i8, i8* %65
%111 = zext i8 %110 to i32
%112 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %111)
%113 = load i8, i8* %66
%114 = zext i8 %113 to i32
%115 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %114)
%116 = load i8, i8* %67
%117 = zext i8 %116 to i32
%118 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %117)
%119 = load i8, i8* %68
%120 = zext i8 %119 to i32
%121 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %120)
%122 = load i8, i8* %69
%123 = zext i8 %122 to i32
%124 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %123)
%125 = load i8, i8* %70
%126 = zext i8 %125 to i32
%127 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %126)
%128 = load i8, i8* %71
%129 = zext i8 %128 to i32
%130 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %129)
%131 = load i8, i8* %72
%132 = zext i8 %131 to i32
%133 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %132)
%134 = load i8, i8* %73
%135 = zext i8 %134 to i32
%136 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %135)
%137 = load i8, i8* %42
%138 = zext i8 %137 to i32
%139 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %138)
%140 = load i8, i8* %43
%141 = zext i8 %140 to i32
%142 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %141)
%143 = load i8, i8* %44
%144 = zext i8 %143 to i32
%145 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %144)
%146 = load i8, i8* %45
%147 = zext i8 %146 to i32
%148 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %147)
%149 = load i8, i8* %46
%150 = zext i8 %149 to i32
%151 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %150)
%152 = load i8, i8* %47
%153 = zext i8 %152 to i32
%154 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %153)
%155 = load i8, i8* %48
%156 = zext i8 %155 to i32
%157 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %156)
%158 = load i8, i8* %74
%159 = zext i8 %158 to i32
%160 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %159)
%161 = load i8, i8* %75
%162 = zext i8 %161 to i32
%163 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %162)
%164 = load i8, i8* %76
%165 = zext i8 %164 to i32
%166 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %165)
%167 = load i8, i8* %77
%168 = zext i8 %167 to i32
%169 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %168)
%170 = load i8, i8* %78
%171 = zext i8 %170 to i32
%172 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %171)
%173 = load i8, i8* %79
%174 = zext i8 %173 to i32
%175 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %174)
%176 = load i8, i8* %80
%177 = zext i8 %176 to i32
%178 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %177)
%179 = call i32 @putchar(i32 10)
%180 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.17, i64 0, i64 0))
%181 = load i8, i8* %42
%182 = zext i8 %181 to i32
%183 = load i8, i8* %43
%184 = zext i8 %183 to i32
%185 = load i8, i8* %44
%186 = zext i8 %185 to i32
%187 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @.str.8, i64 0, i64 0), i32 %182, i32 %184, i32 %186)
%188 = load i8, i8* %45
%189 = load i8, i8* %46
%190 = load i8, i8* %47
%191 = load i8, i8* %48
%192 = and i8 %191, 63
%193 = lshr i8 %189, 6
%194 = lshr i8 %190, 4
%195 = and i8 %194, 12
%196 = or i8 %195, %193
%197 = and i8 %189, 63
%198 = and i8 %190, 63
%199 = zext i8 %188 to i32
%200 = zext i8 %196 to i32
%201 = zext i8 %197 to i32
%202 = zext i8 %198 to i32
%203 = zext i8 %192 to i32
%204 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([56 x i8], [56 x i8]* @.str.9, i64 0, i64 0), i32 %199, i32 %200, i32 %201, i32 %202, i32 %203)
%205 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([79 x i8], [79 x i8]* @str.18, i64 0, i64 0))
br label %95
206: ; preds = %97
br i1 %101, label %207, label %95
207: ; preds = %206
%208 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.11, i64 0, i64 0))
%209 = load i8, i8* %8
%210 = zext i8 %209 to i32
%211 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %210)
%212 = load i8, i8* %49
%213 = zext i8 %212 to i32
%214 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %213)
%215 = load i8, i8* %50
%216 = zext i8 %215 to i32
%217 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %216)
%218 = load i8, i8* %51
%219 = zext i8 %218 to i32
%220 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %219)
%221 = load i8, i8* %52
%222 = zext i8 %221 to i32
%223 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %222)
%224 = load i8, i8* %53
%225 = zext i8 %224 to i32
%226 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %225)
%227 = load i8, i8* %54
%228 = zext i8 %227 to i32
%229 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %228)
%230 = load i8, i8* %55
%231 = zext i8 %230 to i32
%232 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %231)
%233 = load i8, i8* %56
%234 = zext i8 %233 to i32
%235 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %234)
%236 = load i8, i8* %57
%237 = zext i8 %236 to i32
%238 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %237)
%239 = load i8, i8* %42
%240 = zext i8 %239 to i32
%241 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %240)
%242 = load i8, i8* %43
%243 = zext i8 %242 to i32
%244 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %243)
%245 = load i8, i8* %44
%246 = zext i8 %245 to i32
%247 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %246)
%248 = load i8, i8* %45
%249 = zext i8 %248 to i32
%250 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %249)
%251 = load i8, i8* %46
%252 = zext i8 %251 to i32
%253 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %252)
%254 = load i8, i8* %47
%255 = zext i8 %254 to i32
%256 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %255)
%257 = load i8, i8* %48
%258 = zext i8 %257 to i32
%259 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %258)
%260 = load i8, i8* %58
%261 = zext i8 %260 to i32
%262 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %261)
%263 = load i8, i8* %59
%264 = zext i8 %263 to i32
%265 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %264)
%266 = load i8, i8* %60
%267 = zext i8 %266 to i32
%268 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %267)
%269 = load i8, i8* %61
%270 = zext i8 %269 to i32
%271 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %270)
%272 = load i8, i8* %62
%273 = zext i8 %272 to i32
%274 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %273)
%275 = load i8, i8* %63
%276 = zext i8 %275 to i32
%277 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %276)
%278 = load i8, i8* %64
%279 = zext i8 %278 to i32
%280 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i64 0, i64 0), i32 %279)
%281 = call i32 @putchar(i32 13)
br label %95
282: ; preds = %88
%283 = icmp eq i32 %89, 0
br i1 %283, label %284, label %287
284: ; preds = %282
%285 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.15, i64 0, i64 0))
br label %286
286: ; preds = %284, %287
br label %83
287: ; preds = %282
%288 = load i32, i32* @errno
%289 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @.str.14, i64 0, i64 0), i32 %89, i32 %288)
br label %286
}