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

/* Variables and functions */
int /*<<< orphan*/ get_pid(int *);
int find_pids_pos(uint16_t *vpid, uint16_t *apid, uint16_t *ac3pid,
                  uint8_t *buf, int len, int *vpos, int *apos, int *ac3pos) {
  int c = 0;
  int found = 0;
  if (!vpid || !apid || !ac3pid || !buf || !len)
    return 0;
  *vpid = 0;
  *apid = 0;
  *ac3pid = 0;
  while (c + 188 < len) {
    if (buf[c] == buf[c + 188])
      break;
    c++;
  }
  while (found < 2 && c < len) {
    if (buf[c + 1] & 0x40) {
      int off = 4;
      if (buf[c + 3] & 0x20) {
        off += buf[c + 4] + 1;
      }
      if (off < 188 - 4) {
        if (!*vpid && (buf[c + off + 3] & 0xF0) == 0xE0) {
          *vpid = get_pid(buf + c + 1);
          if (vpos)
            *vpos = c + off + 3;
          found++;
        }
        if (!*ac3pid && buf[c + off + 3] == 0xBD) {
          int l = off + 4;
          int f = 0;
          while (l < 188 && f < 2) {
            uint8_t b = buf[c + l];
            switch (f) {
            case 0:
              if (b == 0x0b)
                f = 1;
              break;
            case 1:
              if (b == 0x77)
                f = 2;
              else if (b != 0x0b)
                f = 0;
            }
            l++;
          }
          if (f == 2) {
            *ac3pid = get_pid(buf + c + 1);
            if (ac3pos)
              *ac3pos = c + off + 3;
            found++;
          }
        }
        if (!*apid && ((buf[c + off + 3] & 0xF0) == 0xC0 ||
                       (buf[c + off + 3] & 0xF0) == 0xD0)) {
          *apid = get_pid(buf + c + 1);
          if (apos)
            *apos = c + off + 3;
          found++;
        }
      }
    }
    c += 188;
  }
  return found;
}


x86 assembly (clang, -O0):
<find_pids_pos>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    %r8d,-0x2c(%rbp)
mov    %r9,-0x38(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x40(%rbp)
cmpq   $0x0,-0x10(%rbp)
je     117c <find_pids_pos+0x6c>
cmpq   $0x0,-0x18(%rbp)
je     117c <find_pids_pos+0x6c>
cmpq   $0x0,-0x20(%rbp)
je     117c <find_pids_pos+0x6c>
cmpq   $0x0,-0x28(%rbp)
je     117c <find_pids_pos+0x6c>
cmpl   $0x0,-0x2c(%rbp)
jne    1188 <find_pids_pos+0x78>
movl   $0x0,-0x4(%rbp)
jmp    14f2 <find_pids_pos+0x3e2>
mov    -0x10(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x18(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x20(%rbp),%rax
movl   $0x0,(%rax)
mov    -0x3c(%rbp),%eax
add    $0xbc,%eax
cmp    -0x2c(%rbp),%eax
jge    11ee <find_pids_pos+0xde>
mov    -0x28(%rbp),%rax
movslq -0x3c(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x28(%rbp),%rcx
mov    -0x3c(%rbp),%edx
add    $0xbc,%edx
movslq %edx,%rdx
cmp    (%rcx,%rdx,4),%eax
jne    11e0 <find_pids_pos+0xd0>
jmp    11ee <find_pids_pos+0xde>
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    11a6 <find_pids_pos+0x96>
jmp    11f3 <find_pids_pos+0xe3>
xor    %eax,%eax
cmpl   $0x2,-0x40(%rbp)
mov    %al,-0x51(%rbp)
jge    120e <find_pids_pos+0xfe>
mov    -0x3c(%rbp),%eax
cmp    -0x2c(%rbp),%eax
setl   %al
mov    %al,-0x51(%rbp)
mov    -0x51(%rbp),%al
test   $0x1,%al
jne    121e <find_pids_pos+0x10e>
jmp    14ec <find_pids_pos+0x3dc>
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
and    $0x40,%eax
cmp    $0x0,%eax
je     14dc <find_pids_pos+0x3cc>
movl   $0x4,-0x44(%rbp)
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
and    $0x20,%eax
cmp    $0x0,%eax
je     1276 <find_pids_pos+0x166>
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
add    $0x1,%eax
add    -0x44(%rbp),%eax
mov    %eax,-0x44(%rbp)
cmpl   $0xb8,-0x44(%rbp)
jge    14d7 <find_pids_pos+0x3c7>
mov    -0x10(%rbp),%rax
cmpl   $0x0,(%rax)
jne    12f6 <find_pids_pos+0x1e6>
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    -0x44(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
and    $0xf0,%eax
cmp    $0xe0,%eax
jne    12f6 <find_pids_pos+0x1e6>
mov    -0x28(%rbp),%rdi
movslq -0x3c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x4,%rdi
call   1030 <get_pid@plt>
mov    %eax,%ecx
mov    -0x10(%rbp),%rax
mov    %ecx,(%rax)
cmpq   $0x0,-0x38(%rbp)
je     12ed <find_pids_pos+0x1dd>
mov    -0x3c(%rbp),%ecx
add    -0x44(%rbp),%ecx
add    $0x3,%ecx
mov    -0x38(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
mov    -0x20(%rbp),%rax
cmpl   $0x0,(%rax)
jne    143c <find_pids_pos+0x32c>
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    -0x44(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
cmpl   $0xbd,(%rax,%rcx,4)
jne    143c <find_pids_pos+0x32c>
mov    -0x44(%rbp),%eax
add    $0x4,%eax
mov    %eax,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
xor    %eax,%eax
cmpl   $0xbc,-0x48(%rbp)
mov    %al,-0x52(%rbp)
jge    134c <find_pids_pos+0x23c>
cmpl   $0x2,-0x4c(%rbp)
setl   %al
mov    %al,-0x52(%rbp)
mov    -0x52(%rbp),%al
test   $0x1,%al
jne    135c <find_pids_pos+0x24c>
jmp    13ea <find_pids_pos+0x2da>
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
mov    -0x48(%rbp),%edx
add    %edx,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
mov    %eax,-0x50(%rbp)
mov    -0x4c(%rbp),%eax
mov    %eax,-0x58(%rbp)
test   %eax,%eax
je     1395 <find_pids_pos+0x285>
jmp    1384 <find_pids_pos+0x274>
mov    -0x58(%rbp),%eax
sub    $0x1,%eax
je     13ab <find_pids_pos+0x29b>
jmp    13dc <find_pids_pos+0x2cc>
cmpl   $0xb,-0x50(%rbp)
jne    13a6 <find_pids_pos+0x296>
movl   $0x1,-0x4c(%rbp)
jmp    13dc <find_pids_pos+0x2cc>
cmpl   $0x77,-0x50(%rbp)
jne    13c1 <find_pids_pos+0x2b1>
movl   $0x2,-0x4c(%rbp)
jmp    13d7 <find_pids_pos+0x2c7>
cmpl   $0xb,-0x50(%rbp)
je     13d2 <find_pids_pos+0x2c2>
movl   $0x0,-0x4c(%rbp)
jmp    13d7 <find_pids_pos+0x2c7>
jmp    13dc <find_pids_pos+0x2cc>
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    1330 <find_pids_pos+0x220>
cmpl   $0x2,-0x4c(%rbp)
jne    1437 <find_pids_pos+0x327>
mov    -0x28(%rbp),%rdi
movslq -0x3c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x4,%rdi
call   1030 <get_pid@plt>
mov    %eax,%ecx
mov    -0x20(%rbp),%rax
mov    %ecx,(%rax)
cmpq   $0x0,0x18(%rbp)
je     142e <find_pids_pos+0x31e>
mov    -0x3c(%rbp),%ecx
add    -0x44(%rbp),%ecx
add    $0x3,%ecx
mov    0x18(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    143c <find_pids_pos+0x32c>
mov    -0x18(%rbp),%rax
cmpl   $0x0,(%rax)
jne    14d2 <find_pids_pos+0x3c2>
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    -0x44(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
and    $0xf0,%eax
cmp    $0xc0,%eax
je     148f <find_pids_pos+0x37f>
mov    -0x28(%rbp),%rax
mov    -0x3c(%rbp),%ecx
add    -0x44(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
and    $0xf0,%eax
cmp    $0xd0,%eax
jne    14d2 <find_pids_pos+0x3c2>
mov    -0x28(%rbp),%rdi
movslq -0x3c(%rbp),%rax
shl    $0x2,%rax
add    %rax,%rdi
add    $0x4,%rdi
call   1030 <get_pid@plt>
mov    %eax,%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
cmpq   $0x0,0x10(%rbp)
je     14c9 <find_pids_pos+0x3b9>
mov    -0x3c(%rbp),%ecx
add    -0x44(%rbp),%ecx
add    $0x3,%ecx
mov    0x10(%rbp),%rax
mov    %ecx,(%rax)
mov    -0x40(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    14d7 <find_pids_pos+0x3c7>
jmp    14dc <find_pids_pos+0x3cc>
mov    -0x3c(%rbp),%eax
add    $0xbc,%eax
mov    %eax,-0x3c(%rbp)
jmp    11f3 <find_pids_pos+0xe3>
mov    -0x40(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<find_pids_pos>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x38,%rsp
xor    %ebx,%ebx
test   %rdi,%rdi
je     13bc <find_pids_pos+0x2ac>
test   %rsi,%rsi
je     13bc <find_pids_pos+0x2ac>
test   %rdx,%rdx
je     13bc <find_pids_pos+0x2ac>
mov    %rcx,%r15
test   %rcx,%rcx
je     13bc <find_pids_pos+0x2ac>
mov    %r9,0x30(%rsp)
test   %r8d,%r8d
je     13bc <find_pids_pos+0x2ac>
movl   $0x0,(%rdi)
movl   $0x0,(%rsi)
movl   $0x0,(%rdx)
xor    %ebx,%ebx
mov    $0x0,%eax
cmp    $0xbd,%r8d
jl     119f <find_pids_pos+0x8f>
lea    -0xbc(%r8),%eax
xor    %ecx,%ecx
lea    0xbc(%rcx),%ebx
mov    (%r15,%rcx,4),%ebp
cmp    (%r15,%rbx,4),%ebp
je     119b <find_pids_pos+0x8b>
add    $0x1,%rcx
cmp    %rcx,%rax
jne    1180 <find_pids_pos+0x70>
jmp    119d <find_pids_pos+0x8d>
mov    %ecx,%eax
xor    %ebx,%ebx
cmp    %r8d,%eax
jge    13bc <find_pids_pos+0x2ac>
movslq %eax,%r14
movslq %r8d,%r8
lea    0x4(%r15),%rax
mov    %rax,0x8(%rsp)
lea    (%r15,%r14,4),%r13
xor    %ebx,%ebx
mov    $0x2,%r9d
mov    %rdx,0x28(%rsp)
mov    %rsi,0x20(%rsp)
mov    %rdi,0x18(%rsp)
mov    %r8,0x10(%rsp)
nopw   0x0(%rax,%rax,1)
lea    0x1(%r14),%eax
testb  $0x40,(%r15,%rax,4)
je     13a0 <find_pids_pos+0x290>
lea    0x3(%r14),%eax
mov    $0x4,%r12d
testb  $0x20,(%r15,%rax,4)
je     1219 <find_pids_pos+0x109>
lea    0x4(%r14),%eax
mov    (%r15,%rax,4),%r12d
cmp    $0xb2,%r12d
jg     13a0 <find_pids_pos+0x290>
add    $0x5,%r12d
cmpl   $0x0,(%rdi)
jne    1280 <find_pids_pos+0x170>
lea    (%r14,%r12,1),%ebp
add    $0x3,%ebp
movslq %ebp,%rax
mov    (%r15,%rax,4),%eax
mov    $0xf0,%ecx
and    %ecx,%eax
cmp    $0xe0,%eax
jne    1280 <find_pids_pos+0x170>
mov    %r14d,%eax
mov    0x8(%rsp),%rcx
lea    (%rcx,%rax,4),%rdi
call   1030 <get_pid@plt>
mov    0x18(%rsp),%rdi
mov    %eax,(%rdi)
mov    0x30(%rsp),%rax
test   %rax,%rax
je     125e <find_pids_pos+0x14e>
mov    %ebp,(%rax)
add    $0x1,%ebx
mov    0x28(%rsp),%rdx
mov    0x20(%rsp),%rsi
mov    0x10(%rsp),%r8
mov    $0x2,%r9d
cs nopw 0x0(%rax,%rax,1)
cmpl   $0x0,(%rdx)
jne    1340 <find_pids_pos+0x230>
lea    (%r14,%r12,1),%r10d
add    $0x3,%r10d
movslq %r10d,%rax
cmpl   $0xbd,(%r15,%rax,4)
jne    1340 <find_pids_pos+0x230>
lea    0x4(%r12),%eax
cltq
xor    %ecx,%ecx
nopl   0x0(%rax,%rax,1)
mov    0x0(%r13,%rax,4),%ebp
cmp    $0x1,%ecx
je     12d0 <find_pids_pos+0x1c0>
test   %ecx,%ecx
jne    12c6 <find_pids_pos+0x1b6>
xor    %ecx,%ecx
cmp    $0xb,%ebp
sete   %cl
cmp    $0xba,%rax
jle    12e7 <find_pids_pos+0x1d7>
jmp    12f0 <find_pids_pos+0x1e0>
xor    %ecx,%ecx
cmp    $0xb,%ebp
sete   %cl
cmp    $0x77,%ebp
cmove  %r9d,%ecx
cmp    $0xba,%rax
jg     12f0 <find_pids_pos+0x1e0>
add    $0x1,%rax
cmp    $0x2,%ecx
jl     12b0 <find_pids_pos+0x1a0>
cmp    $0x2,%ecx
jne    1340 <find_pids_pos+0x230>
mov    %r10d,%ebp
mov    %r14d,%eax
mov    0x8(%rsp),%rcx
lea    (%rcx,%rax,4),%rdi
call   1030 <get_pid@plt>
mov    0x28(%rsp),%rdx
mov    %eax,(%rdx)
mov    0x78(%rsp),%rax
test   %rax,%rax
je     131c <find_pids_pos+0x20c>
mov    %ebp,(%rax)
add    $0x1,%ebx
mov    0x20(%rsp),%rsi
mov    0x18(%rsp),%rdi
mov    0x10(%rsp),%r8
mov    $0x2,%r9d
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmpl   $0x0,(%rsi)
jne    13a0 <find_pids_pos+0x290>
lea    (%r14,%r12,1),%ebp
add    $0x3,%ebp
movslq %ebp,%rax
mov    (%r15,%rax,4),%al
or     $0x10,%al
and    $0xf0,%al
cmp    $0xd0,%al
jne    13a0 <find_pids_pos+0x290>
mov    %r14d,%eax
mov    0x8(%rsp),%rcx
lea    (%rcx,%rax,4),%rdi
call   1030 <get_pid@plt>
mov    0x20(%rsp),%rsi
mov    %eax,(%rsi)
mov    0x70(%rsp),%rax
test   %rax,%rax
je     137f <find_pids_pos+0x26f>
mov    %ebp,(%rax)
add    $0x1,%ebx
mov    0x28(%rsp),%rdx
mov    0x18(%rsp),%rdi
mov    0x10(%rsp),%r8
mov    $0x2,%r9d
nopw   0x0(%rax,%rax,1)
cmp    $0x1,%ebx
jg     13bc <find_pids_pos+0x2ac>
add    $0xbc,%r14
add    $0x2f0,%r13
cmp    %r8,%r14
jl     11e0 <find_pids_pos+0xd0>
mov    %ebx,%eax
add    $0x38,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @find_pids_pos(i32* %0, i32* %1, i32* %2, i32* %3, i32 %4, i32* %5, i32* %6, i32* %7) {
%9 = alloca i32
%10 = alloca i32*
%11 = alloca i32*
%12 = alloca i32*
%13 = alloca i32*
%14 = alloca i32
%15 = alloca i32*
%16 = alloca i32*
%17 = alloca i32*
%18 = alloca i32
%19 = alloca i32
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
store i32* %0, i32** %10
store i32* %1, i32** %11
store i32* %2, i32** %12
store i32* %3, i32** %13
store i32 %4, i32* %14
store i32* %5, i32** %15
store i32* %6, i32** %16
store i32* %7, i32** %17
store i32 0, i32* %18
store i32 0, i32* %19
%24 = load i32*, i32** %10
%25 = icmp ne i32* %24, null
br i1 %25, label %26, label %38
26: ; preds = %8
%27 = load i32*, i32** %11
%28 = icmp ne i32* %27, null
br i1 %28, label %29, label %38
29: ; preds = %26
%30 = load i32*, i32** %12
%31 = icmp ne i32* %30, null
br i1 %31, label %32, label %38
32: ; preds = %29
%33 = load i32*, i32** %13
%34 = icmp ne i32* %33, null
br i1 %34, label %35, label %38
35: ; preds = %32
%36 = load i32, i32* %14
%37 = icmp ne i32 %36, 0
br i1 %37, label %39, label %38
38: ; preds = %35, %32, %29, %26, %8
store i32 0, i32* %9
br label %267
39: ; preds = %35
%40 = load i32*, i32** %10
store i32 0, i32* %40
%41 = load i32*, i32** %11
store i32 0, i32* %41
%42 = load i32*, i32** %12
store i32 0, i32* %42
br label %43
43: ; preds = %62, %39
%44 = load i32, i32* %18
%45 = add nsw i32 %44, 188
%46 = load i32, i32* %14
%47 = icmp slt i32 %45, %46
br i1 %47, label %48, label %65
48: ; preds = %43
%49 = load i32*, i32** %13
%50 = load i32, i32* %18
%51 = sext i32 %50 to i64
%52 = getelementptr inbounds i32, i32* %49, i64 %51
%53 = load i32, i32* %52
%54 = load i32*, i32** %13
%55 = load i32, i32* %18
%56 = add nsw i32 %55, 188
%57 = sext i32 %56 to i64
%58 = getelementptr inbounds i32, i32* %54, i64 %57
%59 = load i32, i32* %58
%60 = icmp eq i32 %53, %59
br i1 %60, label %61, label %62
61: ; preds = %48
br label %65
62: ; preds = %48
%63 = load i32, i32* %18
%64 = add nsw i32 %63, 1
store i32 %64, i32* %18
br label %43
65: ; preds = %61, %43
br label %66
66: ; preds = %262, %65
%67 = load i32, i32* %19
%68 = icmp slt i32 %67, 2
br i1 %68, label %69, label %73
69: ; preds = %66
%70 = load i32, i32* %18
%71 = load i32, i32* %14
%72 = icmp slt i32 %70, %71
br label %73
73: ; preds = %69, %66
%74 = phi i1 [ false, %66 ], [ %72, %69 ]
br i1 %74, label %75, label %265
75: ; preds = %73
%76 = load i32*, i32** %13
%77 = load i32, i32* %18
%78 = add nsw i32 %77, 1
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds i32, i32* %76, i64 %79
%81 = load i32, i32* %80
%82 = and i32 %81, 64
%83 = icmp ne i32 %82, 0
br i1 %83, label %84, label %262
84: ; preds = %75
store i32 4, i32* %20
%85 = load i32*, i32** %13
%86 = load i32, i32* %18
%87 = add nsw i32 %86, 3
%88 = sext i32 %87 to i64
%89 = getelementptr inbounds i32, i32* %85, i64 %88
%90 = load i32, i32* %89
%91 = and i32 %90, 32
%92 = icmp ne i32 %91, 0
br i1 %92, label %93, label %103
93: ; preds = %84
%94 = load i32*, i32** %13
%95 = load i32, i32* %18
%96 = add nsw i32 %95, 4
%97 = sext i32 %96 to i64
%98 = getelementptr inbounds i32, i32* %94, i64 %97
%99 = load i32, i32* %98
%100 = add nsw i32 %99, 1
%101 = load i32, i32* %20
%102 = add nsw i32 %101, %100
store i32 %102, i32* %20
br label %103
103: ; preds = %93, %84
%104 = load i32, i32* %20
%105 = icmp slt i32 %104, 184
br i1 %105, label %106, label %261
106: ; preds = %103
%107 = load i32*, i32** %10
%108 = load i32, i32* %107
%109 = icmp ne i32 %108, 0
br i1 %109, label %140, label %110
110: ; preds = %106
%111 = load i32*, i32** %13
%112 = load i32, i32* %18
%113 = load i32, i32* %20
%114 = add nsw i32 %112, %113
%115 = add nsw i32 %114, 3
%116 = sext i32 %115 to i64
%117 = getelementptr inbounds i32, i32* %111, i64 %116
%118 = load i32, i32* %117
%119 = and i32 %118, 240
%120 = icmp eq i32 %119, 224
br i1 %120, label %121, label %140
121: ; preds = %110
%122 = load i32*, i32** %13
%123 = load i32, i32* %18
%124 = sext i32 %123 to i64
%125 = getelementptr inbounds i32, i32* %122, i64 %124
%126 = getelementptr inbounds i32, i32* %125, i64 1
%127 = call i32 @get_pid(i32* %126)
%128 = load i32*, i32** %10
store i32 %127, i32* %128
%129 = load i32*, i32** %15
%130 = icmp ne i32* %129, null
br i1 %130, label %131, label %137
131: ; preds = %121
%132 = load i32, i32* %18
%133 = load i32, i32* %20
%134 = add nsw i32 %132, %133
%135 = add nsw i32 %134, 3
%136 = load i32*, i32** %15
store i32 %135, i32* %136
br label %137
137: ; preds = %131, %121
%138 = load i32, i32* %19
%139 = add nsw i32 %138, 1
store i32 %139, i32* %19
br label %140
140: ; preds = %137, %110, %106
%141 = load i32*, i32** %12
%142 = load i32, i32* %141
%143 = icmp ne i32 %142, 0
br i1 %143, label %215, label %144
144: ; preds = %140
%145 = load i32*, i32** %13
%146 = load i32, i32* %18
%147 = load i32, i32* %20
%148 = add nsw i32 %146, %147
%149 = add nsw i32 %148, 3
%150 = sext i32 %149 to i64
%151 = getelementptr inbounds i32, i32* %145, i64 %150
%152 = load i32, i32* %151
%153 = icmp eq i32 %152, 189
br i1 %153, label %154, label %215
154: ; preds = %144
%155 = load i32, i32* %20
%156 = add nsw i32 %155, 4
store i32 %156, i32* %21
store i32 0, i32* %22
br label %157
157: ; preds = %189, %154
%158 = load i32, i32* %21
%159 = icmp slt i32 %158, 188
br i1 %159, label %160, label %163
160: ; preds = %157
%161 = load i32, i32* %22
%162 = icmp slt i32 %161, 2
br label %163
163: ; preds = %160, %157
%164 = phi i1 [ false, %157 ], [ %162, %160 ]
br i1 %164, label %165, label %192
165: ; preds = %163
%166 = load i32*, i32** %13
%167 = load i32, i32* %18
%168 = load i32, i32* %21
%169 = add nsw i32 %167, %168
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds i32, i32* %166, i64 %170
%172 = load i32, i32* %171
store i32 %172, i32* %23
%173 = load i32, i32* %22
switch i32 %173, label %189 [
i32 0, label %174
i32 1, label %179
]
174: ; preds = %165
%175 = load i32, i32* %23
%176 = icmp eq i32 %175, 11
br i1 %176, label %177, label %178
177: ; preds = %174
store i32 1, i32* %22
br label %178
178: ; preds = %177, %174
br label %189
179: ; preds = %165
%180 = load i32, i32* %23
%181 = icmp eq i32 %180, 119
br i1 %181, label %182, label %183
182: ; preds = %179
store i32 2, i32* %22
br label %188
183: ; preds = %179
%184 = load i32, i32* %23
%185 = icmp ne i32 %184, 11
br i1 %185, label %186, label %187
186: ; preds = %183
store i32 0, i32* %22
br label %187
187: ; preds = %186, %183
br label %188
188: ; preds = %187, %182
br label %189
189: ; preds = %188, %165, %178
%190 = load i32, i32* %21
%191 = add nsw i32 %190, 1
store i32 %191, i32* %21
br label %157
192: ; preds = %163
%193 = load i32, i32* %22
%194 = icmp eq i32 %193, 2
br i1 %194, label %195, label %214
195: ; preds = %192
%196 = load i32*, i32** %13
%197 = load i32, i32* %18
%198 = sext i32 %197 to i64
%199 = getelementptr inbounds i32, i32* %196, i64 %198
%200 = getelementptr inbounds i32, i32* %199, i64 1
%201 = call i32 @get_pid(i32* %200)
%202 = load i32*, i32** %12
store i32 %201, i32* %202
%203 = load i32*, i32** %17
%204 = icmp ne i32* %203, null
br i1 %204, label %205, label %211
205: ; preds = %195
%206 = load i32, i32* %18
%207 = load i32, i32* %20
%208 = add nsw i32 %206, %207
%209 = add nsw i32 %208, 3
%210 = load i32*, i32** %17
store i32 %209, i32* %210
br label %211
211: ; preds = %205, %195
%212 = load i32, i32* %19
%213 = add nsw i32 %212, 1
store i32 %213, i32* %19
br label %214
214: ; preds = %211, %192
br label %215
215: ; preds = %214, %144, %140
%216 = load i32*, i32** %11
%217 = load i32, i32* %216
%218 = icmp ne i32 %217, 0
br i1 %218, label %260, label %219
219: ; preds = %215
%220 = load i32*, i32** %13
%221 = load i32, i32* %18
%222 = load i32, i32* %20
%223 = add nsw i32 %221, %222
%224 = add nsw i32 %223, 3
%225 = sext i32 %224 to i64
%226 = getelementptr inbounds i32, i32* %220, i64 %225
%227 = load i32, i32* %226
%228 = and i32 %227, 240
%229 = icmp eq i32 %228, 192
br i1 %229, label %241, label %230
230: ; preds = %219
%231 = load i32*, i32** %13
%232 = load i32, i32* %18
%233 = load i32, i32* %20
%234 = add nsw i32 %232, %233
%235 = add nsw i32 %234, 3
%236 = sext i32 %235 to i64
%237 = getelementptr inbounds i32, i32* %231, i64 %236
%238 = load i32, i32* %237
%239 = and i32 %238, 240
%240 = icmp eq i32 %239, 208
br i1 %240, label %241, label %260
241: ; preds = %230, %219
%242 = load i32*, i32** %13
%243 = load i32, i32* %18
%244 = sext i32 %243 to i64
%245 = getelementptr inbounds i32, i32* %242, i64 %244
%246 = getelementptr inbounds i32, i32* %245, i64 1
%247 = call i32 @get_pid(i32* %246)
%248 = load i32*, i32** %11
store i32 %247, i32* %248
%249 = load i32*, i32** %16
%250 = icmp ne i32* %249, null
br i1 %250, label %251, label %257
251: ; preds = %241
%252 = load i32, i32* %18
%253 = load i32, i32* %20
%254 = add nsw i32 %252, %253
%255 = add nsw i32 %254, 3
%256 = load i32*, i32** %16
store i32 %255, i32* %256
br label %257
257: ; preds = %251, %241
%258 = load i32, i32* %19
%259 = add nsw i32 %258, 1
store i32 %259, i32* %19
br label %260
260: ; preds = %257, %230, %215
br label %261
261: ; preds = %260, %103
br label %262
262: ; preds = %261, %75
%263 = load i32, i32* %18
%264 = add nsw i32 %263, 188
store i32 %264, i32* %18
br label %66
265: ; preds = %73
%266 = load i32, i32* %19
store i32 %266, i32* %9
br label %267
267: ; preds = %265, %38
%268 = load i32, i32* %9
ret i32 %268
}

LLVM IR (-O2):
define i32 @find_pids_pos(i32* %0, i32* %1, i32* %2, i32* %3, i32 %4, i32* writeonly %5, i32* writeonly %6, i32* writeonly %7) {
%9 = icmp ne i32* %0, null
%10 = icmp ne i32* %1, null
%11 = and i1 %9, %10
%12 = icmp ne i32* %2, null
%13 = and i1 %11, %12
%14 = icmp ne i32* %3, null
%15 = and i1 %13, %14
%16 = icmp ne i32 %4, 0
%17 = and i1 %15, %16
br i1 %17, label %18, label %163
18: ; preds = %8
store i32 0, i32* %0
store i32 0, i32* %1
store i32 0, i32* %2
%19 = icmp sgt i32 %4, 188
br i1 %19, label %20, label %38
20: ; preds = %18
%21 = add nsw i32 %4, -188
%22 = zext i32 %21 to i64
br label %23
23: ; preds = %20, %32
%24 = phi i64 [ 0, %20 ], [ %33, %32 ]
%25 = phi i64 [ 188, %20 ], [ %34, %32 ]
%26 = getelementptr inbounds i32, i32* %3, i64 %24
%27 = load i32, i32* %26
%28 = and i64 %25, 4294967295
%29 = getelementptr inbounds i32, i32* %3, i64 %28
%30 = load i32, i32* %29
%31 = icmp eq i32 %27, %30
br i1 %31, label %36, label %32
32: ; preds = %23
%33 = add nuw nsw i64 %24, 1
%34 = add nuw i64 %24, 189
%35 = icmp eq i64 %33, %22
br i1 %35, label %38, label %23
36: ; preds = %23
%37 = trunc i64 %24 to i32
br label %38
38: ; preds = %32, %36, %18
%39 = phi i32 [ 0, %18 ], [ %37, %36 ], [ %21, %32 ]
%40 = icmp slt i32 %39, %4
br i1 %40, label %41, label %163
41: ; preds = %38
%42 = icmp eq i32* %5, null
%43 = icmp eq i32* %7, null
%44 = icmp eq i32* %6, null
%45 = sext i32 %39 to i64
%46 = sext i32 %4 to i64
%47 = getelementptr inbounds i32, i32* %3, i64 1
%48 = getelementptr inbounds i32, i32* %3, i64 1
%49 = getelementptr inbounds i32, i32* %3, i64 1
br label %50
50: ; preds = %41, %157
%51 = phi i64 [ %45, %41 ], [ %159, %157 ]
%52 = phi i32 [ 0, %41 ], [ %158, %157 ]
%53 = add nsw i64 %51, 1
%54 = and i64 %53, 4294967295
%55 = getelementptr inbounds i32, i32* %3, i64 %54
%56 = load i32, i32* %55
%57 = and i32 %56, 64
%58 = icmp eq i32 %57, 0
br i1 %58, label %157, label %59
59: ; preds = %50
%60 = add i64 %51, 3
%61 = and i64 %60, 4294967295
%62 = getelementptr inbounds i32, i32* %3, i64 %61
%63 = load i32, i32* %62
%64 = and i32 %63, 32
%65 = icmp eq i32 %64, 0
br i1 %65, label %73, label %66
66: ; preds = %59
%67 = add i64 %51, 4
%68 = and i64 %67, 4294967295
%69 = getelementptr inbounds i32, i32* %3, i64 %68
%70 = load i32, i32* %69
%71 = add nsw i32 %70, 5
%72 = icmp slt i32 %70, 179
br i1 %72, label %73, label %157
73: ; preds = %59, %66
%74 = phi i32 [ %71, %66 ], [ 4, %59 ]
%75 = load i32, i32* %0
%76 = icmp eq i32 %75, 0
br i1 %76, label %77, label %93
77: ; preds = %73
%78 = trunc i64 %51 to i32
%79 = add i32 %78, 3
%80 = add i32 %79, %74
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i32, i32* %3, i64 %81
%83 = load i32, i32* %82
%84 = and i32 %83, 240
%85 = icmp eq i32 %84, 224
br i1 %85, label %86, label %93
86: ; preds = %77
%87 = and i64 %51, 4294967295
%88 = getelementptr inbounds i32, i32* %47, i64 %87
%89 = tail call i32 @get_pid(i32* %88)
store i32 %89, i32* %0
br i1 %42, label %91, label %90
90: ; preds = %86
store i32 %80, i32* %5
br label %91
91: ; preds = %90, %86
%92 = add nsw i32 %52, 1
br label %93
93: ; preds = %91, %77, %73
%94 = phi i32 [ %52, %73 ], [ %92, %91 ], [ %52, %77 ]
%95 = load i32, i32* %2
%96 = icmp eq i32 %95, 0
br i1 %96, label %97, label %137
97: ; preds = %93
%98 = trunc i64 %51 to i32
%99 = add i32 %98, 3
%100 = add i32 %99, %74
%101 = sext i32 %100 to i64
%102 = getelementptr inbounds i32, i32* %3, i64 %101
%103 = load i32, i32* %102
%104 = icmp eq i32 %103, 189
br i1 %104, label %105, label %137
105: ; preds = %97
%106 = add nsw i32 %74, 4
%107 = sext i32 %106 to i64
br label %108
108: ; preds = %105, %122
%109 = phi i64 [ %107, %105 ], [ %124, %122 ]
%110 = phi i32 [ 0, %105 ], [ %123, %122 ]
%111 = add nsw i64 %109, %51
%112 = getelementptr inbounds i32, i32* %3, i64 %111
%113 = load i32, i32* %112
switch i32 %110, label %122 [
i32 0, label %114
i32 1, label %117
]
114: ; preds = %108
%115 = icmp eq i32 %113, 11
%116 = zext i1 %115 to i32
br label %122
117: ; preds = %108
%118 = icmp eq i32 %113, 11
%119 = zext i1 %118 to i32
%120 = icmp eq i32 %113, 119
%121 = select i1 %120, i32 2, i32 %119
br label %122
122: ; preds = %117, %114, %108
%123 = phi i32 [ %110, %108 ], [ %116, %114 ], [ %121, %117 ]
%124 = add nsw i64 %109, 1
%125 = icmp slt i64 %109, 187
%126 = icmp slt i32 %123, 2
%127 = select i1 %125, i1 %126, i1 false
br i1 %127, label %108, label %128
128: ; preds = %122
%129 = icmp eq i32 %123, 2
br i1 %129, label %130, label %137
130: ; preds = %128
%131 = and i64 %51, 4294967295
%132 = getelementptr inbounds i32, i32* %48, i64 %131
%133 = tail call i32 @get_pid(i32* %132)
store i32 %133, i32* %2
br i1 %43, label %135, label %134
134: ; preds = %130
store i32 %100, i32* %7
br label %135
135: ; preds = %134, %130
%136 = add nsw i32 %94, 1
br label %137
137: ; preds = %128, %135, %97, %93
%138 = phi i32 [ %94, %93 ], [ %94, %97 ], [ %136, %135 ], [ %94, %128 ]
%139 = load i32, i32* %1
%140 = icmp eq i32 %139, 0
br i1 %140, label %141, label %157
141: ; preds = %137
%142 = trunc i64 %51 to i32
%143 = add i32 %142, 3
%144 = add i32 %143, %74
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds i32, i32* %3, i64 %145
%147 = load i32, i32* %146
%148 = trunc i32 %147 to i8
%149 = and i8 %148, -16
switch i8 %149, label %157 [
i8 -64, label %150
i8 -48, label %150
]
150: ; preds = %141, %141
%151 = and i64 %51, 4294967295
%152 = getelementptr inbounds i32, i32* %49, i64 %151
%153 = tail call i32 @get_pid(i32* %152)
store i32 %153, i32* %1
br i1 %44, label %155, label %154
154: ; preds = %150
store i32 %144, i32* %6
br label %155
155: ; preds = %154, %150
%156 = add nsw i32 %138, 1
br label %157
157: ; preds = %66, %155, %137, %141, %50
%158 = phi i32 [ %52, %50 ], [ %138, %137 ], [ %156, %155 ], [ %52, %66 ], [ %138, %141 ]
%159 = add i64 %51, 188
%160 = icmp slt i32 %158, 2
%161 = icmp slt i64 %159, %46
%162 = select i1 %160, i1 %161, i1 false
br i1 %162, label %50, label %163
163: ; preds = %157, %38, %8
%164 = phi i32 [ 0, %8 ], [ 0, %38 ], [ %158, %157 ]
ret i32 %164
}