int ConfigKeyMap(int data[]) {
  int i;
  if (data[217] != 1)
    return 0;
  for (i = 0; i < 8; i++) {
    if (data[218 + 2] == 0)
      return 0;
    if ((data[218 + i * 3 + 0] >> 16) > (data[218 + i * 3 + 0] & 0xffff))
      return 0;
    if ((data[218 + i * 3 + 1] >> 16) > (data[218 + i * 3 + 1] & 0xffff))
      return 0;
  }
  return 1;
}


x86 assembly (clang, -O0):
<ConfigKeyMap>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmpl   $0x1,0x364(%rax)
je     1125 <ConfigKeyMap+0x25>
movl   $0x0,-0x4(%rbp)
jmp    1203 <ConfigKeyMap+0x103>
movl   $0x0,-0x14(%rbp)
cmpl   $0x8,-0x14(%rbp)
jge    11fc <ConfigKeyMap+0xfc>
mov    -0x10(%rbp),%rax
cmpl   $0x0,0x370(%rax)
jne    1153 <ConfigKeyMap+0x53>
movl   $0x0,-0x4(%rbp)
jmp    1203 <ConfigKeyMap+0x103>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x14(%rbp),%ecx
add    $0xda,%ecx
add    $0x0,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
sar    $0x10,%eax
mov    -0x10(%rbp),%rcx
imul   $0x3,-0x14(%rbp),%edx
add    $0xda,%edx
add    $0x0,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
and    $0xffff,%ecx
cmp    %ecx,%eax
jle    119e <ConfigKeyMap+0x9e>
movl   $0x0,-0x4(%rbp)
jmp    1203 <ConfigKeyMap+0x103>
mov    -0x10(%rbp),%rax
imul   $0x3,-0x14(%rbp),%ecx
add    $0xda,%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
mov    (%rax,%rcx,4),%eax
sar    $0x10,%eax
mov    -0x10(%rbp),%rcx
imul   $0x3,-0x14(%rbp),%edx
add    $0xda,%edx
add    $0x1,%edx
movslq %edx,%rdx
mov    (%rcx,%rdx,4),%ecx
and    $0xffff,%ecx
cmp    %ecx,%eax
jle    11e9 <ConfigKeyMap+0xe9>
movl   $0x0,-0x4(%rbp)
jmp    1203 <ConfigKeyMap+0x103>
jmp    11ee <ConfigKeyMap+0xee>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    112c <ConfigKeyMap+0x2c>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<ConfigKeyMap>:
xor    %eax,%eax
cmpl   $0x1,0x364(%rdi)
jne    1241 <ConfigKeyMap+0x141>
cmpl   $0x0,0x370(%rdi)
je     1241 <ConfigKeyMap+0x141>
mov    0x368(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x36c(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x374(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x378(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x380(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x384(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x38c(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x390(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x398(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x39c(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x3a4(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x3a8(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x3b0(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x3b4(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x3bc(%rdi),%ecx
movzwl %cx,%edx
sar    $0x10,%ecx
cmp    %edx,%ecx
jg     1241 <ConfigKeyMap+0x141>
mov    0x3c0(%rdi),%eax
movzwl %ax,%ecx
mov    %eax,%edx
sar    $0x10,%edx
xor    %eax,%eax
cmp    %ecx,%edx
setle  %al
ret

LLVM IR (-O0):
define i32 @ConfigKeyMap(i32* %0) {
%2 = alloca i32
%3 = alloca i32*
%4 = alloca i32
store i32* %0, i32** %3
%5 = load i32*, i32** %3
%6 = getelementptr inbounds i32, i32* %5, i64 217
%7 = load i32, i32* %6
%8 = icmp ne i32 %7, 1
br i1 %8, label %9, label %10
9: ; preds = %1
store i32 0, i32* %2
br label %67
10: ; preds = %1
store i32 0, i32* %4
br label %11
11: ; preds = %63, %10
%12 = load i32, i32* %4
%13 = icmp slt i32 %12, 8
br i1 %13, label %14, label %66
14: ; preds = %11
%15 = load i32*, i32** %3
%16 = getelementptr inbounds i32, i32* %15, i64 220
%17 = load i32, i32* %16
%18 = icmp eq i32 %17, 0
br i1 %18, label %19, label %20
19: ; preds = %14
store i32 0, i32* %2
br label %67
20: ; preds = %14
%21 = load i32*, i32** %3
%22 = load i32, i32* %4
%23 = mul nsw i32 %22, 3
%24 = add nsw i32 218, %23
%25 = add nsw i32 %24, 0
%26 = sext i32 %25 to i64
%27 = getelementptr inbounds i32, i32* %21, i64 %26
%28 = load i32, i32* %27
%29 = ashr i32 %28, 16
%30 = load i32*, i32** %3
%31 = load i32, i32* %4
%32 = mul nsw i32 %31, 3
%33 = add nsw i32 218, %32
%34 = add nsw i32 %33, 0
%35 = sext i32 %34 to i64
%36 = getelementptr inbounds i32, i32* %30, i64 %35
%37 = load i32, i32* %36
%38 = and i32 %37, 65535
%39 = icmp sgt i32 %29, %38
br i1 %39, label %40, label %41
40: ; preds = %20
store i32 0, i32* %2
br label %67
41: ; preds = %20
%42 = load i32*, i32** %3
%43 = load i32, i32* %4
%44 = mul nsw i32 %43, 3
%45 = add nsw i32 218, %44
%46 = add nsw i32 %45, 1
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds i32, i32* %42, i64 %47
%49 = load i32, i32* %48
%50 = ashr i32 %49, 16
%51 = load i32*, i32** %3
%52 = load i32, i32* %4
%53 = mul nsw i32 %52, 3
%54 = add nsw i32 218, %53
%55 = add nsw i32 %54, 1
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i32, i32* %51, i64 %56
%58 = load i32, i32* %57
%59 = and i32 %58, 65535
%60 = icmp sgt i32 %50, %59
br i1 %60, label %61, label %62
61: ; preds = %41
store i32 0, i32* %2
br label %67
62: ; preds = %41
br label %63
63: ; preds = %62
%64 = load i32, i32* %4
%65 = add nsw i32 %64, 1
store i32 %65, i32* %4
br label %11
66: ; preds = %11
store i32 1, i32* %2
br label %67
67: ; preds = %66, %61, %40, %19, %9
%68 = load i32, i32* %2
ret i32 %68
}

LLVM IR (-O2):
define i32 @ConfigKeyMap(i32* nocapture %0) {
%2 = getelementptr inbounds i32, i32* %0, i64 217
%3 = load i32, i32* %2
%4 = icmp eq i32 %3, 1
br i1 %4, label %5, label %106
5: ; preds = %1
%6 = getelementptr inbounds i32, i32* %0, i64 220
%7 = load i32, i32* %6
%8 = icmp eq i32 %7, 0
br i1 %8, label %106, label %9
9: ; preds = %5
%10 = getelementptr inbounds i32, i32* %0, i64 218
%11 = load i32, i32* %10
%12 = ashr i32 %11, 16
%13 = and i32 %11, 65535
%14 = icmp sgt i32 %12, %13
br i1 %14, label %106, label %100
15: ; preds = %100
%16 = getelementptr inbounds i32, i32* %0, i64 221
%17 = load i32, i32* %16
%18 = ashr i32 %17, 16
%19 = and i32 %17, 65535
%20 = icmp sgt i32 %18, %19
br i1 %20, label %106, label %21
21: ; preds = %15
%22 = getelementptr inbounds i32, i32* %0, i64 222
%23 = load i32, i32* %22
%24 = ashr i32 %23, 16
%25 = and i32 %23, 65535
%26 = icmp sgt i32 %24, %25
br i1 %26, label %106, label %27
27: ; preds = %21
%28 = getelementptr inbounds i32, i32* %0, i64 224
%29 = load i32, i32* %28
%30 = ashr i32 %29, 16
%31 = and i32 %29, 65535
%32 = icmp sgt i32 %30, %31
br i1 %32, label %106, label %33
33: ; preds = %27
%34 = getelementptr inbounds i32, i32* %0, i64 225
%35 = load i32, i32* %34
%36 = ashr i32 %35, 16
%37 = and i32 %35, 65535
%38 = icmp sgt i32 %36, %37
br i1 %38, label %106, label %39
39: ; preds = %33
%40 = getelementptr inbounds i32, i32* %0, i64 227
%41 = load i32, i32* %40
%42 = ashr i32 %41, 16
%43 = and i32 %41, 65535
%44 = icmp sgt i32 %42, %43
br i1 %44, label %106, label %45
45: ; preds = %39
%46 = getelementptr inbounds i32, i32* %0, i64 228
%47 = load i32, i32* %46
%48 = ashr i32 %47, 16
%49 = and i32 %47, 65535
%50 = icmp sgt i32 %48, %49
br i1 %50, label %106, label %51
51: ; preds = %45
%52 = getelementptr inbounds i32, i32* %0, i64 230
%53 = load i32, i32* %52
%54 = ashr i32 %53, 16
%55 = and i32 %53, 65535
%56 = icmp sgt i32 %54, %55
br i1 %56, label %106, label %57
57: ; preds = %51
%58 = getelementptr inbounds i32, i32* %0, i64 231
%59 = load i32, i32* %58
%60 = ashr i32 %59, 16
%61 = and i32 %59, 65535
%62 = icmp sgt i32 %60, %61
br i1 %62, label %106, label %63
63: ; preds = %57
%64 = getelementptr inbounds i32, i32* %0, i64 233
%65 = load i32, i32* %64
%66 = ashr i32 %65, 16
%67 = and i32 %65, 65535
%68 = icmp sgt i32 %66, %67
br i1 %68, label %106, label %69
69: ; preds = %63
%70 = getelementptr inbounds i32, i32* %0, i64 234
%71 = load i32, i32* %70
%72 = ashr i32 %71, 16
%73 = and i32 %71, 65535
%74 = icmp sgt i32 %72, %73
br i1 %74, label %106, label %75
75: ; preds = %69
%76 = getelementptr inbounds i32, i32* %0, i64 236
%77 = load i32, i32* %76
%78 = ashr i32 %77, 16
%79 = and i32 %77, 65535
%80 = icmp sgt i32 %78, %79
br i1 %80, label %106, label %81
81: ; preds = %75
%82 = getelementptr inbounds i32, i32* %0, i64 237
%83 = load i32, i32* %82
%84 = ashr i32 %83, 16
%85 = and i32 %83, 65535
%86 = icmp sgt i32 %84, %85
br i1 %86, label %106, label %87
87: ; preds = %81
%88 = getelementptr inbounds i32, i32* %0, i64 239
%89 = load i32, i32* %88
%90 = ashr i32 %89, 16
%91 = and i32 %89, 65535
%92 = icmp sgt i32 %90, %91
br i1 %92, label %106, label %93
93: ; preds = %87
%94 = getelementptr inbounds i32, i32* %0, i64 240
%95 = load i32, i32* %94
%96 = ashr i32 %95, 16
%97 = and i32 %95, 65535
%98 = icmp sle i32 %96, %97
%99 = zext i1 %98 to i32
br label %106
100: ; preds = %9
%101 = getelementptr inbounds i32, i32* %0, i64 219
%102 = load i32, i32* %101
%103 = ashr i32 %102, 16
%104 = and i32 %102, 65535
%105 = icmp sgt i32 %103, %104
br i1 %105, label %106, label %15
106: ; preds = %93, %9, %100, %15, %21, %27, %33, %39, %45, %51, %57, %63, %69, %75, %81, %87, %5, %1
%107 = phi i32 [ 0, %1 ], [ 0, %5 ], [ 0, %9 ], [ 0, %100 ], [ 0, %15 ], [ 0, %21 ], [ 0, %27 ], [ 0, %33 ], [ 0, %39 ], [ 0, %45 ], [ 0, %51 ], [ 0, %57 ], [ 0, %63 ], [ 0, %69 ], [ 0, %75 ], [ 0, %81 ], [ 0, %87 ], [ %99, %93 ]
ret i32 %107
}