#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 */
char *MAP_FAILED;
int /*<<< orphan*/ MAP_PRIVATE;
int /*<<< orphan*/ MAP_SHARED;
int O_CREAT;
int O_RDWR;
int O_TRUNC;
int PROT_READ;
int PROT_WRITE;
int /*<<< orphan*/ SEEK_SET;
int atoi(char *);
int /*<<< orphan*/ close(int);
int /*<<< orphan*/ err(int, char *, ...);
int /*<<< orphan*/ exit(int /*<<< orphan*/);
int lseek(int, int, int /*<<< orphan*/);
char *mmap(int /*<<< orphan*/, int, int, int /*<<< orphan*/, int,
           int /*<<< orphan*/);
int munmap(char *, int);
int open(char *, int, int);
int /*<<< orphan*/ printf(char *);
int write(int, char *, int);
int main(int argc, char *argv[]) {
  char ch;
  char *map;
  int i, fd, ret, choice = 0;
  char *filename = "mmap-test.dat";
  if (argc == 2)
    choice = atoi(argv[1]);
  fd = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0600);
  if (fd == -1)
    err(1, "Error opening file %s for writing.", filename);
  ret = lseek(fd, 4978 - 1, SEEK_SET);
  if (ret == -1)
    err(1, "Error lseeking to the end of the file.");
  ch = 0x30;
  ret = write(fd, &ch, 1);
  if (ret != 1)
    err(1, "Error writing last byte of the file.");
  if (choice) {
    printf("Using shared mapping\n");
    map = mmap(0, 4978, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
  } else {
    printf("Using private mapping\n");
    map = mmap(0, 4978, PROT_READ | PROT_WRITE, MAP_PRIVATE, fd, 0);
  }
  if (map == MAP_FAILED)
    err(1, "Error mmapping the file.");
  for (i = 0; i < 4978; i++) {
    map[i] = (i % 10) + 0x30;
  }
  if (munmap(map, 4978) == -1)
    err(1, "Error un-mmapping the file.");
  close(fd);
  exit(0);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x30(%rbp)
lea    0xe3c(%rip),%rax
mov    %rax,-0x38(%rbp)
cmpl   $0x2,-0x8(%rbp)
jne    11e2 <main+0x42>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
call   10b0 <atoi@plt>
mov    %eax,-0x30(%rbp)
mov    -0x38(%rbp),%rdi
mov    0x2ddb(%rip),%rax
mov    (%rax),%esi
mov    0x2e02(%rip),%rax
or     (%rax),%esi
mov    0x2df1(%rip),%rax
or     (%rax),%esi
mov    $0x180,%edx
call   10a0 <open@plt>
mov    %eax,-0x28(%rbp)
cmpl   $0xffffffff,-0x28(%rbp)
jne    122f <main+0x8f>
mov    -0x38(%rbp),%rdx
mov    $0x1,%edi
lea    0xde6(%rip),%rsi
mov    $0x0,%al
call   1080 <err@plt>
mov    -0x28(%rbp),%edi
mov    0x2d7f(%rip),%rax
mov    (%rax),%edx
mov    $0x1371,%esi
call   1060 <lseek@plt>
mov    %eax,-0x2c(%rbp)
cmpl   $0xffffffff,-0x2c(%rbp)
jne    1265 <main+0xc5>
mov    $0x1,%edi
lea    0xdd3(%rip),%rsi
mov    $0x0,%al
call   1080 <err@plt>
movb   $0x30,-0x11(%rbp)
mov    -0x28(%rbp),%edi
lea    -0x11(%rbp),%rsi
mov    $0x1,%edx
call   1030 <write@plt>
mov    %eax,-0x2c(%rbp)
cmpl   $0x1,-0x2c(%rbp)
je     129a <main+0xfa>
mov    $0x1,%edi
lea    0xdc5(%rip),%rsi
mov    $0x0,%al
call   1080 <err@plt>
cmpl   $0x0,-0x30(%rbp)
je     12e8 <main+0x148>
lea    0xdd2(%rip),%rdi
call   1050 <printf@plt>
mov    0x2d31(%rip),%rax
mov    (%rax),%edx
mov    0x2cf0(%rip),%rax
or     (%rax),%edx
mov    0x2d0f(%rip),%rax
mov    (%rax),%ecx
mov    -0x28(%rbp),%r8d
xor    %r9d,%r9d
mov    $0x1372,%esi
mov    %r9d,%edi
call   1040 <mmap@plt>
mov    %rax,-0x20(%rbp)
jmp    1327 <main+0x187>
lea    0xda4(%rip),%rdi
call   1050 <printf@plt>
mov    0x2ced(%rip),%rax
mov    (%rax),%edx
mov    0x2cac(%rip),%rax
or     (%rax),%edx
mov    0x2c9b(%rip),%rax
mov    (%rax),%ecx
mov    -0x28(%rbp),%r8d
xor    %r9d,%r9d
mov    $0x1372,%esi
mov    %r9d,%edi
call   1040 <mmap@plt>
mov    %rax,-0x20(%rbp)
mov    -0x20(%rbp),%rax
mov    0x2c6e(%rip),%rcx
cmp    (%rcx),%rax
jne    134e <main+0x1ae>
mov    $0x1,%edi
lea    0xd63(%rip),%rsi
mov    $0x0,%al
call   1080 <err@plt>
movl   $0x0,-0x24(%rbp)
cmpl   $0x1372,-0x24(%rbp)
jge    1389 <main+0x1e9>
mov    -0x24(%rbp),%eax
mov    $0xa,%ecx
cltd
idiv   %ecx
add    $0x30,%edx
mov    -0x20(%rbp),%rax
movslq -0x24(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1355 <main+0x1b5>
mov    -0x20(%rbp),%rdi
mov    $0x1372,%esi
call   1090 <munmap@plt>
cmp    $0xffffffff,%eax
jne    13b3 <main+0x213>
mov    $0x1,%edi
lea    0xd17(%rip),%rsi
mov    $0x0,%al
call   1080 <err@plt>
mov    -0x28(%rbp),%edi
call   1070 <close@plt>
xor    %edi,%edi
call   10c0 <exit@plt>

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %rbx
push   %rax
xor    %ebx,%ebx
cmp    $0x2,%edi
jne    11b5 <main+0x15>
mov    0x8(%rsi),%rdi
call   10b0 <atoi@plt>
mov    %eax,%ebx
mov    0x2e0c(%rip),%rax
mov    0x2e35(%rip),%rcx
mov    (%rcx),%esi
or     (%rax),%esi
mov    0x2e22(%rip),%rax
or     (%rax),%esi
lea    0xe99(%rip),%rdi
mov    $0x180,%edx
call   10a0 <open@plt>
mov    %eax,%ebp
cmp    $0xffffffff,%eax
jne    1202 <main+0x62>
lea    0xe8f(%rip),%rsi
lea    0xe7a(%rip),%rdx
mov    $0x1,%edi
xor    %eax,%eax
call   1080 <err@plt>
mov    0x2daf(%rip),%rax
mov    (%rax),%edx
mov    %ebp,%edi
mov    $0x1371,%esi
call   1060 <lseek@plt>
cmp    $0xffffffff,%eax
jne    122f <main+0x8f>
lea    0xe7e(%rip),%rsi
mov    $0x1,%edi
xor    %eax,%eax
call   1080 <err@plt>
movb   $0x30,0x7(%rsp)
lea    0x7(%rsp),%rsi
mov    %ebp,%edi
mov    $0x1,%edx
call   1040 <write@plt>
cmp    $0x1,%eax
je     125d <main+0xbd>
lea    0xe77(%rip),%rsi
mov    $0x1,%edi
xor    %eax,%eax
call   1080 <err@plt>
test   %ebx,%ebx
lea    0xebc(%rip),%rax
lea    0xecb(%rip),%rdi
cmove  %rax,%rdi
mov    0x2d60(%rip),%rbx
cmove  0x2d28(%rip),%rbx
call   1030 <puts@plt>
mov    0x2d5c(%rip),%rax
mov    0x2d1d(%rip),%rcx
mov    (%rcx),%edx
or     (%rax),%edx
mov    (%rbx),%ecx
xor    %edi,%edi
mov    $0x1372,%esi
mov    %ebp,%r8d
xor    %r9d,%r9d
call   1050 <mmap@plt>
mov    %rax,%rbx
mov    0x2ceb(%rip),%rax
cmp    (%rax),%rbx
jne    12cd <main+0x12d>
lea    0xe2c(%rip),%rsi
mov    $0x1,%edi
xor    %eax,%eax
call   1080 <err@plt>
movdqa 0xd2b(%rip),%xmm5
movdqa 0xd33(%rip),%xmm4
mov    $0x10,%eax
movdqa 0xd36(%rip),%xmm2
movdqa 0xd3e(%rip),%xmm3
movdqa 0xd45(%rip),%xmm8
movdqa 0xd4c(%rip),%xmm9
movdqa 0xd54(%rip),%xmm6
nopl   0x0(%rax)
movdqa %xmm4,%xmm7
pmulhuw %xmm2,%xmm7
psrlw  $0x3,%xmm7
pmullw %xmm3,%xmm7
movdqa %xmm4,%xmm1
psubw  %xmm7,%xmm1
movdqa %xmm5,%xmm7
pmulhuw %xmm2,%xmm7
psrlw  $0x3,%xmm7
pmullw %xmm3,%xmm7
movdqa %xmm5,%xmm0
psubw  %xmm7,%xmm0
packuswb %xmm0,%xmm1
por    %xmm8,%xmm1
movdqu %xmm1,-0x10(%rbx,%rax,1)
cmp    $0x1370,%rax
je     13b4 <main+0x214>
movdqa %xmm5,%xmm0
paddw  %xmm9,%xmm0
movdqa %xmm4,%xmm1
paddw  %xmm9,%xmm1
movdqa %xmm1,%xmm7
pmulhuw %xmm2,%xmm7
psrlw  $0x3,%xmm7
pmullw %xmm3,%xmm7
psubw  %xmm7,%xmm1
movdqa %xmm0,%xmm7
pmulhuw %xmm2,%xmm7
psrlw  $0x3,%xmm7
pmullw %xmm3,%xmm7
psubw  %xmm7,%xmm0
packuswb %xmm0,%xmm1
por    %xmm8,%xmm1
movdqu %xmm1,(%rbx,%rax,1)
paddw  %xmm6,%xmm4
paddw  %xmm6,%xmm5
add    $0x20,%rax
jmp    1310 <main+0x170>
movw   $0x3736,0x1370(%rbx)
36 37
mov    %rbx,%rdi
mov    $0x1372,%esi
call   1090 <munmap@plt>
cmp    $0xffffffff,%eax
jne    13e2 <main+0x242>
lea    0xd30(%rip),%rsi
mov    $0x1,%edi
xor    %eax,%eax
call   1080 <err@plt>
mov    %ebp,%edi
call   1070 <close@plt>
xor    %edi,%edi
call   10c0 <exit@plt>

LLVM IR (-O0):
@.str = [14 x i8] c"mmap-test.dat\00"
@O_RDWR = global i32 0
@O_CREAT = global i32 0
@O_TRUNC = global i32 0
@.str.1 = [35 x i8] c"Error opening file %s for writing.\00"
@SEEK_SET = global i32 0
@.str.2 = [39 x i8] c"Error lseeking to the end of the file.\00"
@.str.3 = [37 x i8] c"Error writing last byte of the file.\00"
@.str.4 = [22 x i8] c"Using shared mapping\0A\00"
@PROT_READ = global i32 0
@PROT_WRITE = global i32 0
@MAP_SHARED = global i32 0
@.str.5 = [23 x i8] c"Using private mapping\0A\00"
@MAP_PRIVATE = global i32 0
@MAP_FAILED = global i8* null
@.str.6 = [25 x i8] c"Error mmapping the file.\00"
@.str.7 = [28 x i8] c"Error un-mmapping the file.\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i8
%7 = alloca i8*
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i8*
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store i32 0, i32* %11
store i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i64 0, i64 0), i8** %12
%13 = load i32, i32* %4
%14 = icmp eq i32 %13, 2
br i1 %14, label %15, label %20
15: ; preds = %2
%16 = load i8**, i8*** %5
%17 = getelementptr inbounds i8*, i8** %16, i64 1
%18 = load i8*, i8** %17
%19 = call i32 @atoi(i8* %18)
store i32 %19, i32* %11
br label %20
20: ; preds = %15, %2
%21 = load i8*, i8** %12
%22 = load i32, i32* @O_RDWR
%23 = load i32, i32* @O_CREAT
%24 = or i32 %22, %23
%25 = load i32, i32* @O_TRUNC
%26 = or i32 %24, %25
%27 = call i32 @open(i8* %21, i32 %26, i32 384)
store i32 %27, i32* %9
%28 = load i32, i32* %9
%29 = icmp eq i32 %28, -1
br i1 %29, label %30, label %33
30: ; preds = %20
%31 = load i8*, i8** %12
%32 = call i32 (i32, i8*, ...) @err(i32 1, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0), i8* %31)
br label %33
33: ; preds = %30, %20
%34 = load i32, i32* %9
%35 = load i32, i32* @SEEK_SET
%36 = call i32 @lseek(i32 %34, i32 4977, i32 %35)
store i32 %36, i32* %10
%37 = load i32, i32* %10
%38 = icmp eq i32 %37, -1
br i1 %38, label %39, label %41
39: ; preds = %33
%40 = call i32 (i32, i8*, ...) @err(i32 1, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.2, i64 0, i64 0))
br label %41
41: ; preds = %39, %33
store i8 48, i8* %6
%42 = load i32, i32* %9
%43 = call i32 @write(i32 %42, i8* %6, i32 1)
store i32 %43, i32* %10
%44 = load i32, i32* %10
%45 = icmp ne i32 %44, 1
br i1 %45, label %46, label %48
46: ; preds = %41
%47 = call i32 (i32, i8*, ...) @err(i32 1, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.3, i64 0, i64 0))
br label %48
48: ; preds = %46, %41
%49 = load i32, i32* %11
%50 = icmp ne i32 %49, 0
br i1 %50, label %51, label %59
51: ; preds = %48
%52 = call i32 @printf(i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.4, i64 0, i64 0))
%53 = load i32, i32* @PROT_READ
%54 = load i32, i32* @PROT_WRITE
%55 = or i32 %53, %54
%56 = load i32, i32* @MAP_SHARED
%57 = load i32, i32* %9
%58 = call i8* @mmap(i32 0, i32 4978, i32 %55, i32 %56, i32 %57, i32 0)
store i8* %58, i8** %7
br label %67
59: ; preds = %48
%60 = call i32 @printf(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.5, i64 0, i64 0))
%61 = load i32, i32* @PROT_READ
%62 = load i32, i32* @PROT_WRITE
%63 = or i32 %61, %62
%64 = load i32, i32* @MAP_PRIVATE
%65 = load i32, i32* %9
%66 = call i8* @mmap(i32 0, i32 4978, i32 %63, i32 %64, i32 %65, i32 0)
store i8* %66, i8** %7
br label %67
67: ; preds = %59, %51
%68 = load i8*, i8** %7
%69 = load i8*, i8** @MAP_FAILED
%70 = icmp eq i8* %68, %69
br i1 %70, label %71, label %73
71: ; preds = %67
%72 = call i32 (i32, i8*, ...) @err(i32 1, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0))
br label %73
73: ; preds = %71, %67
store i32 0, i32* %8
br label %74
74: ; preds = %86, %73
%75 = load i32, i32* %8
%76 = icmp slt i32 %75, 4978
br i1 %76, label %77, label %89
77: ; preds = %74
%78 = load i32, i32* %8
%79 = srem i32 %78, 10
%80 = add nsw i32 %79, 48
%81 = trunc i32 %80 to i8
%82 = load i8*, i8** %7
%83 = load i32, i32* %8
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds i8, i8* %82, i64 %84
store i8 %81, i8* %85
br label %86
86: ; preds = %77
%87 = load i32, i32* %8
%88 = add nsw i32 %87, 1
store i32 %88, i32* %8
br label %74
89: ; preds = %74
%90 = load i8*, i8** %7
%91 = call i32 @munmap(i8* %90, i32 4978)
%92 = icmp eq i32 %91, -1
br i1 %92, label %93, label %95
93: ; preds = %89
%94 = call i32 (i32, i8*, ...) @err(i32 1, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0))
br label %95
95: ; preds = %93, %89
%96 = load i32, i32* %9
%97 = call i32 @close(i32 %96)
%98 = call i32 @exit(i32 0)
unreachable
}

LLVM IR (-O2):
@.str = [14 x i8] c"mmap-test.dat\00"
@O_RDWR = global i32 0
@O_CREAT = global i32 0
@O_TRUNC = global i32 0
@.str.1 = [35 x i8] c"Error opening file %s for writing.\00"
@SEEK_SET = global i32 0
@.str.2 = [39 x i8] c"Error lseeking to the end of the file.\00"
@.str.3 = [37 x i8] c"Error writing last byte of the file.\00"
@PROT_READ = global i32 0
@PROT_WRITE = global i32 0
@MAP_SHARED = global i32 0
@MAP_PRIVATE = global i32 0
@MAP_FAILED = global i8* null
@.str.6 = [25 x i8] c"Error mmapping the file.\00"
@.str.7 = [28 x i8] c"Error un-mmapping the file.\00"
@str = [22 x i8] c"Using private mapping\00"
@str.8 = [21 x i8] c"Using shared mapping\00"
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = alloca i8
%4 = icmp eq i32 %0, 2
br i1 %4, label %5, label %9
5: ; preds = %2
%6 = getelementptr inbounds i8*, i8** %1, i64 1
%7 = load i8*, i8** %6
%8 = tail call i32 @atoi(i8* %7)
br label %9
9: ; preds = %5, %2
%10 = phi i32 [ %8, %5 ], [ 0, %2 ]
%11 = load i32, i32* @O_RDWR
%12 = load i32, i32* @O_CREAT
%13 = or i32 %12, %11
%14 = load i32, i32* @O_TRUNC
%15 = or i32 %13, %14
%16 = tail call i32 @open(i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i64 0, i64 0), i32 %15, i32 384)
%17 = icmp eq i32 %16, -1
br i1 %17, label %18, label %20
18: ; preds = %9
%19 = tail call i32 (i32, i8*, ...) @err(i32 1, i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.1, i64 0, i64 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str, i64 0, i64 0))
br label %20
20: ; preds = %18, %9
%21 = load i32, i32* @SEEK_SET
%22 = tail call i32 @lseek(i32 %16, i32 4977, i32 %21)
%23 = icmp eq i32 %22, -1
br i1 %23, label %24, label %26
24: ; preds = %20
%25 = tail call i32 (i32, i8*, ...) @err(i32 1, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.2, i64 0, i64 0))
br label %26
26: ; preds = %24, %20
store i8 48, i8* %3
%27 = call i32 @write(i32 %16, i8* %3, i32 1)
%28 = icmp eq i32 %27, 1
br i1 %28, label %31, label %29
29: ; preds = %26
%30 = tail call i32 (i32, i8*, ...) @err(i32 1, i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.3, i64 0, i64 0))
br label %31
31: ; preds = %29, %26
%32 = icmp eq i32 %10, 0
%33 = select i1 %32, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @str, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @str.8, i64 0, i64 0)
%34 = tail call i32 @puts(i8* dereferenceable(1) %33)
%35 = load i32, i32* @PROT_READ
%36 = load i32, i32* @PROT_WRITE
%37 = or i32 %36, %35
%38 = load i32, i32* @MAP_PRIVATE
%39 = load i32, i32* @MAP_SHARED
%40 = select i1 %32, i32 %38, i32 %39
%41 = tail call i8* @mmap(i32 0, i32 4978, i32 %37, i32 %40, i32 %16, i32 0)
%42 = load i8*, i8** @MAP_FAILED
%43 = icmp eq i8* %41, %42
br i1 %43, label %44, label %46
44: ; preds = %31
%45 = tail call i32 (i32, i8*, ...) @err(i32 1, i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.6, i64 0, i64 0))
br label %46
46: ; preds = %31, %44
br label %47
47: ; preds = %57, %46
%48 = phi i64 [ 0, %46 ], [ %64, %57 ]
%49 = phi <16 x i16> [ <i16 0, i16 1, i16 2, i16 3, i16 4, i16 5, i16 6, i16 7, i16 8, i16 9, i16 10, i16 11, i16 12, i16 13, i16 14, i16 15>, %46 ], [ %65, %57 ]
%50 = urem <16 x i16> %49, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
%51 = trunc <16 x i16> %50 to <16 x i8>
%52 = or <16 x i8> %51, <i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48>
%53 = getelementptr inbounds i8, i8* %41, i64 %48
%54 = bitcast i8* %53 to <16 x i8>*
store <16 x i8> %52, <16 x i8>* %54
%55 = or i64 %48, 16
%56 = icmp eq i64 %55, 4976
br i1 %56, label %66, label %57
57: ; preds = %47
%58 = add <16 x i16> %49, <i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16, i16 16>
%59 = urem <16 x i16> %58, <i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10, i16 10>
%60 = trunc <16 x i16> %59 to <16 x i8>
%61 = or <16 x i8> %60, <i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48, i8 48>
%62 = getelementptr inbounds i8, i8* %41, i64 %55
%63 = bitcast i8* %62 to <16 x i8>*
store <16 x i8> %61, <16 x i8>* %63
%64 = add nuw nsw i64 %48, 32
%65 = add <16 x i16> %49, <i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32, i16 32>
br label %47
66: ; preds = %47
%67 = getelementptr inbounds i8, i8* %41, i64 4976
store i8 54, i8* %67
%68 = getelementptr inbounds i8, i8* %41, i64 4977
store i8 55, i8* %68
%69 = tail call i32 @munmap(i8* %41, i32 4978)
%70 = icmp eq i32 %69, -1
br i1 %70, label %71, label %73
71: ; preds = %66
%72 = tail call i32 (i32, i8*, ...) @err(i32 1, i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.7, i64 0, i64 0))
br label %73
73: ; preds = %71, %66
%74 = tail call i32 @close(i32 %16)
%75 = tail call i32 @exit(i32 0)
unreachable
}