*************** Case 1 *************** SQL: create procedure p(x bigint) begin declare i bigint default 1; if(i=1) then select 42 from dual; end if; end FUNCTION: {type:1, ref_count:0, schema_version:-1, merged_version:0, object_id:18446744073709551615, dependency_tables:[], outline_state:{outline_version_:{table_id:-1, schema_version:0, object_type:1}, is_plan_fixed_:false}, pre_calc_exprs:[], params_info:[], is_contain_virtual_table:false, is_contain_inner_table:false, fetch_cur_time:false, variables:[{type:1, obj_type:"?ÿÿÿÿÿÿÿÿÿ", {type:1, obj_type:"?ÿÿÿÿÿÿÿÿÿ"], default_idx:[2]} >>>>>>>>>>>>>>>> IR Code <<<<<<<<<<<<<<<< ================Original================ ; ModuleID = 'expr_module' source_filename = "expr_module" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" %pl_exec_context = type { i64, i64, %param_store.2*, %obj*, i32* } %param_store.2 = type { i64, [12 x %objparam.1]*, [12 x %objparam.1], i64, i64, i64, %param_store, i32 } %objparam.1 = type { %obj, i64, i32, %obj.0 } %obj = type { %obj_meta, i32, i64 } %obj_meta = type { i8, i8, i8, i8 } %obj.0 = type { i64, i8 } %param_store = type { i64, [0 x %objparam.1]*, i64, i64, i64, i64, i32, i32 } %pl_exec_context.3 = type { %obj_meta, i64, i32, i8 } %unwind_exception = type { i64 } %pl_condition_value = type { i64, i64, i8*, i64, i64, i8 } declare i32 @spi_calc_expr(%pl_exec_context*, i64, i64, %objparam.1*) declare i32 @spi_set_variable(%pl_exec_context*, i64, %objparam.1*) declare i32 @spi_query(%pl_exec_context*, i8*, i64*, i64, %pl_exec_context.3*, i64, i8) declare i32 @spi_execute(%pl_exec_context*, i64, i64, i64*, i64, i64*, i64, %pl_exec_context.3*, i64, i8) declare i32 @spi_execute_immediate(%pl_exec_context*, i64, i64, i64, i64*, i64, %pl_exec_context.3*, i64, i8) declare i32 @spi_extend_collection(%pl_exec_context*, i64, i64, i64, i64, i8) declare i32 @spi_open(%pl_exec_context*, i8*, i64, i64, i64*, i64, i64*) declare i32 @spi_fetch(%pl_exec_context*, i64, i64*, i64, %pl_exec_context.3*, i64, i8, i64) declare i32 @spi_close(i64) declare i32 @spi_destruct_collection(%pl_exec_context*, i64) declare i32 @spi_init_nestedtable(%pl_exec_context*, i64, i64, i64, i8) declare i32 @spi_copy_datum(%pl_exec_context*, i64, %obj*, %obj*, i8) declare %unwind_exception* @eh_create_exception(i64, %pl_condition_value*) declare i32 @_Unwind_RaiseException(%unwind_exception*) declare void @_Unwind_Resume(%unwind_exception*) declare i32 @eh_personality(i32, i32, i64, i8, i8) declare i32 @eh_convert_exception(i32, i64*, i64*, i8**, i64*) declare i64 @eh_classify_exception(i8*) declare void @eh_debug_int64(i64) declare void @eh_debug_int32(i32) declare void @eh_debug_int8ptr(i8*) declare i32 @pl_execute(%pl_exec_context*, i64, i64, i64) declare i32 @set_user_type_var(%pl_exec_context*, i64, i64) define i32 @p(%pl_exec_context* %__hidden_exec_ctx__, i64 %__argc__, [1 x i64]* %__argv__) personality i32 (i32, i32, i64, i8, i8)* @eh_personality { entry: %__ret__ = alloca i32 store i32 0, i32* %__ret__ %x = alloca i64 %extract_arg = getelementptr [1 x i64], [1 x i64]* %__argv__, i32 0, i32 0 %cast_arg_to_pointer = bitcast i64* %extract_arg to %objparam.1* %extract_int64_pointer = getelementptr %objparam.1, %objparam.1* %cast_arg_to_pointer, i32 0, i32 0, i32 2 %load_datum = load i64, i64* %extract_int64_pointer store i64 %load_datum, i64* %x %i = alloca i64 %ObObjParam = alloca %objparam.1 store %objparam.1 zeroinitializer, %objparam.1* %ObObjParam %extract_meta_pointer = getelementptr %objparam.1, %objparam.1* %ObObjParam, i32 0, i32 0, i32 0 %extract_arg1 = getelementptr %obj_meta, %obj_meta* %extract_meta_pointer, i32 0, i32 1 store i8 7, i8* %extract_arg1 %extract_meta_pointer2 = getelementptr %objparam.1, %objparam.1* %ObObjParam, i32 0, i32 0, i32 0 %extract_arg3 = getelementptr %obj_meta, %obj_meta* %extract_meta_pointer2, i32 0, i32 3 store i8 -1, i8* %extract_arg3 %extract_meta_pointer4 = getelementptr %objparam.1, %objparam.1* %ObObjParam, i32 0, i32 1 store i64 -1, i64* %extract_meta_pointer4 %extract_meta_pointer5 = getelementptr %objparam.1, %objparam.1* %ObObjParam, i32 0, i32 3 %extract_arg6 = getelementptr %obj.0, %obj.0* %extract_meta_pointer5, i32 0, i32 1 store i8 1, i8* %extract_arg6 %calc_expr = call i32 @spi_calc_expr(%pl_exec_context* %__hidden_exec_ctx__, i64 140497062073872, i64 1, %objparam.1* %ObObjParam) store i32 %calc_expr, i32* %__ret__ %0 = icmp eq i32 %calc_expr, 0 br i1 %0, label %ob_success, label %ob_fail exit: ; preds = %continue %load_ret = load i32, i32* %__ret__ ret i32 %load_ret ob_success: ; preds = %ob_fail, %ob_fail, %entry %extract_int64_pointer13 = getelementptr %objparam.1, %objparam.1* %ObObjParam, i32 0, i32 0, i32 2 %load_datum14 = load i64, i64* %extract_int64_pointer13 store i64 %load_datum14, i64* %i %ObObjParam39 = alloca %objparam.1 store %objparam.1 zeroinitializer, %objparam.1* %ObObjParam39 %extract_meta_pointer40 = getelementptr %objparam.1, %objparam.1* %ObObjParam39, i32 0, i32 0, i32 0 %extract_arg41 = getelementptr %obj_meta, %obj_meta* %extract_meta_pointer40, i32 0, i32 1 store i8 7, i8* %extract_arg41 %extract_meta_pointer42 = getelementptr %objparam.1, %objparam.1* %ObObjParam39, i32 0, i32 0, i32 0 %extract_arg43 = getelementptr %obj_meta, %obj_meta* %extract_meta_pointer42, i32 0, i32 3 store i8 -1, i8* %extract_arg43 %extract_meta_pointer44 = getelementptr %objparam.1, %objparam.1* %ObObjParam39, i32 0, i32 1 store i64 -1, i64* %extract_meta_pointer44 %extract_meta_pointer45 = getelementptr %objparam.1, %objparam.1* %ObObjParam39, i32 0, i32 3 %extract_arg46 = getelementptr %obj.0, %obj.0* %extract_meta_pointer45, i32 0, i32 1 store i8 1, i8* %extract_arg46 %calc_expr47 = call i32 @spi_calc_expr(%pl_exec_context* %__hidden_exec_ctx__, i64 140497062074016, i64 -1, %objparam.1* %ObObjParam39) store i32 %calc_expr47, i32* %__ret__ %1 = icmp eq i32 %calc_expr47, 0 br i1 %1, label %ob_success48, label %ob_fail49 ob_fail: ; preds = %entry %exception_type = alloca i64 %error_code = alloca i64 %sql_state = alloca i8* %str_len = alloca i64 %convert_exception = call i32 @eh_convert_exception(i32 %calc_expr, i64* %exception_type, i64* %error_code, i8** %sql_state, i64* %str_len) %load_type = load i64, i64* %exception_type %load_error_code = load i64, i64* %error_code %load_sql_state = load i8*, i8** %sql_state %load_str_len = load i64, i64* %str_len %load_pl_exex_ctx = load %pl_exec_context, %pl_exec_context* %__hidden_exec_ctx__ %extract_allocator_pointer = extractvalue %pl_exec_context %load_pl_exex_ctx, 0 %handler_condition = alloca %pl_condition_value %extract_arg7 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i32 0, i32 0 store i64 %load_type, i64* %extract_arg7 %extract_arg8 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i32 0, i32 1 store i64 %load_error_code, i64* %extract_arg8 %extract_arg9 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i32 0, i32 2 store i8* %load_sql_state, i8** %extract_arg9 %extract_arg10 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i32 0, i32 3 store i64 %load_str_len, i64* %extract_arg10 %extract_arg11 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i32 0, i32 4 store i64 0, i64* %extract_arg11 %extract_arg12 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i32 0, i32 5 store i8 0, i8* %extract_arg12 call void @eh_debug_int64(i64 4444) %create_exception = call %unwind_exception* @eh_create_exception(i64 %extract_allocator_pointer, %pl_condition_value* %handler_condition) %get_exception_class = call i64 @eh_classify_exception(i8* %load_sql_state) switch i64 %get_exception_class, label %early_exit [ i64 2, label %early_exit i64 3, label %ob_success i64 4, label %ob_success ] early_exit: ; preds = %ob_fail, %ob_fail %raise_exception = call i32 @_Unwind_RaiseException(%unwind_exception* %create_exception) unreachable continue: ; preds = %ob_success48, %ob_success15 br label %exit then: ; preds = %ob_success48 %array = alloca [20 x i8] store [20 x i8] c"select 42 from dual\00", [20 x i8]* %array %extract_first_addr_from_array = getelementptr [20 x i8], [20 x i8]* %array, i32 0, i32 0 %datatype_array = alloca [0 x %pl_exec_context.3] %datatype_array_to_pointer = bitcast [0 x %pl_exec_context.3]* %datatype_array to %pl_exec_context.3* %spi_query = call i32 @spi_query(%pl_exec_context* %__hidden_exec_ctx__, i8* %extract_first_addr_from_array, i64* null, i64 0, %pl_exec_context.3* %datatype_array_to_pointer, i64 0, i8 0) store i32 %spi_query, i32* %__ret__ %2 = icmp eq i32 %spi_query, 0 br i1 %2, label %ob_success15, label %ob_fail16 ob_success15: ; preds = %ob_fail16, %ob_fail16, %then br label %continue ob_fail16: ; preds = %then %exception_type17 = alloca i64 %error_code18 = alloca i64 %sql_state19 = alloca i8* %str_len20 = alloca i64 %convert_exception21 = call i32 @eh_convert_exception(i32 %spi_query, i64* %exception_type17, i64* %error_code18, i8** %sql_state19, i64* %str_len20) %load_type22 = load i64, i64* %exception_type17 %load_error_code23 = load i64, i64* %error_code18 %load_sql_state24 = load i8*, i8** %sql_state19 %load_str_len25 = load i64, i64* %str_len20 %load_pl_exex_ctx26 = load %pl_exec_context, %pl_exec_context* %__hidden_exec_ctx__ %extract_allocator_pointer27 = extractvalue %pl_exec_context %load_pl_exex_ctx26, 0 %handler_condition28 = alloca %pl_condition_value %extract_arg29 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i32 0, i32 0 store i64 %load_type22, i64* %extract_arg29 %extract_arg30 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i32 0, i32 1 store i64 %load_error_code23, i64* %extract_arg30 %extract_arg31 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i32 0, i32 2 store i8* %load_sql_state24, i8** %extract_arg31 %extract_arg32 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i32 0, i32 3 store i64 %load_str_len25, i64* %extract_arg32 %extract_arg33 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i32 0, i32 4 store i64 76, i64* %extract_arg33 %extract_arg34 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i32 0, i32 5 store i8 0, i8* %extract_arg34 call void @eh_debug_int64(i64 4444) %create_exception35 = call %unwind_exception* @eh_create_exception(i64 %extract_allocator_pointer27, %pl_condition_value* %handler_condition28) %get_exception_class37 = call i64 @eh_classify_exception(i8* %load_sql_state24) switch i64 %get_exception_class37, label %early_exit36 [ i64 2, label %early_exit36 i64 3, label %ob_success15 i64 4, label %ob_success15 ] early_exit36: ; preds = %ob_fail16, %ob_fail16 %raise_exception38 = call i32 @_Unwind_RaiseException(%unwind_exception* %create_exception35) unreachable ob_success48: ; preds = %ob_fail49, %ob_fail49, %ob_success %extract_int64_pointer72 = getelementptr %objparam.1, %objparam.1* %ObObjParam39, i32 0, i32 0, i32 2 %cast_int64_to_int32 = bitcast i64* %extract_int64_pointer72 to i32* %load_value = load i32, i32* %cast_int64_to_int32 %3 = icmp eq i32 %load_value, 0 br i1 %3, label %continue, label %then ob_fail49: ; preds = %ob_success %exception_type50 = alloca i64 %error_code51 = alloca i64 %sql_state52 = alloca i8* %str_len53 = alloca i64 %convert_exception54 = call i32 @eh_convert_exception(i32 %calc_expr47, i64* %exception_type50, i64* %error_code51, i8** %sql_state52, i64* %str_len53) %load_type55 = load i64, i64* %exception_type50 %load_error_code56 = load i64, i64* %error_code51 %load_sql_state57 = load i8*, i8** %sql_state52 %load_str_len58 = load i64, i64* %str_len53 %load_pl_exex_ctx59 = load %pl_exec_context, %pl_exec_context* %__hidden_exec_ctx__ %extract_allocator_pointer60 = extractvalue %pl_exec_context %load_pl_exex_ctx59, 0 %handler_condition61 = alloca %pl_condition_value %extract_arg62 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i32 0, i32 0 store i64 %load_type55, i64* %extract_arg62 %extract_arg63 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i32 0, i32 1 store i64 %load_error_code56, i64* %extract_arg63 %extract_arg64 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i32 0, i32 2 store i8* %load_sql_state57, i8** %extract_arg64 %extract_arg65 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i32 0, i32 3 store i64 %load_str_len58, i64* %extract_arg65 %extract_arg66 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i32 0, i32 4 store i64 63, i64* %extract_arg66 %extract_arg67 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i32 0, i32 5 store i8 0, i8* %extract_arg67 call void @eh_debug_int64(i64 4444) %create_exception68 = call %unwind_exception* @eh_create_exception(i64 %extract_allocator_pointer60, %pl_condition_value* %handler_condition61) %get_exception_class70 = call i64 @eh_classify_exception(i8* %load_sql_state57) switch i64 %get_exception_class70, label %early_exit69 [ i64 2, label %early_exit69 i64 3, label %ob_success48 i64 4, label %ob_success48 ] early_exit69: ; preds = %ob_fail49, %ob_fail49 %raise_exception71 = call i32 @_Unwind_RaiseException(%unwind_exception* %create_exception68) unreachable } ================Optimized================ ; ModuleID = 'expr_module' source_filename = "expr_module" target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" %pl_exec_context = type { i64, i64, %param_store.2*, %obj*, i32* } %param_store.2 = type { i64, [12 x %objparam.1]*, [12 x %objparam.1], i64, i64, i64, %param_store, i32 } %objparam.1 = type { %obj, i64, i32, %obj.0 } %obj = type { %obj_meta, i32, i64 } %obj_meta = type { i8, i8, i8, i8 } %obj.0 = type { i64, i8 } %param_store = type { i64, [0 x %objparam.1]*, i64, i64, i64, i64, i32, i32 } %pl_exec_context.3 = type { %obj_meta, i64, i32, i8 } %unwind_exception = type { i64 } %pl_condition_value = type { i64, i64, i8*, i64, i64, i8 } declare i32 @spi_calc_expr(%pl_exec_context*, i64, i64, %objparam.1*) declare i32 @spi_set_variable(%pl_exec_context*, i64, %objparam.1*) declare i32 @spi_query(%pl_exec_context*, i8*, i64*, i64, %pl_exec_context.3*, i64, i8) declare i32 @spi_execute(%pl_exec_context*, i64, i64, i64*, i64, i64*, i64, %pl_exec_context.3*, i64, i8) declare i32 @spi_execute_immediate(%pl_exec_context*, i64, i64, i64, i64*, i64, %pl_exec_context.3*, i64, i8) declare i32 @spi_extend_collection(%pl_exec_context*, i64, i64, i64, i64, i8) declare i32 @spi_open(%pl_exec_context*, i8*, i64, i64, i64*, i64, i64*) declare i32 @spi_fetch(%pl_exec_context*, i64, i64*, i64, %pl_exec_context.3*, i64, i8, i64) declare i32 @spi_close(i64) declare i32 @spi_destruct_collection(%pl_exec_context*, i64) declare i32 @spi_init_nestedtable(%pl_exec_context*, i64, i64, i64, i8) declare i32 @spi_copy_datum(%pl_exec_context*, i64, %obj*, %obj*, i8) declare %unwind_exception* @eh_create_exception(i64, %pl_condition_value*) declare i32 @_Unwind_RaiseException(%unwind_exception*) declare void @_Unwind_Resume(%unwind_exception*) declare i32 @eh_personality(i32, i32, i64, i8, i8) declare i32 @eh_convert_exception(i32, i64*, i64*, i8**, i64*) declare i64 @eh_classify_exception(i8*) declare void @eh_debug_int64(i64) declare void @eh_debug_int32(i32) declare void @eh_debug_int8ptr(i8*) declare i32 @pl_execute(%pl_exec_context*, i64, i64, i64) declare i32 @set_user_type_var(%pl_exec_context*, i64, i64) define i32 @p(%pl_exec_context* %__hidden_exec_ctx__, i64 %__argc__, [1 x i64]* %__argv__) personality i32 (i32, i32, i64, i8, i8)* @eh_personality { entry: %const = bitcast i64 140497062073872 to i64 %datatype_array = alloca [0 x %pl_exec_context.3], align 8 %__ret__ = alloca i32, align 4 store i32 0, i32* %__ret__, align 4 %ObObjParam = alloca %objparam.1, align 8 store %objparam.1 zeroinitializer, %objparam.1* %ObObjParam, align 8 %extract_arg1 = getelementptr %objparam.1, %objparam.1* %ObObjParam, i64 0, i32 0, i32 0, i32 1 store i8 7, i8* %extract_arg1, align 1 %extract_arg3 = getelementptr %objparam.1, %objparam.1* %ObObjParam, i64 0, i32 0, i32 0, i32 3 store i8 -1, i8* %extract_arg3, align 1 %extract_meta_pointer4 = getelementptr %objparam.1, %objparam.1* %ObObjParam, i64 0, i32 1 store i64 -1, i64* %extract_meta_pointer4, align 8 %extract_arg6 = getelementptr %objparam.1, %objparam.1* %ObObjParam, i64 0, i32 3, i32 1 store i8 1, i8* %extract_arg6, align 8 %calc_expr = call i32 @spi_calc_expr(%pl_exec_context* %__hidden_exec_ctx__, i64 %const, i64 1, %objparam.1* nonnull %ObObjParam) store i32 %calc_expr, i32* %__ret__, align 4 %0 = icmp eq i32 %calc_expr, 0 br i1 %0, label %ob_success, label %ob_fail ob_success: ; preds = %ob_fail, %entry %ObObjParam39 = alloca %objparam.1, align 8 store %objparam.1 zeroinitializer, %objparam.1* %ObObjParam39, align 8 %extract_arg41 = getelementptr %objparam.1, %objparam.1* %ObObjParam39, i64 0, i32 0, i32 0, i32 1 store i8 7, i8* %extract_arg41, align 1 %extract_arg43 = getelementptr %objparam.1, %objparam.1* %ObObjParam39, i64 0, i32 0, i32 0, i32 3 store i8 -1, i8* %extract_arg43, align 1 %extract_meta_pointer44 = getelementptr %objparam.1, %objparam.1* %ObObjParam39, i64 0, i32 1 store i64 -1, i64* %extract_meta_pointer44, align 8 %extract_arg46 = getelementptr %objparam.1, %objparam.1* %ObObjParam39, i64 0, i32 3, i32 1 store i8 1, i8* %extract_arg46, align 8 %const_mat = add i64 %const, 144 %calc_expr47 = call i32 @spi_calc_expr(%pl_exec_context* %__hidden_exec_ctx__, i64 %const_mat, i64 -1, %objparam.1* nonnull %ObObjParam39) store i32 %calc_expr47, i32* %__ret__, align 4 %1 = icmp eq i32 %calc_expr47, 0 br i1 %1, label %ob_success48, label %ob_fail49 ob_fail: ; preds = %entry %exception_type = alloca i64, align 8 %error_code = alloca i64, align 8 %sql_state = alloca i8*, align 8 %str_len = alloca i64, align 8 %convert_exception = call i32 @eh_convert_exception(i32 %calc_expr, i64* nonnull %exception_type, i64* nonnull %error_code, i8** nonnull %sql_state, i64* nonnull %str_len) %load_type = load i64, i64* %exception_type, align 8 %load_error_code = load i64, i64* %error_code, align 8 %load_sql_state = load i8*, i8** %sql_state, align 8 %load_str_len = load i64, i64* %str_len, align 8 %load_pl_exex_ctx.elt122 = bitcast %pl_exec_context* %__hidden_exec_ctx__ to i64* %load_pl_exex_ctx.unpack = load i64, i64* %load_pl_exex_ctx.elt122, align 8 %handler_condition = alloca %pl_condition_value, align 8 %extract_arg7123 = bitcast %pl_condition_value* %handler_condition to i64* store i64 %load_type, i64* %extract_arg7123, align 8 %extract_arg8 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i64 0, i32 1 store i64 %load_error_code, i64* %extract_arg8, align 8 %extract_arg9 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i64 0, i32 2 store i8* %load_sql_state, i8** %extract_arg9, align 8 %extract_arg10 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i64 0, i32 3 store i64 %load_str_len, i64* %extract_arg10, align 8 %extract_arg11 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i64 0, i32 4 store i64 0, i64* %extract_arg11, align 8 %extract_arg12 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition, i64 0, i32 5 store i8 0, i8* %extract_arg12, align 8 call void @eh_debug_int64(i64 4444) %create_exception = call %unwind_exception* @eh_create_exception(i64 %load_pl_exex_ctx.unpack, %pl_condition_value* nonnull %handler_condition) %get_exception_class = call i64 @eh_classify_exception(i8* %load_sql_state) %get_exception_class.off = add i64 %get_exception_class, -3 %switch = icmp ult i64 %get_exception_class.off, 2 br i1 %switch, label %ob_success, label %early_exit early_exit: ; preds = %ob_fail %raise_exception = call i32 @_Unwind_RaiseException(%unwind_exception* %create_exception) unreachable continue: ; preds = %ob_fail16, %then, %ob_success48 %load_ret = phi i32 [ %calc_expr47, %ob_success48 ], [ %spi_query, %ob_fail16 ], [ %spi_query, %then ] ret i32 %load_ret then: ; preds = %ob_success48 %array = alloca [20 x i8], align 1 %array.repack124 = bitcast [20 x i8]* %array to i8* store i8 115, i8* %array.repack124, align 1 %array.repack91 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 1 store i8 101, i8* %array.repack91, align 1 %array.repack92 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 2 store i8 108, i8* %array.repack92, align 1 %array.repack93 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 3 store i8 101, i8* %array.repack93, align 1 %array.repack94 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 4 store i8 99, i8* %array.repack94, align 1 %array.repack95 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 5 store i8 116, i8* %array.repack95, align 1 %array.repack96 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 6 store i8 32, i8* %array.repack96, align 1 %array.repack97 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 7 store i8 52, i8* %array.repack97, align 1 %array.repack98 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 8 store i8 50, i8* %array.repack98, align 1 %array.repack99 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 9 store i8 32, i8* %array.repack99, align 1 %array.repack100 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 10 store i8 102, i8* %array.repack100, align 1 %array.repack101 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 11 store i8 114, i8* %array.repack101, align 1 %array.repack102 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 12 store i8 111, i8* %array.repack102, align 1 %array.repack103 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 13 store i8 109, i8* %array.repack103, align 1 %array.repack104 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 14 store i8 32, i8* %array.repack104, align 1 %array.repack105 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 15 store i8 100, i8* %array.repack105, align 1 %array.repack106 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 16 store i8 117, i8* %array.repack106, align 1 %array.repack107 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 17 store i8 97, i8* %array.repack107, align 1 %array.repack108 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 18 store i8 108, i8* %array.repack108, align 1 %array.repack109 = getelementptr inbounds [20 x i8], [20 x i8]* %array, i64 0, i64 19 store i8 0, i8* %array.repack109, align 1 %datatype_array_to_pointer125 = bitcast [0 x %pl_exec_context.3]* %datatype_array to %pl_exec_context.3* %spi_query = call i32 @spi_query(%pl_exec_context* %__hidden_exec_ctx__, i8* %array.repack124, i64* null, i64 0, %pl_exec_context.3* %datatype_array_to_pointer125, i64 0, i8 0) store i32 %spi_query, i32* %__ret__, align 4 %2 = icmp eq i32 %spi_query, 0 br i1 %2, label %continue, label %ob_fail16 ob_fail16: ; preds = %then %exception_type17 = alloca i64, align 8 %error_code18 = alloca i64, align 8 %sql_state19 = alloca i8*, align 8 %str_len20 = alloca i64, align 8 %convert_exception21 = call i32 @eh_convert_exception(i32 %spi_query, i64* nonnull %exception_type17, i64* nonnull %error_code18, i8** nonnull %sql_state19, i64* nonnull %str_len20) %load_type22 = load i64, i64* %exception_type17, align 8 %load_error_code23 = load i64, i64* %error_code18, align 8 %load_sql_state24 = load i8*, i8** %sql_state19, align 8 %load_str_len25 = load i64, i64* %str_len20, align 8 %load_pl_exex_ctx26.elt126 = bitcast %pl_exec_context* %__hidden_exec_ctx__ to i64* %load_pl_exex_ctx26.unpack = load i64, i64* %load_pl_exex_ctx26.elt126, align 8 %handler_condition28 = alloca %pl_condition_value, align 8 %extract_arg29127 = bitcast %pl_condition_value* %handler_condition28 to i64* store i64 %load_type22, i64* %extract_arg29127, align 8 %extract_arg30 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i64 0, i32 1 store i64 %load_error_code23, i64* %extract_arg30, align 8 %extract_arg31 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i64 0, i32 2 store i8* %load_sql_state24, i8** %extract_arg31, align 8 %extract_arg32 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i64 0, i32 3 store i64 %load_str_len25, i64* %extract_arg32, align 8 %extract_arg33 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i64 0, i32 4 store i64 76, i64* %extract_arg33, align 8 %extract_arg34 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition28, i64 0, i32 5 store i8 0, i8* %extract_arg34, align 8 call void @eh_debug_int64(i64 4444) %create_exception35 = call %unwind_exception* @eh_create_exception(i64 %load_pl_exex_ctx26.unpack, %pl_condition_value* nonnull %handler_condition28) %get_exception_class37 = call i64 @eh_classify_exception(i8* %load_sql_state24) %get_exception_class37.off = add i64 %get_exception_class37, -3 %switch120 = icmp ult i64 %get_exception_class37.off, 2 br i1 %switch120, label %continue, label %early_exit36 early_exit36: ; preds = %ob_fail16 %raise_exception38 = call i32 @_Unwind_RaiseException(%unwind_exception* %create_exception35) unreachable ob_success48: ; preds = %ob_fail49, %ob_success %extract_int64_pointer72 = getelementptr %objparam.1, %objparam.1* %ObObjParam39, i64 0, i32 0, i32 2 %cast_int64_to_int32 = bitcast i64* %extract_int64_pointer72 to i32* %load_value = load i32, i32* %cast_int64_to_int32, align 8 %3 = icmp eq i32 %load_value, 0 br i1 %3, label %continue, label %then ob_fail49: ; preds = %ob_success %exception_type50 = alloca i64, align 8 %error_code51 = alloca i64, align 8 %sql_state52 = alloca i8*, align 8 %str_len53 = alloca i64, align 8 %convert_exception54 = call i32 @eh_convert_exception(i32 %calc_expr47, i64* nonnull %exception_type50, i64* nonnull %error_code51, i8** nonnull %sql_state52, i64* nonnull %str_len53) %load_type55 = load i64, i64* %exception_type50, align 8 %load_error_code56 = load i64, i64* %error_code51, align 8 %load_sql_state57 = load i8*, i8** %sql_state52, align 8 %load_str_len58 = load i64, i64* %str_len53, align 8 %load_pl_exex_ctx59.elt128 = bitcast %pl_exec_context* %__hidden_exec_ctx__ to i64* %load_pl_exex_ctx59.unpack = load i64, i64* %load_pl_exex_ctx59.elt128, align 8 %handler_condition61 = alloca %pl_condition_value, align 8 %extract_arg62129 = bitcast %pl_condition_value* %handler_condition61 to i64* store i64 %load_type55, i64* %extract_arg62129, align 8 %extract_arg63 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i64 0, i32 1 store i64 %load_error_code56, i64* %extract_arg63, align 8 %extract_arg64 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i64 0, i32 2 store i8* %load_sql_state57, i8** %extract_arg64, align 8 %extract_arg65 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i64 0, i32 3 store i64 %load_str_len58, i64* %extract_arg65, align 8 %extract_arg66 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i64 0, i32 4 store i64 63, i64* %extract_arg66, align 8 %extract_arg67 = getelementptr %pl_condition_value, %pl_condition_value* %handler_condition61, i64 0, i32 5 store i8 0, i8* %extract_arg67, align 8 call void @eh_debug_int64(i64 4444) %create_exception68 = call %unwind_exception* @eh_create_exception(i64 %load_pl_exex_ctx59.unpack, %pl_condition_value* nonnull %handler_condition61) %get_exception_class70 = call i64 @eh_classify_exception(i8* %load_sql_state57) %get_exception_class70.off = add i64 %get_exception_class70, -3 %switch121 = icmp ult i64 %get_exception_class70.off, 2 br i1 %switch121, label %ob_success48, label %early_exit69 early_exit69: ; preds = %ob_fail49 %raise_exception71 = call i32 @_Unwind_RaiseException(%unwind_exception* %create_exception68) unreachable } ; Function Attrs: nounwind declare void @llvm.stackprotector(i8*, i8**) #0 attributes #0 = { nounwind } *************** Case 1(end) **************