#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 */
struct t_hashtable {
  int dummy;
};

/* Variables and functions */
int /*<<< orphan*/ hashtable_set(struct t_hashtable *, char const *,
                                 char const *);
void hook_focus_hashtable_map_cb(void *data, struct t_hashtable *hashtable,
                                 const void *key, const void *value) {
  struct t_hashtable *hashtable1;
  (void)hashtable;
  hashtable1 = (struct t_hashtable *)data;
  if (hashtable1 && key && value)
    hashtable_set(hashtable1, (const char *)key, (const char *)value);
}


x86 assembly (clang, -O0):
<hook_focus_hashtable_map_cb>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
je     1162 <hook_focus_hashtable_map_cb+0x52>
cmpq   $0x0,-0x18(%rbp)
je     1162 <hook_focus_hashtable_map_cb+0x52>
cmpq   $0x0,-0x20(%rbp)
je     1162 <hook_focus_hashtable_map_cb+0x52>
mov    -0x28(%rbp),%rdi
mov    -0x18(%rbp),%rsi
mov    -0x20(%rbp),%rdx
call   1030 <hashtable_set@plt>
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<hook_focus_hashtable_map_cb>:
test   %rdi,%rdi
je     112a <hook_focus_hashtable_map_cb+0x1a>
test   %rdx,%rdx
je     112a <hook_focus_hashtable_map_cb+0x1a>
test   %rcx,%rcx
je     112a <hook_focus_hashtable_map_cb+0x1a>
mov    %rdx,%rsi
mov    %rcx,%rdx
jmp    1030 <hashtable_set@plt>
ret

LLVM IR (-O0):
%struct.t_hashtable = type { i32 }
define void @hook_focus_hashtable_map_cb(i8* %0, %struct.t_hashtable* %1, i8* %2, i8* %3) {
%5 = alloca i8*
%6 = alloca %struct.t_hashtable*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca %struct.t_hashtable*
store i8* %0, i8** %5
store %struct.t_hashtable* %1, %struct.t_hashtable** %6
store i8* %2, i8** %7
store i8* %3, i8** %8
%10 = load %struct.t_hashtable*, %struct.t_hashtable** %6
%11 = load i8*, i8** %5
%12 = bitcast i8* %11 to %struct.t_hashtable*
store %struct.t_hashtable* %12, %struct.t_hashtable** %9
%13 = load %struct.t_hashtable*, %struct.t_hashtable** %9
%14 = icmp ne %struct.t_hashtable* %13, null
br i1 %14, label %15, label %26
15: ; preds = %4
%16 = load i8*, i8** %7
%17 = icmp ne i8* %16, null
br i1 %17, label %18, label %26
18: ; preds = %15
%19 = load i8*, i8** %8
%20 = icmp ne i8* %19, null
br i1 %20, label %21, label %26
21: ; preds = %18
%22 = load %struct.t_hashtable*, %struct.t_hashtable** %9
%23 = load i8*, i8** %7
%24 = load i8*, i8** %8
%25 = call i32 @hashtable_set(%struct.t_hashtable* %22, i8* %23, i8* %24)
br label %26
26: ; preds = %21, %18, %15, %4
ret void
}

LLVM IR (-O2):
%struct.t_hashtable = type { i32 }
define void @hook_focus_hashtable_map_cb(i8* %0, %struct.t_hashtable* nocapture readnone %1, i8* %2, i8* %3) {
%5 = icmp ne i8* %0, null
%6 = icmp ne i8* %2, null
%7 = and i1 %5, %6
%8 = icmp ne i8* %3, null
%9 = and i1 %7, %8
br i1 %9, label %10, label %13
10: ; preds = %4
%11 = bitcast i8* %0 to %struct.t_hashtable*
%12 = tail call i32 @hashtable_set(%struct.t_hashtable* %11, i8* %2, i8* %3)
br label %13
13: ; preds = %10, %4
ret void
}