int BinarySearchOfSortedGraphList(int *subGnodes, int numNodes, int **L,
                                  int lenL) {
  int i, comp, found, hi, isGreaterThan, isLessThan, lo, mid;
  found = lo = 0;
  hi = lenL;
  while (lo < hi) {
    mid = lo + ((hi - lo) / 2);
    i = isGreaterThan = isLessThan = 0;
    while (i < numNodes) {
      comp = L[mid][i] - subGnodes[i];
      if (comp < 0) {
        isLessThan = 1;
        break;
      } else if (comp > 0) {
        isGreaterThan = 1;
        break;
      }
      i++;
    }
    if (!isLessThan && !isGreaterThan)
      return -1;
    if (isLessThan)
      lo = mid + 1;
    else
      hi = mid;
  }
  if (lo < lenL) {
    found = 1;
    i = 0;
    while (i < numNodes) {
      if (L[mid][i] != subGnodes[i]) {
        found = 0;
        break;
      }
      i++;
    }
  }
  if (found)
    return -1;
  else
    return lo;
}


x86 assembly (clang, -O0):
<BinarySearchOfSortedGraphList>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %ecx,-0x24(%rbp)
movl   $0x0,-0x40(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x24(%rbp),%eax
mov    %eax,-0x34(%rbp)
mov    -0x40(%rbp),%eax
cmp    -0x34(%rbp),%eax
jge    1214 <BinarySearchOfSortedGraphList+0x114>
mov    -0x40(%rbp),%eax
mov    %eax,-0x48(%rbp)
mov    -0x34(%rbp),%eax
sub    -0x40(%rbp),%eax
mov    $0x2,%ecx
cltd
idiv   %ecx
mov    %eax,%ecx
mov    -0x48(%rbp),%eax
add    %ecx,%eax
mov    %eax,-0x44(%rbp)
movl   $0x0,-0x3c(%rbp)
movl   $0x0,-0x38(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11d1 <BinarySearchOfSortedGraphList+0xd1>
mov    -0x20(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
movslq -0x28(%rbp),%rdx
sub    (%rcx,%rdx,4),%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jge    11a8 <BinarySearchOfSortedGraphList+0xa8>
movl   $0x1,-0x3c(%rbp)
jmp    11d1 <BinarySearchOfSortedGraphList+0xd1>
cmpl   $0x0,-0x2c(%rbp)
jle    11be <BinarySearchOfSortedGraphList+0xbe>
movl   $0x1,-0x38(%rbp)
jmp    11d1 <BinarySearchOfSortedGraphList+0xd1>
jmp    11c3 <BinarySearchOfSortedGraphList+0xc3>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    1165 <BinarySearchOfSortedGraphList+0x65>
cmpl   $0x0,-0x3c(%rbp)
jne    11f1 <BinarySearchOfSortedGraphList+0xf1>
cmpl   $0x0,-0x38(%rbp)
jne    11f1 <BinarySearchOfSortedGraphList+0xf1>
movl   $0xffffffff,-0x4(%rbp)
jmp    1299 <BinarySearchOfSortedGraphList+0x199>
cmpl   $0x0,-0x3c(%rbp)
je     1209 <BinarySearchOfSortedGraphList+0x109>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x40(%rbp)
jmp    120f <BinarySearchOfSortedGraphList+0x10f>
mov    -0x44(%rbp),%eax
mov    %eax,-0x34(%rbp)
jmp    1126 <BinarySearchOfSortedGraphList+0x26>
mov    -0x40(%rbp),%eax
cmp    -0x24(%rbp),%eax
jge    127d <BinarySearchOfSortedGraphList+0x17d>
movl   $0x1,-0x30(%rbp)
movl   $0x0,-0x28(%rbp)
mov    -0x28(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    1278 <BinarySearchOfSortedGraphList+0x178>
mov    -0x20(%rbp),%rax
movslq -0x44(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
movslq -0x28(%rbp),%rcx
mov    (%rax,%rcx,4),%eax
mov    -0x10(%rbp),%rcx
movslq -0x28(%rbp),%rdx
cmp    (%rcx,%rdx,4),%eax
je     126a <BinarySearchOfSortedGraphList+0x16a>
movl   $0x0,-0x30(%rbp)
jmp    1278 <BinarySearchOfSortedGraphList+0x178>
mov    -0x28(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x28(%rbp)
jmp    122e <BinarySearchOfSortedGraphList+0x12e>
jmp    127d <BinarySearchOfSortedGraphList+0x17d>
cmpl   $0x0,-0x30(%rbp)
je     1293 <BinarySearchOfSortedGraphList+0x193>
movl   $0xffffffff,-0x4(%rbp)
jmp    1299 <BinarySearchOfSortedGraphList+0x199>
mov    -0x40(%rbp),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<BinarySearchOfSortedGraphList>:
push   %rbp
push   %r15
push   %r14
push   %rbx
test   %ecx,%ecx
jle    117a <BinarySearchOfSortedGraphList+0x7a>
mov    $0xffffffff,%eax
test   %esi,%esi
jle    11b6 <BinarySearchOfSortedGraphList+0xb6>
mov    %esi,%r9d
xor    %r8d,%r8d
mov    %ecx,%r10d
mov    %r10d,%ebp
sub    %r8d,%ebp
mov    %ebp,%r14d
shr    $0x1f,%r14d
add    %ebp,%r14d
sar    %r14d
add    %r8d,%r14d
movslq %r14d,%r11
mov    (%rdx,%r11,8),%r15
xor    %ebp,%ebp
nop
mov    (%r15,%rbp,4),%ebx
sub    (%rdi,%rbp,4),%ebx
js     1160 <BinarySearchOfSortedGraphList+0x60>
jne    1170 <BinarySearchOfSortedGraphList+0x70>
add    $0x1,%rbp
cmp    %rbp,%r9
jne    1140 <BinarySearchOfSortedGraphList+0x40>
jmp    11b6 <BinarySearchOfSortedGraphList+0xb6>
cs nopw 0x0(%rax,%rax,1)
add    $0x1,%r14d
mov    %r14d,%r8d
cmp    %r8d,%r10d
jg     1120 <BinarySearchOfSortedGraphList+0x20>
jmp    1180 <BinarySearchOfSortedGraphList+0x80>
xchg   %ax,%ax
mov    %r14d,%r10d
cmp    %r8d,%r10d
jg     1120 <BinarySearchOfSortedGraphList+0x20>
jmp    1180 <BinarySearchOfSortedGraphList+0x80>
xor    %r8d,%r8d
xor    %r11d,%r11d
cmp    %ecx,%r8d
jge    11b3 <BinarySearchOfSortedGraphList+0xb3>
mov    $0xffffffff,%eax
test   %esi,%esi
jle    11b6 <BinarySearchOfSortedGraphList+0xb6>
mov    (%rdx,%r11,8),%rcx
mov    %esi,%edx
xor    %esi,%esi
cs nopw 0x0(%rax,%rax,1)
mov    (%rcx,%rsi,4),%ebp
cmp    (%rdi,%rsi,4),%ebp
jne    11b3 <BinarySearchOfSortedGraphList+0xb3>
add    $0x1,%rsi
cmp    %rsi,%rdx
jne    11a0 <BinarySearchOfSortedGraphList+0xa0>
jmp    11b6 <BinarySearchOfSortedGraphList+0xb6>
mov    %r8d,%eax
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @BinarySearchOfSortedGraphList(i32* %0, i32 %1, i32** %2, i32 %3) {
%5 = alloca i32
%6 = alloca i32*
%7 = alloca i32
%8 = alloca i32**
%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
store i32* %0, i32** %6
store i32 %1, i32* %7
store i32** %2, i32*** %8
store i32 %3, i32* %9
store i32 0, i32* %16
store i32 0, i32* %12
%18 = load i32, i32* %9
store i32 %18, i32* %13
br label %19
19: ; preds = %76, %4
%20 = load i32, i32* %16
%21 = load i32, i32* %13
%22 = icmp slt i32 %20, %21
br i1 %22, label %23, label %77
23: ; preds = %19
%24 = load i32, i32* %16
%25 = load i32, i32* %13
%26 = load i32, i32* %16
%27 = sub nsw i32 %25, %26
%28 = sdiv i32 %27, 2
%29 = add nsw i32 %24, %28
store i32 %29, i32* %17
store i32 0, i32* %15
store i32 0, i32* %14
store i32 0, i32* %10
br label %30
30: ; preds = %58, %23
%31 = load i32, i32* %10
%32 = load i32, i32* %7
%33 = icmp slt i32 %31, %32
br i1 %33, label %34, label %61
34: ; preds = %30
%35 = load i32**, i32*** %8
%36 = load i32, i32* %17
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i32*, i32** %35, i64 %37
%39 = load i32*, i32** %38
%40 = load i32, i32* %10
%41 = sext i32 %40 to i64
%42 = getelementptr inbounds i32, i32* %39, i64 %41
%43 = load i32, i32* %42
%44 = load i32*, i32** %6
%45 = load i32, i32* %10
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds i32, i32* %44, i64 %46
%48 = load i32, i32* %47
%49 = sub nsw i32 %43, %48
store i32 %49, i32* %11
%50 = load i32, i32* %11
%51 = icmp slt i32 %50, 0
br i1 %51, label %52, label %53
52: ; preds = %34
store i32 1, i32* %15
br label %61
53: ; preds = %34
%54 = load i32, i32* %11
%55 = icmp sgt i32 %54, 0
br i1 %55, label %56, label %57
56: ; preds = %53
store i32 1, i32* %14
br label %61
57: ; preds = %53
br label %58
58: ; preds = %57
%59 = load i32, i32* %10
%60 = add nsw i32 %59, 1
store i32 %60, i32* %10
br label %30
61: ; preds = %56, %52, %30
%62 = load i32, i32* %15
%63 = icmp ne i32 %62, 0
br i1 %63, label %68, label %64
64: ; preds = %61
%65 = load i32, i32* %14
%66 = icmp ne i32 %65, 0
br i1 %66, label %68, label %67
67: ; preds = %64
store i32 -1, i32* %5
br label %113
68: ; preds = %64, %61
%69 = load i32, i32* %15
%70 = icmp ne i32 %69, 0
br i1 %70, label %71, label %74
71: ; preds = %68
%72 = load i32, i32* %17
%73 = add nsw i32 %72, 1
store i32 %73, i32* %16
br label %76
74: ; preds = %68
%75 = load i32, i32* %17
store i32 %75, i32* %13
br label %76
76: ; preds = %74, %71
br label %19
77: ; preds = %19
%78 = load i32, i32* %16
%79 = load i32, i32* %9
%80 = icmp slt i32 %78, %79
br i1 %80, label %81, label %107
81: ; preds = %77
store i32 1, i32* %12
store i32 0, i32* %10
br label %82
82: ; preds = %103, %81
%83 = load i32, i32* %10
%84 = load i32, i32* %7
%85 = icmp slt i32 %83, %84
br i1 %85, label %86, label %106
86: ; preds = %82
%87 = load i32**, i32*** %8
%88 = load i32, i32* %17
%89 = sext i32 %88 to i64
%90 = getelementptr inbounds i32*, i32** %87, i64 %89
%91 = load i32*, i32** %90
%92 = load i32, i32* %10
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i32, i32* %91, i64 %93
%95 = load i32, i32* %94
%96 = load i32*, i32** %6
%97 = load i32, i32* %10
%98 = sext i32 %97 to i64
%99 = getelementptr inbounds i32, i32* %96, i64 %98
%100 = load i32, i32* %99
%101 = icmp ne i32 %95, %100
br i1 %101, label %102, label %103
102: ; preds = %86
store i32 0, i32* %12
br label %106
103: ; preds = %86
%104 = load i32, i32* %10
%105 = add nsw i32 %104, 1
store i32 %105, i32* %10
br label %82
106: ; preds = %102, %82
br label %107
107: ; preds = %106, %77
%108 = load i32, i32* %12
%109 = icmp ne i32 %108, 0
br i1 %109, label %110, label %111
110: ; preds = %107
store i32 -1, i32* %5
br label %113
111: ; preds = %107
%112 = load i32, i32* %16
store i32 %112, i32* %5
br label %113
113: ; preds = %111, %110, %67
%114 = load i32, i32* %5
ret i32 %114
}

LLVM IR (-O2):
define i32 @BinarySearchOfSortedGraphList(i32* nocapture %0, i32 %1, i32** nocapture %2, i32 %3) {
%5 = icmp sgt i32 %3, 0
br i1 %5, label %6, label %38
6: ; preds = %4
%7 = icmp sgt i32 %1, 0
br i1 %7, label %8, label %58
8: ; preds = %6
%9 = zext i32 %1 to i64
br label %10
10: ; preds = %8, %34
%11 = phi i32 [ %36, %34 ], [ 0, %8 ]
%12 = phi i32 [ %35, %34 ], [ %3, %8 ]
%13 = sub nsw i32 %12, %11
%14 = sdiv i32 %13, 2
%15 = add nsw i32 %14, %11
%16 = sext i32 %15 to i64
%17 = getelementptr inbounds i32*, i32** %2, i64 %16
%18 = load i32*, i32** %17
br label %21
19: ; preds = %29
%20 = icmp eq i64 %31, %9
br i1 %20, label %58, label %21
21: ; preds = %10, %19
%22 = phi i64 [ 0, %10 ], [ %31, %19 ]
%23 = getelementptr inbounds i32, i32* %18, i64 %22
%24 = load i32, i32* %23
%25 = getelementptr inbounds i32, i32* %0, i64 %22
%26 = load i32, i32* %25
%27 = sub nsw i32 %24, %26
%28 = icmp slt i32 %27, 0
br i1 %28, label %32, label %29
29: ; preds = %21
%30 = icmp eq i32 %27, 0
%31 = add nuw nsw i64 %22, 1
br i1 %30, label %19, label %34
32: ; preds = %21
%33 = add nsw i32 %15, 1
br label %34
34: ; preds = %29, %32
%35 = phi i32 [ %12, %32 ], [ %15, %29 ]
%36 = phi i32 [ %33, %32 ], [ %11, %29 ]
%37 = icmp sgt i32 %35, %36
br i1 %37, label %10, label %38
38: ; preds = %34, %4
%39 = phi i32 [ 0, %4 ], [ %36, %34 ]
%40 = phi i64 [ 0, %4 ], [ %16, %34 ]
%41 = icmp slt i32 %39, %3
br i1 %41, label %42, label %58
42: ; preds = %38
%43 = icmp sgt i32 %1, 0
br i1 %43, label %44, label %58
44: ; preds = %42
%45 = getelementptr inbounds i32*, i32** %2, i64 %40
%46 = load i32*, i32** %45
%47 = zext i32 %1 to i64
br label %50
48: ; preds = %50
%49 = icmp eq i64 %57, %47
br i1 %49, label %58, label %50
50: ; preds = %44, %48
%51 = phi i64 [ 0, %44 ], [ %57, %48 ]
%52 = getelementptr inbounds i32, i32* %46, i64 %51
%53 = load i32, i32* %52
%54 = getelementptr inbounds i32, i32* %0, i64 %51
%55 = load i32, i32* %54
%56 = icmp eq i32 %53, %55
%57 = add nuw nsw i64 %51, 1
br i1 %56, label %48, label %58
58: ; preds = %19, %50, %48, %6, %42, %38
%59 = phi i32 [ %39, %38 ], [ -1, %42 ], [ -1, %6 ], [ %39, %50 ], [ -1, %48 ], [ -1, %19 ]
ret i32 %59
}