Skip to content

Instantly share code, notes, and snippets.

@scottcarr
Created March 28, 2016 23:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scottcarr/72cf5cc3396e8a7156bc to your computer and use it in GitHub Desktop.
Save scottcarr/72cf5cc3396e8a7156bc to your computer and use it in GitHub Desktop.
Wrong MachineOperand accessor
; ModuleID = 'ld-temp.o'
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
%struct.option = type { i8*, i32, i32*, i32 }
%struct._IO_FILE = type { i32, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, %struct._IO_marker*, %struct._IO_FILE*, i32, i32, i64, i16, i8, [1 x i8], i8*, i64, i8*, i8*, i8*, i8*, i64, i32, [20 x i8] }
%struct._IO_marker = type { %struct._IO_marker*, %struct._IO_FILE*, i32 }
%union.pthread_mutex_t.46 = type { %struct.__pthread_mutex_s.45 }
%struct.__pthread_mutex_s.45 = type { i32, i32, i32, i32, i32, i16, i16, %struct.__pthread_internal_list.44 }
%struct.__pthread_internal_list.44 = type { %struct.__pthread_internal_list.44*, %struct.__pthread_internal_list.44* }
%struct.rb_root = type { %struct.rb_node* }
%struct.rb_node = type { i64, %struct.rb_node*, %struct.rb_node* }
%struct.mk_list = type { %struct.mk_list*, %struct.mk_list* }
%struct.mk_sched_notif = type { %struct.mk_event }
%struct.mk_event = type { i32, i32, i32, i8, i8*, i32 (i8*)*, %struct.mk_list }
%struct.mk_sched_handler = type { i8*, i32 (%struct.mk_sched_conn*, %struct.mk_sched_worker*)*, i32 (%struct.mk_sched_conn*, %struct.mk_sched_worker*, i32)*, i32 (%struct.mk_sched_conn*, %struct.mk_sched_worker*)*, i32 (i8*, i8*)*, i32, i8 }
%struct.mk_sched_conn = type { %struct.mk_event, i32, i32, i8, i64, %struct.mk_sched_handler*, %struct.mk_server_listen*, %struct.mk_plugin_network*, %struct.mk_channel, %struct.mk_list, %struct.rb_node, i8* }
%struct.mk_server_listen = type { %struct.mk_event, i32, %struct.mk_plugin*, %struct.mk_sched_handler*, %struct.mk_config_listener*, %struct.mk_list }
%struct.mk_plugin = type { i8*, i8*, i8*, i32, i8, i32 (%struct.plugin_api**, i8*)*, i32 (...)*, i32 (%struct.mk_server_config*)*, void (...)*, %struct.mk_plugin_network*, %struct.mk_plugin_stage*, i8*, i8*, i32*, %struct.mk_list, i32 }
%struct.plugin_api = type { i32 (i32, i32)*, i32 (i32)*, i32 (i32)*, i32 (i32)*, i32 (i32)*, i32 (i8*, i32, i32)*, i32 (i8*, i32)*, i32 (i32)*, i32 (...)*, i32 (i32)*, i32 (i32, i8*, i32)*, i32 (i32, i32, i64*, i64)*, i32 (i32, i8**, i32, i64*)*, %struct.mk_server_config*, %struct.mk_list*, %struct.mk_sched_worker*, void (i32, i8*, ...)*, i32 (%struct.mk_http_session*, i32)*, i32 (i32, %struct.mk_http_session*, %struct.mk_http_request*)*, i8* (i64)*, i8* (i64)*, i8* (i8*, i64)*, void (i8*)*, void (%struct.mk_ptr_t*, i8*)*, void (i8*, i64)*, i8* (i8*, i64)*, i32 (i64, %struct.mk_ptr_t*)*, i32 (i8*, i8*, i32)*, i32 (i8*, i8*, i32, i32)*, i32 (i8*, i32, i32)*, i8* (i8**, i64*, i8*, ...)*, i8* (i8*)*, i8* (i8*, i32, i32)*, %struct.mk_list* (i8*)*, void (%struct.mk_list*)*, i8* (i8*)*, i32 (i8*, %struct.file_info*, i32)*, i32 (%struct.mk_http_session*, %struct.mk_http_request*)*, %struct.mk_http_header* (i32, %struct.mk_http_request*, i8*, i32)*, i32 (%struct.mk_http_request*, i8*, i32)*, void (%struct.mk_http_request*, i32)*, %struct.mk_stream* (i32, %struct.mk_channel*, i8*, i64, i8*, void (%struct.mk_stream*)*, void (%struct.mk_stream*, i64)*, void (%struct.mk_stream*, i32)*)*, %struct.mk_channel* (i32, i32)*, i32 (%struct.mk_channel*)*, i32 (%struct.mk_channel*, i64*)*, void (%struct.mk_channel*, %struct.mk_stream*)*, void (%struct.mk_stream*, i32, %struct.mk_channel*, i8*, i64, i8*, void (%struct.mk_stream*)*, void (%struct.mk_stream*, i64)*, void (%struct.mk_stream*, i32)*)*, %struct.mk_iov* (i32, i32)*, %struct.mk_iov* (%struct.mk_iov*, i32)*, void (%struct.mk_iov*)*, void (%struct.mk_iov*)*, i32 (%struct.mk_iov*, i8*, i32, i32)*, i32 (%struct.mk_iov*, i8*, i32, i32, i32)*, i64 (i32, %struct.mk_iov*)*, void (%struct.mk_iov*)*, i8* (i8*, i8*)*, %struct.mk_event_loop* (i32)*, %struct.mk_event_fdt* (...)*, i32 (%struct.mk_event_loop*, i32, i32, i32, i8*)*, i32 (%struct.mk_event_loop*, %struct.mk_event*)*, i32 (%struct.mk_event_loop*, i64, i64, i8*)*, i32 (%struct.mk_event_loop*, i32*, i32*, i8*)*, i32 (%struct.mk_event_loop*)*, i8* (...)*, %struct.mimetype* (i8*)*, void (%struct.rb_node*, %struct.rb_root*)*, void (%struct.rb_node*, %struct.rb_root*)*, void (%struct.rb_node*, %struct.rb_node*, %struct.rb_node**)*, %struct.mk_rconf* (i8*)*, %struct.mk_rconf* (i8*)*, void (%struct.mk_rconf*)*, %struct.mk_rconf_section* (%struct.mk_rconf*, i8*)*, i8* (%struct.mk_rconf_section*, i8*, i32)*, %struct.mk_event_loop* (...)*, i32 (i32)*, %struct.mk_sched_conn* (%struct.mk_sched_worker*, i32)*, void (%struct.mk_event*)*, %struct.mk_sched_worker* (...)*, i64 (void (i8*)*, i8*)*, i32 (i8*)*, i32 (i32, i32, %struct.mk_plugin*, i32)*, i32 (i32)*, %struct.plugin_event* (i32)*, i32 (i32, i32, i32)*, i32 (...)*, i32 (i8**, i64)*, %struct.mk_ptr_t* (...)*, void (i8*, i32, i8*, i8*, i32, i8*, ...)*, i32 (i32)*, void ()*, i32 (...)*, i32 (i8*, i64)*, %struct.mk_handler_param* (i32, %struct.mk_list*)* }
%struct.mk_server_config = type { i32, i32, i32, i32, i16, i16, i8, i8, i8, i8, i8*, %struct.mk_ptr_t, %struct.mk_list, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8*, i8**, i32, i32, i32, i8, i8, i8, i8, i32, i32, i32, i32, i32, i32, %struct.mk_list*, i32, %struct.mk_list, i32, %struct.mk_list, i32, i8*, i8*, [16 x i8], [32 x i8], i32, %struct.mk_rconf*, %struct.mk_plugin_network*, %struct.mk_list, %struct.mk_list, %struct.mk_list, %struct.mk_list, %struct.mk_list }
%struct.mk_ptr_t = type { i8*, i64 }
%struct.mk_rconf = type { i32, i8*, %struct.mk_list }
%struct.mk_http_session = type { i32, i32, i32, i32, i32, i32, %struct.mk_channel*, %struct.mk_sched_conn*, i32, i32, %struct.rb_node, %struct.mk_list, i64, i8*, [4096 x i8], %struct.mk_http_request, %struct.mk_http_parser }
%struct.mk_http_request = type { i32, i32, i32, i64, %struct.mk_stream, %struct.mk_stream, %struct.mk_stream, %struct.mk_stream, i32, i32, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, i32, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, [128 x i8], %struct.mk_ptr_t, i32, i8*, %struct.file_info, i32, i32, i32, %struct.host*, %struct.host_alias*, i8*, %struct.mk_http_session*, %struct.mk_list, %struct.response_headers }
%struct.mk_stream = type { i32, i32, i32, i32, i32, i64, i64, %struct.mk_channel*, i8*, i8*, void (%struct.mk_stream*)*, void (%struct.mk_stream*, i64)*, void (%struct.mk_stream*, i32)*, %struct.mk_list }
%struct.file_info = type { i64, i64, i32, i8, i8, i8, i8, i8, i8 }
%struct.host = type { i8*, %struct.mk_list, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_rconf*, %struct.mk_list, %struct.mk_list, %struct.mk_list }
%struct.host_alias = type { i8*, i32, %struct.mk_list }
%struct.response_headers = type { i32, i32, %struct.mk_ptr_t, i64, i64, i32, i32, i32, i32, i32, [2 x i32], i64, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, i8*, i32, [32 x i8], %struct.mk_iov*, i32, %struct.mk_iov, [32 x %struct.mk_ptr_t], [32 x i8*] }
%struct.mk_iov = type { i32, i32, i32, i64, %struct.mk_ptr_t*, i8** }
%struct.mk_http_parser = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i64, i32, i32, i32, i32, i32, i32, i32, i32, [20 x %struct.mk_http_header], i32, %struct.mk_list, [8 x %struct.mk_http_header] }
%struct.mk_http_header = type { i32, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_list }
%struct.mk_event_loop = type { i32, i32, %struct.mk_event*, i8* }
%struct.mk_event_fdt = type opaque
%struct.mimetype = type { i8*, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_list, %struct.rb_node }
%struct.mk_rconf_section = type { i8*, %struct.mk_list, %struct.mk_list }
%struct.plugin_event = type opaque
%struct.mk_handler_param = type { %struct.mk_ptr_t, %struct.mk_list }
%struct.mk_plugin_stage = type { i32 (i32)*, i32 (%struct.mk_http_session*, %struct.mk_http_request*)*, i32 (%struct.mk_plugin*, %struct.mk_http_session*, %struct.mk_http_request*, i32, %struct.mk_list*)*, i32 (%struct.mk_plugin*, %struct.mk_http_session*, %struct.mk_http_request*)*, i32 (%struct.mk_http_session*, %struct.mk_http_request*)*, i32 (i32)*, %struct.mk_plugin*, %struct.mk_list }
%struct.mk_config_listener = type { i8*, i8*, i32, %struct.mk_list }
%struct.mk_plugin_network = type { i32 (i32, i8*, i32)*, i32 (i32, i8*, i64)*, i32 (i32, %struct.mk_iov*)*, i32 (i32)*, i32 (i32, i32, i64*, i64)*, i32 }
%struct.mk_channel = type { i32, i32, i32, %struct.mk_event*, %struct.mk_plugin_network*, %struct.mk_list }
%struct.mk_sched_worker = type { %struct.mk_event_loop*, i64, i64, i64, %struct.rb_root, %struct.mk_list, i16, i8, i64, i32, i32, %struct.mk_http_session*, %struct.mk_list, i32, i32, %struct.mk_list* }
%struct.row_entry = type { i32, [32 x i8] }
%struct.tm = type { i32, i32, i32, i32, i32, i32, i32, i32, i32, i64, i8* }
%struct.mk_gmt_cache = type { i64, [32 x i8], i64 }
%struct.plugin_network_io = type opaque
%struct.header_status_response = type { i32, i32, i8* }
%struct.plugin_api.712 = type { i32 (i32, i32)*, i32 (i32)*, i32 (i32)*, i32 (i32)*, i32 (i32)*, i32 (i8*, i32, i32)*, i32 (i8*, i32)*, i32 (i32)*, i32 (...)*, i32 (i32)*, i32 (i32, i8*, i32)*, i32 (i32, i32, i64*, i64)*, i32 (i32, i8**, i32, i64*)*, %struct.mk_server_config*, %struct.mk_list*, %struct.mk_sched_worker.706*, void (i32, i8*, ...)*, i32 (%struct.mk_http_session.705*, i32)*, i32 (i32, %struct.mk_http_session.705*, %struct.mk_http_request.697*)*, i8* (i64)*, i8* (i64)*, i8* (i8*, i64)*, void (i8*)*, void (%struct.mk_ptr_t*, i8*)*, void (i8*, i64)*, i8* (i8*, i64)*, i32 (i64, %struct.mk_ptr_t*)*, i32 (i8*, i8*, i32)*, i32 (i8*, i8*, i32, i32)*, i32 (i8*, i32, i32)*, i8* (i8**, i64*, i8*, ...)*, i8* (i8*)*, i8* (i8*, i32, i32)*, %struct.mk_list* (i8*)*, void (%struct.mk_list*)*, i8* (i8*)*, i32 (i8*, %struct.file_info*, i32)*, i32 (%struct.mk_http_session.705*, %struct.mk_http_request.697*)*, %struct.mk_http_header* (i32, %struct.mk_http_request.697*, i8*, i32)*, i32 (%struct.mk_http_request.697*, i8*, i32)*, void (%struct.mk_http_request.697*, i32)*, %struct.mk_stream* (i32, %struct.mk_channel*, i8*, i64, i8*, void (%struct.mk_stream*)*, void (%struct.mk_stream*, i64)*, void (%struct.mk_stream*, i32)*)*, %struct.mk_channel* (i32, i32)*, i32 (%struct.mk_channel*)*, i32 (%struct.mk_channel*, i64*)*, void (%struct.mk_channel*, %struct.mk_stream*)*, void (%struct.mk_stream*, i32, %struct.mk_channel*, i8*, i64, i8*, void (%struct.mk_stream*)*, void (%struct.mk_stream*, i64)*, void (%struct.mk_stream*, i32)*)*, %struct.mk_iov* (i32, i32)*, %struct.mk_iov* (%struct.mk_iov*, i32)*, void (%struct.mk_iov*)*, void (%struct.mk_iov*)*, i32 (%struct.mk_iov*, i8*, i32, i32)*, i32 (%struct.mk_iov*, i8*, i32, i32, i32)*, i64 (i32, %struct.mk_iov*)*, void (%struct.mk_iov*)*, i8* (i8*, i8*)*, %struct.mk_event_loop* (i32)*, %struct.mk_event_fdt* (...)*, i32 (%struct.mk_event_loop*, i32, i32, i32, i8*)*, i32 (%struct.mk_event_loop*, %struct.mk_event*)*, i32 (%struct.mk_event_loop*, i64, i64, i8*)*, i32 (%struct.mk_event_loop*, i32*, i32*, i8*)*, i32 (%struct.mk_event_loop*)*, i8* (...)*, %struct.mimetype* (i8*)*, void (%struct.rb_node*, %struct.rb_root*)*, void (%struct.rb_node*, %struct.rb_root*)*, void (%struct.rb_node*, %struct.rb_node*, %struct.rb_node**)*, %struct.mk_rconf* (i8*)*, %struct.mk_rconf* (i8*)*, void (%struct.mk_rconf*)*, %struct.mk_rconf_section* (%struct.mk_rconf*, i8*)*, i8* (%struct.mk_rconf_section*, i8*, i32)*, %struct.mk_event_loop* (...)*, i32 (i32)*, %struct.mk_sched_conn.702* (%struct.mk_sched_worker.706*, i32)*, void (%struct.mk_event*)*, %struct.mk_sched_worker.706* (...)*, i64 (void (i8*)*, i8*)*, i32 (i8*)*, i32 (i32, i32, %struct.mk_plugin.699*, i32)*, i32 (i32)*, %struct.plugin_event* (i32)*, i32 (i32, i32, i32)*, i32 (...)*, i32 (i8**, i64)*, %struct.mk_ptr_t* (...)*, void (i8*, i32, i8*, i8*, i32, i8*, ...)*, i32 (i32)*, void ()*, i32 (...)*, i32 (i8*, i64)*, %struct.mk_handler_param* (i32, %struct.mk_list*)* }
%struct.mk_sched_worker.706 = type { %struct.mk_event_loop*, i64, i64, i64, %struct.rb_root, %struct.mk_list, i16, i8, i64, i32, i32, %struct.mk_http_session.705*, %struct.mk_list, i32, i32, %struct.mk_list* }
%struct.mk_http_session.705 = type { i32, i32, i32, i32, i32, i32, %struct.mk_channel*, %struct.mk_sched_conn.702*, i32, i32, %struct.rb_node, %struct.mk_list, i64, i8*, [4096 x i8], %struct.mk_http_request.697, %struct.mk_http_parser }
%struct.mk_sched_conn.702 = type { %struct.mk_event, i32, i32, i8, i64, %struct.mk_sched_handler.691*, %struct.mk_server_listen.701*, %struct.mk_plugin_network*, %struct.mk_channel, %struct.mk_list, %struct.rb_node, i8* }
%struct.mk_sched_handler.691 = type { i8*, i32 (%struct.mk_sched_conn.702*, %struct.mk_sched_worker.706*)*, i32 (%struct.mk_sched_conn.702*, %struct.mk_sched_worker.706*, i32)*, i32 (%struct.mk_sched_conn.702*, %struct.mk_sched_worker.706*)*, i32 (i8*, i8*)*, i32, i8 }
%struct.mk_server_listen.701 = type { %struct.mk_event, i32, %struct.mk_plugin.699*, %struct.mk_sched_handler.691*, %struct.mk_config_listener*, %struct.mk_list }
%struct.mk_plugin.699 = type { i8*, i8*, i8*, i32, i8, {}*, i32 (...)*, i32 (%struct.mk_server_config*)*, void (...)*, %struct.mk_plugin_network*, %struct.mk_plugin_stage.698*, i8*, i8*, i32*, %struct.mk_list, i32 }
%struct.mk_http_request.697 = type { i32, i32, i32, i64, %struct.mk_stream, %struct.mk_stream, %struct.mk_stream, %struct.mk_stream, i32, i32, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, i32, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, %struct.mk_ptr_t, [128 x i8], %struct.mk_ptr_t, i32, i8*, %struct.file_info, i32, i32, i32, %struct.host*, %struct.host_alias*, i8*, %struct.mk_http_session.705*, %struct.mk_list, %struct.response_headers }
%struct.mk_plugin_stage.698 = type { i32 (i32)*, i32 (%struct.mk_http_session.705*, %struct.mk_http_request.697*)*, i32 (%struct.mk_plugin.699*, %struct.mk_http_session.705*, %struct.mk_http_request.697*, i32, %struct.mk_list*)*, i32 (%struct.mk_plugin.699*, %struct.mk_http_session.705*, %struct.mk_http_request.697*)*, i32 (%struct.mk_http_session.705*, %struct.mk_http_request.697*)*, i32 (i32)*, %struct.mk_plugin.699*, %struct.mk_list }
@.str.1.173 = private unnamed_addr constant [76 x i8] c"/home/scott/research/datashield/test/monkey/monkey/mk_server/mk_scheduler.c\00", align 1
@.str.835 = private unnamed_addr constant [27 x i8] c"Bug found in %s() at %s:%d\00", align 1
@__FUNCTION__.mk_sched_worker_free = private unnamed_addr constant [21 x i8] c"mk_sched_worker_free\00", align 1
@mk_config = common global %struct.mk_server_config* null, align 8
@mk_tls_cache_gmtext = thread_local global %struct.mk_gmt_cache* null, align 8
@mk_tls_cache_gmtime = thread_local global %struct.tm* null, align 8
@mk_tls_cache_header_cl = thread_local global %struct.mk_ptr_t* null, align 8
@mk_tls_cache_header_lm = thread_local global %struct.mk_ptr_t* null, align 8
@mk_tls_sched_cs = thread_local global %struct.rb_root* null, align 8
@mk_tls_sched_cs_incomplete = thread_local global %struct.mk_list* null, align 8
@mk_tls_sched_worker_notif = thread_local global %struct.mk_sched_notif* null, align 8
@mk_tls_vhost_fdt = thread_local global %struct.mk_list* null, align 8
@mk_utils_error_key = common global i32 0, align 4
@mutex_worker_exit = global %union.pthread_mutex_t.46 zeroinitializer, align 8
@sched_list = common global %struct.mk_sched_worker* null, align 8
; Function Attrs: nounwind
declare i8* @pthread_getspecific(i32) #1
; Function Attrs: nounwind
declare i32 @pthread_mutex_unlock(%union.pthread_mutex_t.46*) #1
; Function Attrs: nounwind
declare i32 @pthread_mutex_lock(%union.pthread_mutex_t.46*) #1
; Function Attrs: nounwind readnone
declare i64 @pthread_self() #10
declare void @mk_print(i32 %type, i8* nocapture readonly %format, ...)
; Function Attrs: nounwind uwtable
define void @mk_sched_worker_free() #0 {
entry:
%call = call i32 @pthread_mutex_lock(%union.pthread_mutex_t.46* nonnull @mutex_worker_exit) #14
%0 = load %struct.mk_server_config*, %struct.mk_server_config** @mk_config, align 8
%fdt2.i = getelementptr inbounds %struct.mk_server_config, %struct.mk_server_config* %0, i64 0, i32 6
%fdt2.i_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %fdt2.i, i64 357)
%1 = load i8, i8* %fdt2.i_as_void_sar_masked, align 4
%cmp.i = icmp eq i8 %1, 0
br i1 %cmp.i, label %mk_vhost_fdt_worker_exit.exit, label %if.end.i
if.end.i: ; preds = %entry
%2 = load %struct.mk_list*, %struct.mk_list** @mk_tls_vhost_fdt, align 8
%next.i = getelementptr inbounds %struct.mk_list, %struct.mk_list* %2, i64 0, i32 1
%next.i_casted = bitcast %struct.mk_list** %next.i to i8*
%next.i_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %next.i_casted, i64 358)
%_masked = bitcast i8* %next.i_as_void_sar_masked to %struct.mk_list**
%3 = load %struct.mk_list*, %struct.mk_list** %_masked, align 8
br label %for.cond.i
for.cond.i: ; preds = %for.body.i, %if.end.i
%head.0.i = phi %struct.mk_list* [ %3, %if.end.i ], [ %tmp.0.i2, %for.body.i ]
%cmp5.i = icmp eq %struct.mk_list* %head.0.i, %2
br i1 %cmp5.i, label %for.end.i, label %for.body.i
for.body.i: ; preds = %for.cond.i
%tmp.0.in.i = getelementptr inbounds %struct.mk_list, %struct.mk_list* %head.0.i, i64 0, i32 1
%tmp.0.in.i_casted = bitcast %struct.mk_list** %tmp.0.in.i to i8*
%tmp.0.in.i_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %tmp.0.in.i_casted, i64 359)
%_masked1 = bitcast i8* %tmp.0.in.i_as_void_sar_masked to %struct.mk_list**
%tmp.0.i2 = load %struct.mk_list*, %struct.mk_list** %_masked1, align 8
%add.ptr.i = getelementptr inbounds %struct.mk_list, %struct.mk_list* %head.0.i, i64 -401, i32 1
%_head.i = getelementptr inbounds %struct.mk_list*, %struct.mk_list** %add.ptr.i, i64 801
%_head.i_casted = bitcast %struct.mk_list** %_head.i to i8*
%_head.i_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %_head.i_casted, i64 360)
%_masked3 = bitcast i8* %_head.i_as_void_sar_masked to %struct.mk_list**
%4 = load %struct.mk_list*, %struct.mk_list** %_masked3, align 8
%5 = getelementptr inbounds %struct.mk_list*, %struct.mk_list** %add.ptr.i, i64 802
%_casted = bitcast %struct.mk_list** %5 to i8*
%_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %_casted, i64 361)
%_masked4 = bitcast i8* %_as_void_sar_masked to %struct.mk_list**
%6 = load %struct.mk_list*, %struct.mk_list** %_masked4, align 8
%next1.i.i.i = getelementptr inbounds %struct.mk_list, %struct.mk_list* %4, i64 0, i32 1
%next1.i.i.i_casted = bitcast %struct.mk_list** %next1.i.i.i to i8*
%next1.i.i.i_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %next1.i.i.i_casted, i64 362)
%_masked5 = bitcast i8* %next1.i.i.i_as_void_sar_masked to %struct.mk_list**
store %struct.mk_list* %6, %struct.mk_list** %_masked5, align 8
%prev2.i.i.i30 = bitcast %struct.mk_list* %6 to %struct.mk_list**
%prev2.i.i.i_casted = bitcast %struct.mk_list** %prev2.i.i.i30 to i8*
%prev2.i.i.i_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %prev2.i.i.i_casted, i64 363)
%_masked6 = bitcast i8* %prev2.i.i.i_as_void_sar_masked to %struct.mk_list**
store %struct.mk_list* %4, %struct.mk_list** %_masked6, align 8
%7 = bitcast %struct.mk_list** %add.ptr.i to i8*
%8 = bitcast %struct.mk_list** %_head.i to i8*
call void @llvm.memset.p0i8.i64(i8* %8, i8 0, i64 16, i32 8, i1 false)
call void @__ds_unsafe_free(i8* %7) #14
br label %for.cond.i
for.end.i: ; preds = %for.cond.i
%9 = bitcast %struct.mk_list* %2 to i8*
call void @__ds_unsafe_free(i8* %9) #14
br label %mk_vhost_fdt_worker_exit.exit
mk_vhost_fdt_worker_exit.exit: ; preds = %entry, %for.end.i
%10 = load %struct.mk_ptr_t*, %struct.mk_ptr_t** @mk_tls_cache_header_lm, align 8
%data.i.i31 = bitcast %struct.mk_ptr_t* %10 to i8**
%data.i.i_casted = bitcast i8** %data.i.i31 to i8*
%data.i.i_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %data.i.i_casted, i64 364)
%_masked7 = bitcast i8* %data.i.i_as_void_sar_masked to i8**
%11 = load i8*, i8** %_masked7, align 8
call void @__ds_unsafe_free(i8* %11) #14
%len.i.i = getelementptr inbounds %struct.mk_ptr_t, %struct.mk_ptr_t* %10, i64 0, i32 1
%len.i.i_casted = bitcast i64* %len.i.i to i8*
%len.i.i_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %len.i.i_casted, i64 365)
%_masked8 = bitcast i8* %len.i.i_as_void_sar_masked to i64*
store i64 0, i64* %_masked8, align 8
%_as_void_sar_masked9 = call i8* @__ds_mask_debug(i8* bitcast (%struct.mk_ptr_t** @mk_tls_cache_header_lm to i8*), i64 366)
%_masked10 = bitcast i8* %_as_void_sar_masked9 to i8**
%12 = load i8*, i8** %_masked10, align 8
call void @__ds_unsafe_free(i8* %12) #14
%13 = load %struct.mk_ptr_t*, %struct.mk_ptr_t** @mk_tls_cache_header_cl, align 8
%data.i1.i32 = bitcast %struct.mk_ptr_t* %13 to i8**
%data.i1.i_casted = bitcast i8** %data.i1.i32 to i8*
%data.i1.i_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %data.i1.i_casted, i64 367)
%_masked11 = bitcast i8* %data.i1.i_as_void_sar_masked to i8**
%14 = load i8*, i8** %_masked11, align 8
call void @__ds_unsafe_free(i8* %14) #14
%len.i2.i = getelementptr inbounds %struct.mk_ptr_t, %struct.mk_ptr_t* %13, i64 0, i32 1
%len.i2.i_casted = bitcast i64* %len.i2.i to i8*
%len.i2.i_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %len.i2.i_casted, i64 368)
%_masked12 = bitcast i8* %len.i2.i_as_void_sar_masked to i64*
store i64 0, i64* %_masked12, align 8
%_as_void_sar_masked13 = call i8* @__ds_mask_debug(i8* bitcast (%struct.mk_ptr_t** @mk_tls_cache_header_cl to i8*), i64 369)
%_masked14 = bitcast i8* %_as_void_sar_masked13 to i8**
%15 = load i8*, i8** %_masked14, align 8
call void @__ds_unsafe_free(i8* %15) #14
%_as_void_sar_masked15 = call i8* @__ds_mask_debug(i8* bitcast (%struct.tm** @mk_tls_cache_gmtime to i8*), i64 370)
%_masked16 = bitcast i8* %_as_void_sar_masked15 to i8**
%16 = load i8*, i8** %_masked16, align 8
call void @__ds_unsafe_free(i8* %16) #14
%_as_void_sar_masked17 = call i8* @__ds_mask_debug(i8* bitcast (%struct.mk_gmt_cache** @mk_tls_cache_gmtext to i8*), i64 371)
%_masked18 = bitcast i8* %_as_void_sar_masked17 to i8**
%17 = load i8*, i8** %_masked18, align 8
call void @__ds_unsafe_free(i8* %17) #14
%18 = load i32, i32* @mk_utils_error_key, align 4
%call.i = call i8* @pthread_getspecific(i32 %18) #14
call void @__ds_unsafe_free(i8* %call.i) #14
%call2 = call i64 @pthread_self() #19
%19 = load %struct.mk_server_config*, %struct.mk_server_config** @mk_config, align 8
%workers = getelementptr inbounds %struct.mk_server_config, %struct.mk_server_config* %19, i64 0, i32 4
%workers_casted = bitcast i16* %workers to i8*
%workers_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %workers_casted, i64 372)
%_masked19 = bitcast i8* %workers_as_void_sar_masked to i16*
%20 = load i16, i16* %_masked19, align 8
%21 = load %struct.mk_sched_worker*, %struct.mk_sched_worker** @sched_list, align 8
%22 = sext i16 %20 to i64
br label %for.cond
for.cond: ; preds = %select.end, %mk_vhost_fdt_worker_exit.exit
%lsr.iv29 = phi i64 [ %lsr.iv.next, %select.end ], [ -1, %mk_vhost_fdt_worker_exit.exit ]
%lsr.iv = phi %struct.mk_sched_worker* [ %scevgep, %select.end ], [ %21, %mk_vhost_fdt_worker_exit.exit ]
%sl.0 = phi %struct.mk_sched_worker* [ %arrayidx8.sl.0, %select.end ], [ null, %mk_vhost_fdt_worker_exit.exit ]
%scevgep = getelementptr %struct.mk_sched_worker, %struct.mk_sched_worker* %lsr.iv, i64 1
%lsr.iv.next = add nsw i64 %lsr.iv29, 1
%cmp = icmp slt i64 %lsr.iv.next, %22
br i1 %cmp, label %for.body, label %do.body
for.body: ; preds = %for.cond
%23 = bitcast %struct.mk_sched_worker* %lsr.iv to i8*
%scevgep28 = getelementptr i8, i8* %23, i64 64
%tid4_as_void_sar_masked = call i8* @__ds_mask_debug(i8* %scevgep28, i64 373)
%_masked20 = bitcast i8* %tid4_as_void_sar_masked to i64*
%24 = load i64, i64* %_masked20, align 8
%cmp5 = icmp eq i64 %24, %call2
br i1 %cmp5, label %select.end, label %select.false
select.false: ; preds = %for.body
br label %select.end
select.end: ; preds = %for.body, %select.false
%arrayidx8.sl.0 = phi %struct.mk_sched_worker* [ %lsr.iv, %for.body ], [ %sl.0, %select.false ]
br label %for.cond
do.body: ; preds = %for.cond
%lnot = icmp eq %struct.mk_sched_worker* %sl.0, null
br i1 %lnot, label %if.then13, label %do.end
if.then13: ; preds = %do.body
call void (i32, i8*, ...) @mk_print(i32 4099, i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.835, i64 0, i64 0), i8* getelementptr inbounds ([21 x i8], [21 x i8]* @__FUNCTION__.mk_sched_worker_free, i64 0, i64 0), i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.1.173, i64 0, i64 0), i32 129)
call void @abort() #20
unreachable
do.end: ; preds = %do.body
%_as_void_sar_masked21 = call i8* @__ds_mask_debug(i8* bitcast (%struct.rb_root** @mk_tls_sched_cs to i8*), i64 374)
%_masked22 = bitcast i8* %_as_void_sar_masked21 to i8**
%25 = load i8*, i8** %_masked22, align 8
call void @__ds_unsafe_free(i8* %25) #14
%_as_void_sar_masked23 = call i8* @__ds_mask_debug(i8* bitcast (%struct.mk_list** @mk_tls_sched_cs_incomplete to i8*), i64 375)
%_masked24 = bitcast i8* %_as_void_sar_masked23 to i8**
%26 = load i8*, i8** %_masked24, align 8
call void @__ds_unsafe_free(i8* %26) #14
%_as_void_sar_masked25 = call i8* @__ds_mask_debug(i8* bitcast (%struct.mk_sched_notif** @mk_tls_sched_worker_notif to i8*), i64 376)
%_masked26 = bitcast i8* %_as_void_sar_masked25 to i8**
%27 = load i8*, i8** %_masked26, align 8
call void @__ds_unsafe_free(i8* %27) #14
%call15 = call i32 @pthread_mutex_unlock(%union.pthread_mutex_t.46* nonnull @mutex_worker_exit) #14
ret void
}
declare i32 @putchar(i32)
; Function Attrs: nounwind
declare i32 @puts(i8* nocapture) #14
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.start(i64, i8* nocapture) #5
; Function Attrs: argmemonly nounwind
declare void @llvm.lifetime.end(i64, i8* nocapture) #5
declare i8* @__ds_unsafe_malloc(i64)
declare i8* @__ds_safe_malloc(i64)
declare i8* @__ds_debug_safe_alloc(i64, i64)
declare i8* @__ds_debug_safe_malloc(i64, i8*, i64)
declare void @__ds_unsafe_free(i8*)
declare void @__ds_safe_free(i8*)
declare void @__ds_safe_dealloc(i8*, i64)
declare void @__ds_safe_free_debug(i8*, i64)
declare i8* @__ds_unsafe_calloc(i64, i64)
declare i8* @__ds_safe_calloc(i64, i64)
declare i8* @__ds_debug_safe_calloc(i64, i64, i8*)
declare i8* @__ds_unsafe_realloc(i8*, i64)
declare i8* @__ds_safe_realloc(i8*, i64)
declare i8* @__ds_unsafe_strdup(i8*)
declare i8* @__ds_safe_strdup(i8*)
declare void @__ds_metadata_copy(i8*, i8*, i64)
declare void @__ds_safe_memcpy(i8*, i8*, i64)
declare i8* @__ds_mask_debug(i8*, i64)
; Function Attrs: noreturn nounwind
declare void @abort() #2
; Function Attrs: argmemonly nounwind
declare void @llvm.memset.p0i8.i64(i8* nocapture, i8, i64, i32, i1) #5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment