int is_ope2(const char *c1, const char *c2) {
  if (*c2 == ' ' || *c2 == '\t' || *c2 == '\n')
    return 0;
  char s[2];
  s[0] = *c1;
  s[1] = *c2;
  char ope2[][2] = {"++", "--", "||", "&&", "==", "<=", ">=", "=<", "=>",
                    "!=", "+=", "-=", "*=", "/=", "%=", "<<", ">>", "&=",
                    "|=", "^=", "//", "/*", "*/", "->", "EN"};
  int i;
  for (i = 0; ope2[i][0] != 'E'; i++) {
    if (memcmp(ope2[i], s, 2) == 0)
      return 1;
  }
  return 0;
}


x86 assembly (clang, -O0):
<is_ope2>:
push   %rbp
mov    %rsp,%rbp
sub    $0x60,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
je     1150 <is_ope2+0x40>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x9,%eax
je     1150 <is_ope2+0x40>
mov    -0x18(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    115c <is_ope2+0x4c>
movl   $0x0,-0x4(%rbp)
jmp    11ed <is_ope2+0xdd>
mov    -0x10(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x1a(%rbp)
mov    -0x18(%rbp),%rax
mov    (%rax),%al
mov    %al,-0x19(%rbp)
lea    -0x50(%rbp),%rdi
lea    0xe87(%rip),%rsi
mov    $0x32,%edx
call   1030 <memcpy@plt>
movl   $0x0,-0x54(%rbp)
movslq -0x54(%rbp),%rax
movsbl -0x50(%rbp,%rax,2),%eax
cmp    $0x45,%eax
je     11e6 <is_ope2+0xd6>
movslq -0x54(%rbp),%rcx
lea    -0x50(%rbp),%rax
shl    $0x1,%rcx
add    %rcx,%rax
lea    -0x1a(%rbp),%rcx
mov    (%rcx),%cx
mov    (%rax),%ax
sub    %cx,%ax
setne  %al
movzbl %al,%eax
cmp    $0x0,%eax
jne    11d3 <is_ope2+0xc3>
movl   $0x1,-0x4(%rbp)
jmp    11ed <is_ope2+0xdd>
jmp    11d8 <is_ope2+0xc8>
mov    -0x54(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x54(%rbp)
jmp    118a <is_ope2+0x7a>
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x60,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<is_ope2>:
movzbl (%rsi),%ecx
cmp    $0x20,%rcx
ja     111c <is_ope2+0x1c>
xor    %eax,%eax
movabs $0x100000600,%rdx
bt     %rcx,%rdx
jae    111c <is_ope2+0x1c>
ret
mov    (%rdi),%al
mov    %al,-0x2(%rsp)
mov    %cl,-0x1(%rsp)
xor    %eax,%eax
lea    0xed1(%rip),%rcx
nop
movzwl (%rax,%rcx,1),%edx
cmp    -0x2(%rsp),%dx
je     1148 <is_ope2+0x48>
add    $0x2,%rax
cmp    $0x30,%rax
jne    1130 <is_ope2+0x30>
xor    %eax,%eax
ret
mov    $0x1,%eax
ret

LLVM IR (-O0):
@__const.is_ope2.ope2 = [25 x [2 x i8]] [[2 x i8] c"++", [2 x i8] c"--", [2 x i8] c"||", [2 x i8] c"&&", [2 x i8] c"==", [2 x i8] c"<=", [2 x i8] c">=", [2 x i8] c"=<", [2 x i8] c"=>", [2 x i8] c"!=", [2 x i8] c"+=", [2 x i8] c"-=", [2 x i8] c"*=", [2 x i8] c"/=", [2 x i8] c"%=", [2 x i8] c"<<", [2 x i8] c">>", [2 x i8] c"&=", [2 x i8] c"|=", [2 x i8] c"^=", [2 x i8] c"//", [2 x i8] c"/*", [2 x i8] c"*/", [2 x i8] c"->", [2 x i8] c"EN"]
define i32 @is_ope2(i8* %0, i8* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i8*
%6 = alloca [2 x i8]
%7 = alloca [25 x [2 x i8]]
%8 = alloca i32
store i8* %0, i8** %4
store i8* %1, i8** %5
%9 = load i8*, i8** %5
%10 = load i8, i8* %9
%11 = sext i8 %10 to i32
%12 = icmp eq i32 %11, 32
br i1 %12, label %23, label %13
13: ; preds = %2
%14 = load i8*, i8** %5
%15 = load i8, i8* %14
%16 = sext i8 %15 to i32
%17 = icmp eq i32 %16, 9
br i1 %17, label %23, label %18
18: ; preds = %13
%19 = load i8*, i8** %5
%20 = load i8, i8* %19
%21 = sext i8 %20 to i32
%22 = icmp eq i32 %21, 10
br i1 %22, label %23, label %24
23: ; preds = %18, %13, %2
store i32 0, i32* %3
br label %54
24: ; preds = %18
%25 = load i8*, i8** %4
%26 = load i8, i8* %25
%27 = getelementptr inbounds [2 x i8], [2 x i8]* %6, i64 0, i64 0
store i8 %26, i8* %27
%28 = load i8*, i8** %5
%29 = load i8, i8* %28
%30 = getelementptr inbounds [2 x i8], [2 x i8]* %6, i64 0, i64 1
store i8 %29, i8* %30
%31 = bitcast [25 x [2 x i8]]* %7 to i8*
store i32 0, i32* %8
br label %32
32: ; preds = %50, %24
%33 = load i32, i32* %8
%34 = sext i32 %33 to i64
%35 = getelementptr inbounds [25 x [2 x i8]], [25 x [2 x i8]]* %7, i64 0, i64 %34
%36 = getelementptr inbounds [2 x i8], [2 x i8]* %35, i64 0, i64 0
%37 = load i8, i8* %36
%38 = sext i8 %37 to i32
%39 = icmp ne i32 %38, 69
br i1 %39, label %40, label %53
40: ; preds = %32
%41 = load i32, i32* %8
%42 = sext i32 %41 to i64
%43 = getelementptr inbounds [25 x [2 x i8]], [25 x [2 x i8]]* %7, i64 0, i64 %42
%44 = getelementptr inbounds [2 x i8], [2 x i8]* %43, i64 0, i64 0
%45 = getelementptr inbounds [2 x i8], [2 x i8]* %6, i64 0, i64 0
%46 = call i32 @memcmp(i8* %44, i8* %45, i64 2)
%47 = icmp eq i32 %46, 0
br i1 %47, label %48, label %49
48: ; preds = %40
store i32 1, i32* %3
br label %54
49: ; preds = %40
br label %50
50: ; preds = %49
%51 = load i32, i32* %8
%52 = add nsw i32 %51, 1
store i32 %52, i32* %8
br label %32
53: ; preds = %32
store i32 0, i32* %3
br label %54
54: ; preds = %53, %48, %23
%55 = load i32, i32* %3
ret i32 %55
}

LLVM IR (-O2):
@__const.is_ope2.ope2 = [25 x [2 x i8]] [[2 x i8] c"++", [2 x i8] c"--", [2 x i8] c"||", [2 x i8] c"&&", [2 x i8] c"==", [2 x i8] c"<=", [2 x i8] c">=", [2 x i8] c"=<", [2 x i8] c"=>", [2 x i8] c"!=", [2 x i8] c"+=", [2 x i8] c"-=", [2 x i8] c"*=", [2 x i8] c"/=", [2 x i8] c"%=", [2 x i8] c"<<", [2 x i8] c">>", [2 x i8] c"&=", [2 x i8] c"|=", [2 x i8] c"^=", [2 x i8] c"//", [2 x i8] c"/*", [2 x i8] c"*/", [2 x i8] c"->", [2 x i8] c"EN"]
define i32 @is_ope2(i8* nocapture %0, i8* nocapture %1) {
%3 = alloca [2 x i8]
%4 = load i8, i8* %1
switch i8 %4, label %5 [
i8 32, label %19
i8 9, label %19
i8 10, label %19
]
5: ; preds = %2
%6 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 0
%7 = load i8, i8* %0
store i8 %7, i8* %6
%8 = getelementptr inbounds [2 x i8], [2 x i8]* %3, i64 0, i64 1
store i8 %4, i8* %8
br label %11
9: ; preds = %11
%10 = icmp eq i64 %16, 24
br i1 %10, label %17, label %11
11: ; preds = %5, %9
%12 = phi i64 [ 0, %5 ], [ %16, %9 ]
%13 = getelementptr inbounds [25 x [2 x i8]], [25 x [2 x i8]]* @__const.is_ope2.ope2, i64 0, i64 %12, i64 0
%14 = call i32 @bcmp(i8* dereferenceable(2) %13, i8* dereferenceable(2) %6, i64 2)
%15 = icmp eq i32 %14, 0
%16 = add nuw nsw i64 %12, 1
br i1 %15, label %17, label %9
17: ; preds = %9, %11
%18 = phi i32 [ 1, %11 ], [ 0, %9 ]
br label %19
19: ; preds = %2, %2, %2, %17
%20 = phi i32 [ %18, %17 ], [ 0, %2 ], [ 0, %2 ], [ 0, %2 ]
ret i32 %20
}