Skip to content

Instantly share code, notes, and snippets.

@stellaraccident
Created September 19, 2021 05:16
Show Gist options
  • Save stellaraccident/1ff49e4a6108f22f1e82ad7934d9ab85 to your computer and use it in GitHub Desktop.
Save stellaraccident/1ff49e4a6108f22f1e82ad7934d9ab85 to your computer and use it in GitHub Desktop.
module {
module @booleans {
iree_pydm.func @pydmrtl$object_as_bool(%arg0: !iree_pydm.object) -> (!iree_pydm.exception_result, !iree_pydm.bool) attributes {arg_names = ["v"], cell_vars = [], free_vars = ["v"]} {
%0 = constant 8 : i64 -> !iree_pydm.integer
%1 = constant 1 : i64 -> !iree_pydm.integer
%2 = constant false -> !iree_pydm.bool
%3 = constant 9 : i64 -> !iree_pydm.integer
%4 = constant 0 : i64 -> !iree_pydm.integer
%5 = constant 10 : i64 -> !iree_pydm.integer
%6 = constant 0.000000e+00 : f64 -> !iree_pydm.real
%7 = constant true -> !iree_pydm.bool
%v = alloc_free_var "v" -> !iree_pydm.free_var_ref
store_var %v = %arg0 : !iree_pydm.free_var_ref, !iree_pydm.object
%8 = load_var %v : !iree_pydm.free_var_ref -> !iree_pydm.object
%9 = get_type_code %8 : !iree_pydm.object
%10 = apply_compare "eq", %0, %9 : !iree_pydm.integer, !iree_pydm.integer
%11 = bool_to_pred %10
cond_br %11, ^bb1, ^bb2
^bb1: // pred: ^bb0
%12 = load_var %v : !iree_pydm.free_var_ref -> !iree_pydm.object
%status, %primitive = unbox %12 : !iree_pydm.object -> !iree_pydm.bool
return %primitive : !iree_pydm.bool
^bb2: // pred: ^bb0
%13 = load_var %v : !iree_pydm.free_var_ref -> !iree_pydm.object
%14 = get_type_code %13 : !iree_pydm.object
%15 = apply_compare "eq", %1, %14 : !iree_pydm.integer, !iree_pydm.integer
%16 = bool_to_pred %15
cond_br %16, ^bb3(%2 : !iree_pydm.bool), ^bb4
^bb3(%17: !iree_pydm.bool): // 2 preds: ^bb2, ^bb6
return %17 : !iree_pydm.bool
^bb4: // pred: ^bb2
%18 = load_var %v : !iree_pydm.free_var_ref -> !iree_pydm.object
%19 = get_type_code %18 : !iree_pydm.object
%20 = apply_compare "eq", %3, %19 : !iree_pydm.integer, !iree_pydm.integer
%21 = bool_to_pred %20
cond_br %21, ^bb5, ^bb6
^bb5: // pred: ^bb4
%22 = load_var %v : !iree_pydm.free_var_ref -> !iree_pydm.object
%status_0, %primitive_1 = unbox %22 : !iree_pydm.object -> !iree_pydm.integer
%23 = apply_compare "ne", %primitive_1, %4 : !iree_pydm.integer, !iree_pydm.integer
return %23 : !iree_pydm.bool
^bb6: // pred: ^bb4
%24 = load_var %v : !iree_pydm.free_var_ref -> !iree_pydm.object
%25 = get_type_code %24 : !iree_pydm.object
%26 = apply_compare "eq", %5, %25 : !iree_pydm.integer, !iree_pydm.integer
%27 = bool_to_pred %26
cond_br %27, ^bb7, ^bb3(%7 : !iree_pydm.bool)
^bb7: // pred: ^bb6
%28 = load_var %v : !iree_pydm.free_var_ref -> !iree_pydm.object
%status_2, %primitive_3 = unbox %28 : !iree_pydm.object -> !iree_pydm.real
%29 = apply_compare "ne", %primitive_3, %6 : !iree_pydm.real, !iree_pydm.real
return %29 : !iree_pydm.bool
}
}
module @numerics {
iree_pydm.func @pydmrtl$dynamic_binary_promote(%arg0: !iree_pydm.object, %arg1: !iree_pydm.object) -> (!iree_pydm.exception_result, !iree_pydm.tuple) attributes {arg_names = ["left", "right"], cell_vars = [], free_vars = ["left", "right", "left_order", "right_order"]} {
%left = alloc_free_var "left" -> !iree_pydm.free_var_ref
%right = alloc_free_var "right" -> !iree_pydm.free_var_ref
%left_order = alloc_free_var "left_order" -> !iree_pydm.free_var_ref
%right_order = alloc_free_var "right_order" -> !iree_pydm.free_var_ref
store_var %left = %arg0 : !iree_pydm.free_var_ref, !iree_pydm.object
store_var %right = %arg1 : !iree_pydm.free_var_ref, !iree_pydm.object
%0 = load_var %left : !iree_pydm.free_var_ref -> !iree_pydm.object
%1 = get_numeric_promotion_order %0 : !iree_pydm.object
%2 = box %1 : !iree_pydm.integer -> !iree_pydm.object<!iree_pydm.integer>
store_var %left_order = %2 : !iree_pydm.free_var_ref, !iree_pydm.object<!iree_pydm.integer>
%3 = load_var %right : !iree_pydm.free_var_ref -> !iree_pydm.object
%4 = get_numeric_promotion_order %3 : !iree_pydm.object
%5 = box %4 : !iree_pydm.integer -> !iree_pydm.object<!iree_pydm.integer>
store_var %right_order = %5 : !iree_pydm.free_var_ref, !iree_pydm.object<!iree_pydm.integer>
%6 = load_var %left_order : !iree_pydm.free_var_ref -> !iree_pydm.object
%7 = load_var %right_order : !iree_pydm.free_var_ref -> !iree_pydm.object
%8 = apply_compare "eq", %6, %7 : !iree_pydm.object, !iree_pydm.object
%9 = bool_to_pred %8
cond_br %9, ^bb1, ^bb2
^bb1: // pred: ^bb0
%10 = load_var %left : !iree_pydm.free_var_ref -> !iree_pydm.object
%11 = load_var %right : !iree_pydm.free_var_ref -> !iree_pydm.object
%12 = make_tuple %10, %11 : !iree_pydm.object, !iree_pydm.object -> !iree_pydm.tuple
return %12 : !iree_pydm.tuple
^bb2: // pred: ^bb0
%13 = load_var %left_order : !iree_pydm.free_var_ref -> !iree_pydm.object
%14 = load_var %right_order : !iree_pydm.free_var_ref -> !iree_pydm.object
%15 = apply_compare "gt", %13, %14 : !iree_pydm.object, !iree_pydm.object
%16 = bool_to_pred %15
cond_br %16, ^bb3, ^bb4
^bb3: // pred: ^bb2
%17 = load_var %left : !iree_pydm.free_var_ref -> !iree_pydm.object
%18 = load_var %left : !iree_pydm.free_var_ref -> !iree_pydm.object
%19 = get_type_code %18 : !iree_pydm.object
%20 = load_var %right : !iree_pydm.free_var_ref -> !iree_pydm.object
%exc_result, %result = dynamic_call @pydmrtl$_promote_to(%19, %20) : (!iree_pydm.integer, !iree_pydm.object) -> (!iree_pydm.exception_result, !iree_pydm.object)
raise_on_failure %exc_result : !iree_pydm.exception_result
%21 = make_tuple %17, %result : !iree_pydm.object, !iree_pydm.object -> !iree_pydm.tuple
return %21 : !iree_pydm.tuple
^bb4: // pred: ^bb2
%22 = load_var %right : !iree_pydm.free_var_ref -> !iree_pydm.object
%23 = get_type_code %22 : !iree_pydm.object
%24 = load_var %left : !iree_pydm.free_var_ref -> !iree_pydm.object
%exc_result_0, %result_1 = dynamic_call @pydmrtl$_promote_to(%23, %24) : (!iree_pydm.integer, !iree_pydm.object) -> (!iree_pydm.exception_result, !iree_pydm.object)
raise_on_failure %exc_result_0 : !iree_pydm.exception_result
%25 = load_var %right : !iree_pydm.free_var_ref -> !iree_pydm.object
%26 = make_tuple %result_1, %25 : !iree_pydm.object, !iree_pydm.object -> !iree_pydm.tuple
return %26 : !iree_pydm.tuple
}
iree_pydm.func private @pydmrtl$_promote_to(%arg0: !iree_pydm.integer, %arg1: !iree_pydm.object) -> (!iree_pydm.exception_result, !iree_pydm.object) attributes {arg_names = ["type_code", "value"], cell_vars = [], free_vars = ["type_code", "value"]} {
%0 = constant 9 : i64 -> !iree_pydm.integer
%1 = constant 10 : i64 -> !iree_pydm.integer
%2 = none
%value = alloc_free_var "value" -> !iree_pydm.free_var_ref
%type_code = alloc_free_var "type_code" -> !iree_pydm.free_var_ref
%3 = box %arg0 : !iree_pydm.integer -> !iree_pydm.object<!iree_pydm.integer>
store_var %type_code = %3 : !iree_pydm.free_var_ref, !iree_pydm.object<!iree_pydm.integer>
store_var %value = %arg1 : !iree_pydm.free_var_ref, !iree_pydm.object
%4 = load_var %type_code : !iree_pydm.free_var_ref -> !iree_pydm.object
%5 = apply_compare "eq", %4, %0 : !iree_pydm.object, !iree_pydm.integer
%6 = bool_to_pred %5
cond_br %6, ^bb1, ^bb2
^bb1: // pred: ^bb0
%7 = load_var %value : !iree_pydm.free_var_ref -> !iree_pydm.object
%exc_result, %result = dynamic_call @pydmrtl$_promote_to_integer(%7) : (!iree_pydm.object) -> (!iree_pydm.exception_result, !iree_pydm.object)
raise_on_failure %exc_result : !iree_pydm.exception_result
return %result : !iree_pydm.object
^bb2: // pred: ^bb0
%8 = load_var %type_code : !iree_pydm.free_var_ref -> !iree_pydm.object
%9 = apply_compare "eq", %8, %1 : !iree_pydm.object, !iree_pydm.integer
%10 = bool_to_pred %9
cond_br %10, ^bb3, ^bb4
^bb3: // pred: ^bb2
%11 = load_var %value : !iree_pydm.free_var_ref -> !iree_pydm.object
%exc_result_0, %result_1 = dynamic_call @pydmrtl$_promote_to_real(%11) : (!iree_pydm.object) -> (!iree_pydm.exception_result, !iree_pydm.object)
raise_on_failure %exc_result_0 : !iree_pydm.exception_result
return %result_1 : !iree_pydm.object
^bb4: // pred: ^bb2
%12 = failure -> !iree_pydm.exception_result
raise_on_failure %12 : !iree_pydm.exception_result
%13 = box %2 : !iree_pydm.none -> !iree_pydm.object<!iree_pydm.none>
return %13 : !iree_pydm.object<!iree_pydm.none>
}
iree_pydm.func private @pydmrtl$_promote_to_real(%arg0: !iree_pydm.object) -> (!iree_pydm.exception_result, !iree_pydm.real) attributes {arg_names = ["value"], cell_vars = [], free_vars = ["value"]} {
%0 = constant 8 : i64 -> !iree_pydm.integer
%1 = constant 9 : i64 -> !iree_pydm.integer
%2 = constant 0.000000e+00 : f64 -> !iree_pydm.real
%value = alloc_free_var "value" -> !iree_pydm.free_var_ref
store_var %value = %arg0 : !iree_pydm.free_var_ref, !iree_pydm.object
%3 = load_var %value : !iree_pydm.free_var_ref -> !iree_pydm.object
%4 = get_type_code %3 : !iree_pydm.object
%5 = apply_compare "eq", %0, %4 : !iree_pydm.integer, !iree_pydm.integer
%6 = bool_to_pred %5
cond_br %6, ^bb1, ^bb2
^bb1: // pred: ^bb0
%7 = load_var %value : !iree_pydm.free_var_ref -> !iree_pydm.object
%status, %primitive = unbox %7 : !iree_pydm.object -> !iree_pydm.bool
%8 = promote_numeric %primitive : !iree_pydm.bool -> !iree_pydm.real
return %8 : !iree_pydm.real
^bb2: // pred: ^bb0
%9 = load_var %value : !iree_pydm.free_var_ref -> !iree_pydm.object
%10 = get_type_code %9 : !iree_pydm.object
%11 = apply_compare "eq", %1, %10 : !iree_pydm.integer, !iree_pydm.integer
%12 = bool_to_pred %11
cond_br %12, ^bb3, ^bb4
^bb3: // pred: ^bb2
%13 = load_var %value : !iree_pydm.free_var_ref -> !iree_pydm.object
%status_0, %primitive_1 = unbox %13 : !iree_pydm.object -> !iree_pydm.integer
%14 = promote_numeric %primitive_1 : !iree_pydm.integer -> !iree_pydm.real
return %14 : !iree_pydm.real
^bb4: // pred: ^bb2
%15 = failure -> !iree_pydm.exception_result
raise_on_failure %15 : !iree_pydm.exception_result
return %2 : !iree_pydm.real
}
iree_pydm.func private @pydmrtl$_promote_to_integer(%arg0: !iree_pydm.object) -> (!iree_pydm.exception_result, !iree_pydm.integer) attributes {arg_names = ["value"], cell_vars = [], free_vars = ["value"]} {
%0 = constant 8 : i64 -> !iree_pydm.integer
%1 = constant 0 : i64 -> !iree_pydm.integer
%value = alloc_free_var "value" -> !iree_pydm.free_var_ref
store_var %value = %arg0 : !iree_pydm.free_var_ref, !iree_pydm.object
%2 = load_var %value : !iree_pydm.free_var_ref -> !iree_pydm.object
%3 = get_type_code %2 : !iree_pydm.object
%4 = apply_compare "eq", %0, %3 : !iree_pydm.integer, !iree_pydm.integer
%5 = bool_to_pred %4
cond_br %5, ^bb1, ^bb2
^bb1: // pred: ^bb0
%6 = load_var %value : !iree_pydm.free_var_ref -> !iree_pydm.object
%status, %primitive = unbox %6 : !iree_pydm.object -> !iree_pydm.bool
%7 = promote_numeric %primitive : !iree_pydm.bool -> !iree_pydm.integer
return %7 : !iree_pydm.integer
^bb2: // pred: ^bb0
%8 = failure -> !iree_pydm.exception_result
raise_on_failure %8 : !iree_pydm.exception_result
return %1 : !iree_pydm.integer
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment