#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
char *fgets(char *, int, int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ perror(char *);
int /*<<< orphan*/ printf(char *, int);
int /*<<< orphan*/ remove(char *);
scalar_t__ strncmp(char const *, char *, int);
scalar_t__ system(char *);
int top_mem_free() {
  FILE *memfile;
  char temp[150];
  char *temp1;
  int maxlength;
  int freefound = 0;
  int start = 0;
  int end = 0;
  int i, ii;
  int value = 0;
  if (system("top >mem.txt") != 0) {
    perror("Error executing top command");
    return 0;
  }
  memfile = fopen("mem.txt", "r");
  do {
    temp1 = fgets(temp, 150, memfile);
    if (temp1) {
      i = 0;
      while (temp[i] != '\0')
        i++;
      maxlength = i;
      if ((strncmp((const char *)temp, "Memory", 6)) == 0) {
        i = 6;
        while (i < maxlength - 5 && !freefound) {
          temp1 = &(temp[i]);
          if (strncmp((const char *)temp1, "free", 4) == 0)
            freefound = 1;
          else
            i++;
        }
        ii = 0;
        while (i - ii > 0 && temp[i - ii] > '9' || temp[i - ii] < '0')
          ii++;
        end = i - ii;
        while (i - ii > 0 && temp[i - ii] <= '9' && temp[i - ii] >= '0')
          ii++;
        start = i - ii + 1;
        value = 0;
        for (i = start; i <= end; i++) {
          value = temp[i] - 48 + value * 10;
        }
      }
    }
  } while (temp1 != NULL && !freefound);
  printf("value=%d\n", value);
  remove("mem.txt");
  return value;
}


x86 assembly (clang, -O0):
<top_mem_free>:
push   %rbp
mov    %rsp,%rbp
sub    $0xe0,%rsp
movl   $0x0,-0xc0(%rbp)
movl   $0x0,-0xc4(%rbp)
movl   $0x0,-0xc8(%rbp)
movl   $0x0,-0xd4(%rbp)
lea    0xe56(%rip),%rdi
call   1050 <system@plt>
cmp    $0x0,%rax
je     11d1 <top_mem_free+0x61>
lea    0xe4d(%rip),%rdi
call   1090 <perror@plt>
movl   $0x0,-0x4(%rbp)
jmp    152d <top_mem_free+0x3bd>
lea    0xe2d(%rip),%rdi
lea    0xe4a(%rip),%rsi
call   1080 <fopen@plt>
mov    %rax,-0x10(%rbp)
lea    -0xb0(%rbp),%rdi
mov    -0x10(%rbp),%rdx
mov    $0x96,%esi
call   1070 <fgets@plt>
mov    %rax,-0xb8(%rbp)
cmpq   $0x0,-0xb8(%rbp)
je     14cb <top_mem_free+0x35b>
movl   $0x0,-0xcc(%rbp)
movslq -0xcc(%rbp),%rax
movsbl -0xb0(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
je     1248 <top_mem_free+0xd8>
mov    -0xcc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xcc(%rbp)
jmp    121c <top_mem_free+0xac>
mov    -0xcc(%rbp),%eax
mov    %eax,-0xbc(%rbp)
lea    -0xb0(%rbp),%rdi
lea    0xdc9(%rip),%rsi
mov    $0x6,%edx
call   1040 <strncmp@plt>
cmp    $0x0,%rax
jne    14c6 <top_mem_free+0x356>
movl   $0x6,-0xcc(%rbp)
mov    -0xcc(%rbp),%ecx
mov    -0xbc(%rbp),%edx
sub    $0x5,%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0xd5(%rbp)
jge    12b1 <top_mem_free+0x141>
cmpl   $0x0,-0xc0(%rbp)
setne  %al
xor    $0xff,%al
mov    %al,-0xd5(%rbp)
mov    -0xd5(%rbp),%al
test   $0x1,%al
jne    12c4 <top_mem_free+0x154>
jmp    1321 <top_mem_free+0x1b1>
movslq -0xcc(%rbp),%rcx
lea    -0xb0(%rbp),%rax
add    %rcx,%rax
mov    %rax,-0xb8(%rbp)
mov    -0xb8(%rbp),%rdi
lea    0xd48(%rip),%rsi
mov    $0x4,%edx
call   1040 <strncmp@plt>
cmp    $0x0,%rax
jne    130d <top_mem_free+0x19d>
movl   $0x1,-0xc0(%rbp)
jmp    131c <top_mem_free+0x1ac>
mov    -0xcc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xcc(%rbp)
jmp    1280 <top_mem_free+0x110>
movl   $0x0,-0xd0(%rbp)
mov    -0xcc(%rbp),%eax
sub    -0xd0(%rbp),%eax
cmp    $0x0,%eax
jle    1367 <top_mem_free+0x1f7>
mov    -0xcc(%rbp),%eax
sub    -0xd0(%rbp),%eax
cltq
movsbl -0xb0(%rbp,%rax,1),%ecx
ff
mov    $0x1,%al
cmp    $0x39,%ecx
mov    %al,-0xd6(%rbp)
jg     1389 <top_mem_free+0x219>
mov    -0xcc(%rbp),%eax
sub    -0xd0(%rbp),%eax
cltq
movsbl -0xb0(%rbp,%rax,1),%eax
ff
cmp    $0x30,%eax
setl   %al
mov    %al,-0xd6(%rbp)
mov    -0xd6(%rbp),%al
test   $0x1,%al
jne    139c <top_mem_free+0x22c>
jmp    13b0 <top_mem_free+0x240>
mov    -0xd0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd0(%rbp)
jmp    132b <top_mem_free+0x1bb>
mov    -0xcc(%rbp),%eax
sub    -0xd0(%rbp),%eax
mov    %eax,-0xc8(%rbp)
mov    -0xcc(%rbp),%ecx
sub    -0xd0(%rbp),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0xd7(%rbp)
jle    1428 <top_mem_free+0x2b8>
mov    -0xcc(%rbp),%eax
sub    -0xd0(%rbp),%eax
cltq
movsbl -0xb0(%rbp,%rax,1),%ecx
ff
xor    %eax,%eax
cmp    $0x39,%ecx
mov    %al,-0xd7(%rbp)
jg     1428 <top_mem_free+0x2b8>
mov    -0xcc(%rbp),%eax
sub    -0xd0(%rbp),%eax
cltq
movsbl -0xb0(%rbp,%rax,1),%eax
ff
cmp    $0x30,%eax
setge  %al
mov    %al,-0xd7(%rbp)
mov    -0xd7(%rbp),%al
test   $0x1,%al
jne    143b <top_mem_free+0x2cb>
jmp    144f <top_mem_free+0x2df>
mov    -0xd0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xd0(%rbp)
jmp    13c2 <top_mem_free+0x252>
mov    -0xcc(%rbp),%eax
sub    -0xd0(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xc4(%rbp)
movl   $0x0,-0xd4(%rbp)
mov    -0xc4(%rbp),%eax
mov    %eax,-0xcc(%rbp)
mov    -0xcc(%rbp),%eax
cmp    -0xc8(%rbp),%eax
jg     14c1 <top_mem_free+0x351>
movslq -0xcc(%rbp),%rax
movsbl -0xb0(%rbp,%rax,1),%eax
ff
sub    $0x30,%eax
imul   $0xa,-0xd4(%rbp),%ecx
add    %ecx,%eax
mov    %eax,-0xd4(%rbp)
mov    -0xcc(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0xcc(%rbp)
jmp    147a <top_mem_free+0x30a>
jmp    14c6 <top_mem_free+0x356>
jmp    14cb <top_mem_free+0x35b>
jmp    14d0 <top_mem_free+0x360>
xor    %eax,%eax
cmpq   $0x0,-0xb8(%rbp)
mov    %al,-0xd8(%rbp)
je     14f8 <top_mem_free+0x388>
cmpl   $0x0,-0xc0(%rbp)
setne  %al
xor    $0xff,%al
mov    %al,-0xd8(%rbp)
mov    -0xd8(%rbp),%al
test   $0x1,%al
jne    11e8 <top_mem_free+0x78>
mov    -0xd4(%rbp),%esi
lea    0xb24(%rip),%rdi
call   1060 <printf@plt>
lea    0xae6(%rip),%rdi
call   1030 <remove@plt>
mov    -0xd4(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xe0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<top_mem_free>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0xa8,%rsp
lea    0xe78(%rip),%rdi
call   1050 <system@plt>
test   %rax,%rax
jne    13d9 <top_mem_free+0x269>
lea    0xe68(%rip),%rdi
lea    0xe85(%rip),%rsi
call   1080 <fopen@plt>
mov    %rax,0x8(%rsp)
xor    %ebx,%ebx
lea    0x10(%rsp),%r12
lea    0xe76(%rip),%r13
movabs $0xffffffff00000000,%r14
ff ff ff
jmp    11d9 <top_mem_free+0x69>
nopl   0x0(%rax,%rax,1)
test   %r8d,%r8d
jne    13ab <top_mem_free+0x23b>
mov    %r12,%rdi
mov    $0x96,%esi
mov    0x8(%rsp),%rdx
call   1070 <fgets@plt>
test   %rax,%rax
je     13ab <top_mem_free+0x23b>
mov    $0xffffffff,%r15d
mov    %r12,%rax
nopl   (%rax)
add    $0x1,%r15d
cmpb   $0x0,(%rax)
lea    0x1(%rax),%rax
jne    1200 <top_mem_free+0x90>
mov    %r12,%rdi
lea    0xe14(%rip),%rsi
mov    $0x6,%edx
call   1040 <strncmp@plt>
xor    %r8d,%r8d
test   %rax,%rax
jne    11d0 <top_mem_free+0x60>
cmp    $0xc,%r15d
jb     1274 <top_mem_free+0x104>
add    $0xfffffffb,%r15d
mov    $0x6,%ebx
nopl   0x0(%rax,%rax,1)
mov    %ebx,%eax
lea    (%rsp,%rax,1),%rdi
add    $0x10,%rdi
mov    %r13,%rsi
mov    $0x4,%edx
call   1040 <strncmp@plt>
cmp    $0x1,%rax
sbb    $0xffffffff,%ebx
cmp    %r15d,%ebx
jge    1268 <top_mem_free+0xf8>
test   %rax,%rax
jne    1240 <top_mem_free+0xd0>
xor    %r8d,%r8d
test   %rax,%rax
sete   %r8b
jmp    127c <top_mem_free+0x10c>
mov    $0x6,%ebx
xor    %r8d,%r8d
movslq %ebx,%rax
mov    %rax,%rdi
shl    $0x20,%rdi
mov    %ebx,%edx
mov    %rax,%rsi
xor    %ecx,%ecx
jmp    12a7 <top_mem_free+0x137>
nop
cmpb   $0x30,0x10(%rsp,%rsi,1)
jge    12c0 <top_mem_free+0x150>
add    $0x1,%rcx
add    %r14,%rdi
add    $0xffffffffffffffff,%rsi
add    $0xffffffff,%edx
add    $0x3,%al
test   %rsi,%rsi
jle    1290 <top_mem_free+0x120>
mov    %esi,%ebp
cmpb   $0x39,0x10(%rsp,%rbp,1)
jle    1290 <top_mem_free+0x120>
jmp    1297 <top_mem_free+0x127>
nopw   0x0(%rax,%rax,1)
mov    %ebx,%esi
sub    %rcx,%rsi
mov    %edx,%ecx
test   %esi,%esi
jle    12e8 <top_mem_free+0x178>
nopl   0x0(%rax,%rax,1)
mov    %ecx,%ebp
movzbl 0x10(%rsp,%rbp,1),%ebx
add    $0xd0,%bl
cmp    $0xa,%bl
jae    12ea <top_mem_free+0x17a>
add    $0xffffffff,%ecx
jne    12d0 <top_mem_free+0x160>
xor    %ecx,%ecx
jmp    12ea <top_mem_free+0x17a>
mov    %esi,%ecx
xor    %ebx,%ebx
cmp    %esi,%ecx
jge    11d0 <top_mem_free+0x60>
movslq %ecx,%rsi
sar    $0x20,%rdi
mov    %rdi,%r9
sub    %rsi,%r9
mov    %rsi,%r10
not    %r10
add    %r10,%rdi
xor    %ebx,%ebx
cmp    $0x3,%rdi
jb     136c <top_mem_free+0x1fc>
movslq %edx,%rdx
add    %r10,%rdx
add    $0x1,%rdx
and    $0xfffffffffffffffc,%rdx
xor    %ebx,%ebx
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movsbl 0x11(%rsp,%rsi,1),%edi
lea    (%rbx,%rbx,4),%ebp
lea    (%rdi,%rbp,2),%edi
lea    (%rdi,%rdi,4),%edi
movsbl 0x12(%rsp,%rsi,1),%ebp
lea    0x0(%rbp,%rdi,2),%edi
lea    (%rdi,%rdi,4),%edi
movsbl 0x13(%rsp,%rsi,1),%ebp
lea    0x0(%rbp,%rdi,2),%edi
lea    (%rdi,%rdi,4),%edi
movsbl 0x14(%rsp,%rsi,1),%ebp
add    $0x4,%rsi
lea    -0xd050(%rbp,%rdi,2),%ebx
add    $0xfffffffffffffffc,%rdx
jne    1330 <top_mem_free+0x1c0>
test   $0x3,%r9b
je     11d0 <top_mem_free+0x60>
lea    0x11(%rsp),%rdx
add    %rdx,%rsi
sub    %cl,%al
movzbl %al,%eax
and    $0x3,%eax
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
movsbl (%rsi,%rcx,1),%edx
lea    (%rbx,%rbx,4),%edi
lea    (%rdx,%rdi,2),%ebx
add    $0xffffffd0,%ebx
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1390 <top_mem_free+0x220>
jmp    11d0 <top_mem_free+0x60>
lea    0xc85(%rip),%rdi
mov    %ebx,%esi
call   1060 <printf@plt>
lea    0xc45(%rip),%rdi
call   1030 <remove@plt>
mov    %ebx,%eax
add    $0xa8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
lea    0xc2d(%rip),%rdi
call   1090 <perror@plt>
xor    %ebx,%ebx
jmp    13c5 <top_mem_free+0x255>

LLVM IR (-O0):
@.str = [13 x i8] c"top >mem.txt\00"
@.str.1 = [28 x i8] c"Error executing top command\00"
@.str.2 = [8 x i8] c"mem.txt\00"
@.str.3 = [2 x i8] c"r\00"
@.str.4 = [7 x i8] c"Memory\00"
@.str.5 = [5 x i8] c"free\00"
@.str.6 = [10 x i8] c"value=%d\0A\00"
define i32 @top_mem_free() {
%1 = alloca i32
%2 = alloca i32*
%3 = alloca [150 x i8]
%4 = alloca i8*
%5 = alloca i32
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
store i32 0, i32* %6
store i32 0, i32* %7
store i32 0, i32* %8
store i32 0, i32* %11
%12 = call i64 @system(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0))
%13 = icmp ne i64 %12, 0
br i1 %13, label %14, label %16
14: ; preds = %0
%15 = call i32 @perror(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.1, i64 0, i64 0))
store i32 0, i32* %1
br label %165
16: ; preds = %0
%17 = call i32* @fopen(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
store i32* %17, i32** %2
br label %18
18: ; preds = %158, %16
%19 = getelementptr inbounds [150 x i8], [150 x i8]* %3, i64 0, i64 0
%20 = load i32*, i32** %2
%21 = call i8* @fgets(i8* %19, i32 150, i32* %20)
store i8* %21, i8** %4
%22 = load i8*, i8** %4
%23 = icmp ne i8* %22, null
br i1 %23, label %24, label %150
24: ; preds = %18
store i32 0, i32* %9
br label %25
25: ; preds = %32, %24
%26 = load i32, i32* %9
%27 = sext i32 %26 to i64
%28 = getelementptr inbounds [150 x i8], [150 x i8]* %3, i64 0, i64 %27
%29 = load i8, i8* %28
%30 = sext i8 %29 to i32
%31 = icmp ne i32 %30, 0
br i1 %31, label %32, label %35
32: ; preds = %25
%33 = load i32, i32* %9
%34 = add nsw i32 %33, 1
store i32 %34, i32* %9
br label %25
35: ; preds = %25
%36 = load i32, i32* %9
store i32 %36, i32* %5
%37 = getelementptr inbounds [150 x i8], [150 x i8]* %3, i64 0, i64 0
%38 = call i64 @strncmp(i8* %37, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i32 6)
%39 = icmp eq i64 %38, 0
br i1 %39, label %40, label %149
40: ; preds = %35
store i32 6, i32* %9
br label %41
41: ; preds = %63, %40
%42 = load i32, i32* %9
%43 = load i32, i32* %5
%44 = sub nsw i32 %43, 5
%45 = icmp slt i32 %42, %44
br i1 %45, label %46, label %50
46: ; preds = %41
%47 = load i32, i32* %6
%48 = icmp ne i32 %47, 0
%49 = xor i1 %48, true
br label %50
50: ; preds = %46, %41
%51 = phi i1 [ false, %41 ], [ %49, %46 ]
br i1 %51, label %52, label %64
52: ; preds = %50
%53 = load i32, i32* %9
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [150 x i8], [150 x i8]* %3, i64 0, i64 %54
store i8* %55, i8** %4
%56 = load i8*, i8** %4
%57 = call i64 @strncmp(i8* %56, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), i32 4)
%58 = icmp eq i64 %57, 0
br i1 %58, label %59, label %60
59: ; preds = %52
store i32 1, i32* %6
br label %63
60: ; preds = %52
%61 = load i32, i32* %9
%62 = add nsw i32 %61, 1
store i32 %62, i32* %9
br label %63
63: ; preds = %60, %59
br label %41
64: ; preds = %50
store i32 0, i32* %10
br label %65
65: ; preds = %90, %64
%66 = load i32, i32* %9
%67 = load i32, i32* %10
%68 = sub nsw i32 %66, %67
%69 = icmp sgt i32 %68, 0
br i1 %69, label %70, label %79
70: ; preds = %65
%71 = load i32, i32* %9
%72 = load i32, i32* %10
%73 = sub nsw i32 %71, %72
%74 = sext i32 %73 to i64
%75 = getelementptr inbounds [150 x i8], [150 x i8]* %3, i64 0, i64 %74
%76 = load i8, i8* %75
%77 = sext i8 %76 to i32
%78 = icmp sgt i32 %77, 57
br i1 %78, label %88, label %79
79: ; preds = %70, %65
%80 = load i32, i32* %9
%81 = load i32, i32* %10
%82 = sub nsw i32 %80, %81
%83 = sext i32 %82 to i64
%84 = getelementptr inbounds [150 x i8], [150 x i8]* %3, i64 0, i64 %83
%85 = load i8, i8* %84
%86 = sext i8 %85 to i32
%87 = icmp slt i32 %86, 48
br label %88
88: ; preds = %79, %70
%89 = phi i1 [ true, %70 ], [ %87, %79 ]
br i1 %89, label %90, label %93
90: ; preds = %88
%91 = load i32, i32* %10
%92 = add nsw i32 %91, 1
store i32 %92, i32* %10
br label %65
93: ; preds = %88
%94 = load i32, i32* %9
%95 = load i32, i32* %10
%96 = sub nsw i32 %94, %95
store i32 %96, i32* %8
br label %97
97: ; preds = %122, %93
%98 = load i32, i32* %9
%99 = load i32, i32* %10
%100 = sub nsw i32 %98, %99
%101 = icmp sgt i32 %100, 0
br i1 %101, label %102, label %120
102: ; preds = %97
%103 = load i32, i32* %9
%104 = load i32, i32* %10
%105 = sub nsw i32 %103, %104
%106 = sext i32 %105 to i64
%107 = getelementptr inbounds [150 x i8], [150 x i8]* %3, i64 0, i64 %106
%108 = load i8, i8* %107
%109 = sext i8 %108 to i32
%110 = icmp sle i32 %109, 57
br i1 %110, label %111, label %120
111: ; preds = %102
%112 = load i32, i32* %9
%113 = load i32, i32* %10
%114 = sub nsw i32 %112, %113
%115 = sext i32 %114 to i64
%116 = getelementptr inbounds [150 x i8], [150 x i8]* %3, i64 0, i64 %115
%117 = load i8, i8* %116
%118 = sext i8 %117 to i32
%119 = icmp sge i32 %118, 48
br label %120
120: ; preds = %111, %102, %97
%121 = phi i1 [ false, %102 ], [ false, %97 ], [ %119, %111 ]
br i1 %121, label %122, label %125
122: ; preds = %120
%123 = load i32, i32* %10
%124 = add nsw i32 %123, 1
store i32 %124, i32* %10
br label %97
125: ; preds = %120
%126 = load i32, i32* %9
%127 = load i32, i32* %10
%128 = sub nsw i32 %126, %127
%129 = add nsw i32 %128, 1
store i32 %129, i32* %7
store i32 0, i32* %11
%130 = load i32, i32* %7
store i32 %130, i32* %9
br label %131
131: ; preds = %145, %125
%132 = load i32, i32* %9
%133 = load i32, i32* %8
%134 = icmp sle i32 %132, %133
br i1 %134, label %135, label %148
135: ; preds = %131
%136 = load i32, i32* %9
%137 = sext i32 %136 to i64
%138 = getelementptr inbounds [150 x i8], [150 x i8]* %3, i64 0, i64 %137
%139 = load i8, i8* %138
%140 = sext i8 %139 to i32
%141 = sub nsw i32 %140, 48
%142 = load i32, i32* %11
%143 = mul nsw i32 %142, 10
%144 = add nsw i32 %141, %143
store i32 %144, i32* %11
br label %145
145: ; preds = %135
%146 = load i32, i32* %9
%147 = add nsw i32 %146, 1
store i32 %147, i32* %9
br label %131
148: ; preds = %131
br label %149
149: ; preds = %148, %35
br label %150
150: ; preds = %149, %18
br label %151
151: ; preds = %150
%152 = load i8*, i8** %4
%153 = icmp ne i8* %152, null
br i1 %153, label %154, label %158
154: ; preds = %151
%155 = load i32, i32* %6
%156 = icmp ne i32 %155, 0
%157 = xor i1 %156, true
br label %158
158: ; preds = %154, %151
%159 = phi i1 [ false, %151 ], [ %157, %154 ]
br i1 %159, label %18, label %160
160: ; preds = %158
%161 = load i32, i32* %11
%162 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.6, i64 0, i64 0), i32 %161)
%163 = call i32 @remove(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
%164 = load i32, i32* %11
store i32 %164, i32* %1
br label %165
165: ; preds = %160, %14
%166 = load i32, i32* %1
ret i32 %166
}

LLVM IR (-O2):
@.str = [13 x i8] c"top >mem.txt\00"
@.str.1 = [28 x i8] c"Error executing top command\00"
@.str.2 = [8 x i8] c"mem.txt\00"
@.str.3 = [2 x i8] c"r\00"
@.str.4 = [7 x i8] c"Memory\00"
@.str.5 = [5 x i8] c"free\00"
@.str.6 = [10 x i8] c"value=%d\0A\00"
define i32 @top_mem_free() {
%1 = alloca [150 x i8]
%2 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 0
%3 = tail call i64 @system(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str, i64 0, i64 0))
%4 = icmp eq i64 %3, 0
br i1 %4, label %7, label %5
5: ; preds = %0
%6 = tail call i32 @perror(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.1, i64 0, i64 0))
br label %153
7: ; preds = %0
%8 = tail call i32* @fopen(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.3, i64 0, i64 0))
br label %9
9: ; preds = %145, %7
%10 = phi i32 [ 0, %7 ], [ %147, %145 ]
%11 = call i8* @fgets(i8* %2, i32 150, i32* %8)
%12 = icmp eq i8* %11, null
br i1 %12, label %149, label %13
13: ; preds = %9, %13
%14 = phi i64 [ %18, %13 ], [ 0, %9 ]
%15 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 %14
%16 = load i8, i8* %15
%17 = icmp eq i8 %16, 0
%18 = add nuw i64 %14, 1
br i1 %17, label %19, label %13
19: ; preds = %13
%20 = trunc i64 %14 to i32
%21 = call i64 @strncmp(i8* %2, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i64 0, i64 0), i32 6)
%22 = icmp eq i64 %21, 0
br i1 %22, label %23, label %145
23: ; preds = %19
%24 = add nsw i32 %20, -5
%25 = icmp ugt i32 %20, 11
br i1 %25, label %32, label %28
26: ; preds = %32
%27 = zext i1 %37 to i32
br label %28
28: ; preds = %26, %23
%29 = phi i32 [ 0, %23 ], [ %27, %26 ]
%30 = phi i32 [ 6, %23 ], [ %40, %26 ]
%31 = sext i32 %30 to i64
br label %44
32: ; preds = %23, %32
%33 = phi i32 [ %40, %32 ], [ 6, %23 ]
%34 = zext i32 %33 to i64
%35 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 %34
%36 = call i64 @strncmp(i8* %35, i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), i32 4)
%37 = icmp eq i64 %36, 0
%38 = xor i1 %37, true
%39 = zext i1 %38 to i32
%40 = add nuw nsw i32 %33, %39
%41 = icmp slt i32 %40, %24
%42 = xor i1 %37, true
%43 = select i1 %41, i1 %42, i1 false
br i1 %43, label %32, label %26
44: ; preds = %28, %64
%45 = phi i64 [ 0, %28 ], [ %65, %64 ]
%46 = sub nsw i64 %31, %45
%47 = icmp sgt i64 %46, 0
br i1 %47, label %48, label %53
48: ; preds = %44
%49 = and i64 %46, 4294967295
%50 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 %49
%51 = load i8, i8* %50
%52 = icmp sgt i8 %51, 57
br i1 %52, label %64, label %53
53: ; preds = %48, %44
%54 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 %46
%55 = load i8, i8* %54
%56 = icmp slt i8 %55, 48
br i1 %56, label %64, label %57
57: ; preds = %53
%58 = trunc i64 %45 to i32
%59 = trunc i64 %46 to i32
%60 = sub nsw i32 %30, %58
%61 = icmp sgt i32 %60, 0
br i1 %61, label %62, label %79
62: ; preds = %57
%63 = and i64 %45, 4294967295
br label %69
64: ; preds = %48, %53
%65 = add nuw i64 %45, 1
br label %44
66: ; preds = %69
%67 = sub nsw i32 %30, %78
%68 = icmp eq i32 %30, %78
br i1 %68, label %79, label %69
69: ; preds = %62, %66
%70 = phi i64 [ %63, %62 ], [ %77, %66 ]
%71 = phi i32 [ %60, %62 ], [ %67, %66 ]
%72 = zext i32 %71 to i64
%73 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 %72
%74 = load i8, i8* %73
%75 = add i8 %74, -48
%76 = icmp ult i8 %75, 10
%77 = add nuw nsw i64 %70, 1
%78 = trunc i64 %77 to i32
br i1 %76, label %66, label %79
79: ; preds = %69, %66, %57
%80 = phi i32 [ %60, %57 ], [ 0, %66 ], [ %71, %69 ]
%81 = icmp slt i32 %80, %59
br i1 %81, label %82, label %145
82: ; preds = %79
%83 = sext i32 %80 to i64
%84 = shl i64 %46, 32
%85 = ashr exact i64 %84, 32
%86 = sub nsw i64 %85, %83
%87 = xor i64 %83, -1
%88 = add nsw i64 %85, %87
%89 = and i64 %86, 3
%90 = icmp ult i64 %88, 3
br i1 %90, label %127, label %91
91: ; preds = %82
%92 = and i64 %86, -4
br label %93
93: ; preds = %93, %91
%94 = phi i64 [ %83, %91 ], [ %118, %93 ]
%95 = phi i32 [ 0, %91 ], [ %124, %93 ]
%96 = phi i64 [ 0, %91 ], [ %125, %93 ]
%97 = add nsw i64 %94, 1
%98 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 %97
%99 = load i8, i8* %98
%100 = sext i8 %99 to i32
%101 = mul nsw i32 %95, 10
%102 = add i32 %101, -48
%103 = add i32 %102, %100
%104 = add nsw i64 %94, 2
%105 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 %104
%106 = load i8, i8* %105
%107 = sext i8 %106 to i32
%108 = mul nsw i32 %103, 10
%109 = add i32 %108, -48
%110 = add i32 %109, %107
%111 = add nsw i64 %94, 3
%112 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 %111
%113 = load i8, i8* %112
%114 = sext i8 %113 to i32
%115 = mul nsw i32 %110, 10
%116 = add i32 %115, -48
%117 = add i32 %116, %114
%118 = add nsw i64 %94, 4
%119 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 %118
%120 = load i8, i8* %119
%121 = sext i8 %120 to i32
%122 = mul nsw i32 %117, 10
%123 = add i32 %122, -48
%124 = add i32 %123, %121
%125 = add i64 %96, 4
%126 = icmp eq i64 %125, %92
br i1 %126, label %127, label %93
127: ; preds = %93, %82
%128 = phi i32 [ undef, %82 ], [ %124, %93 ]
%129 = phi i64 [ %83, %82 ], [ %118, %93 ]
%130 = phi i32 [ 0, %82 ], [ %124, %93 ]
%131 = icmp eq i64 %89, 0
br i1 %131, label %145, label %132
132: ; preds = %127, %132
%133 = phi i64 [ %136, %132 ], [ %129, %127 ]
%134 = phi i32 [ %142, %132 ], [ %130, %127 ]
%135 = phi i64 [ %143, %132 ], [ 0, %127 ]
%136 = add nsw i64 %133, 1
%137 = getelementptr inbounds [150 x i8], [150 x i8]* %1, i64 0, i64 %136
%138 = load i8, i8* %137
%139 = sext i8 %138 to i32
%140 = mul nsw i32 %134, 10
%141 = add i32 %140, -48
%142 = add i32 %141, %139
%143 = add i64 %135, 1
%144 = icmp eq i64 %143, %89
br i1 %144, label %145, label %132
145: ; preds = %127, %132, %79, %19
%146 = phi i32 [ 0, %19 ], [ %29, %79 ], [ %29, %132 ], [ %29, %127 ]
%147 = phi i32 [ %10, %19 ], [ 0, %79 ], [ %128, %127 ], [ %142, %132 ]
%148 = icmp eq i32 %146, 0
br i1 %148, label %9, label %149
149: ; preds = %9, %145
%150 = phi i32 [ %147, %145 ], [ %10, %9 ]
%151 = call i32 @printf(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.6, i64 0, i64 0), i32 %150)
%152 = call i32 @remove(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.2, i64 0, i64 0))
br label %153
153: ; preds = %149, %5
%154 = phi i32 [ 0, %5 ], [ %150, %149 ]
ret i32 %154
}