#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 uint64_t;
typedef int uint32_t;

/* Variables and functions */
int strlen(char const *);
bool strcmp_clock_gettime(const char *name) {
  if (strlen(name) != 20)
    return false;
  if (((const uint64_t *)name)[0] != 0x635f6f7364765f5fULL)
    return false;
  if (((const uint64_t *)name)[1] != 0x7465675f6b636f6cULL)
    return false;
  if (((const uint32_t *)name)[4] != 0x656d6974UL)
    return false;
  return true;
}


x86 assembly (clang, -O0):
<strcmp_clock_gettime>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
call   1030 <strlen@plt>
cmp    $0x14,%eax
je     113a <strcmp_clock_gettime+0x2a>
movl   $0x0,-0x4(%rbp)
jmp    11ae <strcmp_clock_gettime+0x9e>
mov    -0x10(%rbp),%rax
movslq (%rax),%rax
movabs $0x635f6f7364765f5f,%rcx
6f 5f 63
cmp    %rcx,%rax
je     1160 <strcmp_clock_gettime+0x50>
movl   $0x0,-0x4(%rbp)
jmp    11ae <strcmp_clock_gettime+0x9e>
mov    -0x10(%rbp),%rax
movslq 0x4(%rax),%rax
movabs $0x7465675f6b636f6c,%rcx
67 65 74
cmp    %rcx,%rax
je     1187 <strcmp_clock_gettime+0x77>
movl   $0x0,-0x4(%rbp)
jmp    11ae <strcmp_clock_gettime+0x9e>
mov    -0x10(%rbp),%rax
movslq 0x10(%rax),%rax
cmp    $0x656d6974,%rax
je     11a7 <strcmp_clock_gettime+0x97>
movl   $0x0,-0x4(%rbp)
jmp    11ae <strcmp_clock_gettime+0x9e>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<strcmp_clock_gettime>:
push   %rax
call   1030 <strlen@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
define i32 @strcmp_clock_gettime(i8* %0) {
%2 = alloca i32
%3 = alloca i8*
store i8* %0, i8** %3
%4 = load i8*, i8** %3
%5 = call i32 @strlen(i8* %4)
%6 = icmp ne i32 %5, 20
br i1 %6, label %7, label %8
7: ; preds = %1
store i32 0, i32* %2
br label %33
8: ; preds = %1
%9 = load i8*, i8** %3
%10 = bitcast i8* %9 to i32*
%11 = getelementptr inbounds i32, i32* %10, i64 0
%12 = load i32, i32* %11
%13 = sext i32 %12 to i64
%14 = icmp ne i64 %13, 7160564473939779423
br i1 %14, label %15, label %16
15: ; preds = %8
store i32 0, i32* %2
br label %33
16: ; preds = %8
%17 = load i8*, i8** %3
%18 = bitcast i8* %17 to i32*
%19 = getelementptr inbounds i32, i32* %18, i64 1
%20 = load i32, i32* %19
%21 = sext i32 %20 to i64
%22 = icmp ne i64 %21, 8387223540568649580
br i1 %22, label %23, label %24
23: ; preds = %16
store i32 0, i32* %2
br label %33
24: ; preds = %16
%25 = load i8*, i8** %3
%26 = bitcast i8* %25 to i32*
%27 = getelementptr inbounds i32, i32* %26, i64 4
%28 = load i32, i32* %27
%29 = sext i32 %28 to i64
%30 = icmp ne i64 %29, 1701669236
br i1 %30, label %31, label %32
31: ; preds = %24
store i32 0, i32* %2
br label %33
32: ; preds = %24
store i32 1, i32* %2
br label %33
33: ; preds = %32, %31, %23, %15, %7
%34 = load i32, i32* %2
ret i32 %34
}

LLVM IR (-O2):
define i32 @strcmp_clock_gettime(i8* %0) {
%2 = tail call i32 @strlen(i8* %0)
ret i32 0
}