Skip to content

Instantly share code, notes, and snippets.

@stellaraccident
Created October 2, 2021 06:09
Show Gist options
  • Save stellaraccident/bc1b27f3c8e83d64bb8d5a0ad63e7e11 to your computer and use it in GitHub Desktop.
Save stellaraccident/bc1b27f3c8e83d64bb8d5a0ad63e7e11 to your computer and use it in GitHub Desktop.
// ./iree/tools/iree-translate --iree-hal-target-backends=cpu --iree-mlir-to-vm-bytecode-module ~/scratch/ireerepro.mlir > ~/scratch/returnif.vmfb
//
// @M.export_pyfunc
// def return_arg(a: int, b: int, c: int) -> int:
// if b:
// return a
// else:
// return c
// Should print (0, 1) but prints (0, 5)
// ./iree/tools/iree-run-module --module_file=$HOME/scratch/returnif.vmfb --entry_function=return_arg --function_input=5 --function_input=0 --function_input=1
// -----// IR Dump Before mlir::iree_compiler::IREE::ABI::WrapEntryPointsPass ('builtin.module' operation: @module) //----- //
module @module {
func @return_arg(%arg0: i32, %arg1: i32, %arg2: i32) -> (i32, i32) {
%0 = iree.list.create : !iree.list<!iree.variant>
%1 = iree.list.create : !iree.list<!iree.variant>
%2 = iree.list.create : !iree.list<!iree.variant>
%3 = iree.list.create : !iree.list<!iree.variant>
%c2 = constant 2 : index
iree.list.resize %3, %c2 : !iree.list<!iree.variant>
%c0 = constant 0 : index
%c9_i32 = constant 9 : i32
iree.list.set %3[%c0], %c9_i32 : !iree.list<!iree.variant>, i32
%c1 = constant 1 : index
iree.list.set %3[%c1], %arg0 : !iree.list<!iree.variant>, i32
%c2_0 = constant 2 : index
iree.list.resize %0, %c2_0 : !iree.list<!iree.variant>
%c0_1 = constant 0 : index
%c256_i32 = constant 256 : i32
iree.list.set %0[%c0_1], %c256_i32 : !iree.list<!iree.variant>, i32
%c1_2 = constant 1 : index
iree.list.set %0[%c1_2], %3 : !iree.list<!iree.variant>, !iree.list<!iree.variant>
%4 = iree.list.create : !iree.list<!iree.variant>
%c2_3 = constant 2 : index
iree.list.resize %4, %c2_3 : !iree.list<!iree.variant>
%c0_4 = constant 0 : index
%c9_i32_5 = constant 9 : i32
iree.list.set %4[%c0_4], %c9_i32_5 : !iree.list<!iree.variant>, i32
%c1_6 = constant 1 : index
iree.list.set %4[%c1_6], %arg1 : !iree.list<!iree.variant>, i32
%c2_7 = constant 2 : index
iree.list.resize %2, %c2_7 : !iree.list<!iree.variant>
%c0_8 = constant 0 : index
%c256_i32_9 = constant 256 : i32
iree.list.set %2[%c0_8], %c256_i32_9 : !iree.list<!iree.variant>, i32
%c1_10 = constant 1 : index
iree.list.set %2[%c1_10], %4 : !iree.list<!iree.variant>, !iree.list<!iree.variant>
%5 = iree.list.create : !iree.list<!iree.variant>
%c2_11 = constant 2 : index
iree.list.resize %5, %c2_11 : !iree.list<!iree.variant>
%c0_12 = constant 0 : index
%c9_i32_13 = constant 9 : i32
iree.list.set %5[%c0_12], %c9_i32_13 : !iree.list<!iree.variant>, i32
%c1_14 = constant 1 : index
iree.list.set %5[%c1_14], %arg2 : !iree.list<!iree.variant>, i32
%c2_15 = constant 2 : index
iree.list.resize %1, %c2_15 : !iree.list<!iree.variant>
%c0_16 = constant 0 : index
%c256_i32_17 = constant 256 : i32
iree.list.set %1[%c0_16], %c256_i32_17 : !iree.list<!iree.variant>, i32
%c1_18 = constant 1 : index
iree.list.set %1[%c1_18], %5 : !iree.list<!iree.variant>, !iree.list<!iree.variant>
%c1_19 = constant 1 : index
%6 = iree.list.get %2[%c1_19] : !iree.list<!iree.variant> -> !iree.list<!iree.variant>
%7:2 = call @pydmrtl$object_as_bool(%6) : (!iree.list<!iree.variant>) -> (i32, i1)
%c0_i32 = constant 0 : i32
%8 = cmpi eq, %c0_i32, %7#0 : i32
cond_br %8, ^bb1, ^bb6
^bb1: // pred: ^bb0
cond_br %7#1, ^bb2(%0 : !iree.list<!iree.variant>), ^bb2(%1 : !iree.list<!iree.variant>)
^bb2(%9: !iree.list<!iree.variant>): // 2 preds: ^bb1, ^bb1
%c1_20 = constant 1 : index
%10 = iree.list.get %9[%c1_20] : !iree.list<!iree.variant> -> !iree.list<!iree.variant>
%c0_21 = constant 0 : index
%c9_i32_22 = constant 9 : i32
%11 = iree.list.get %10[%c0_21] : !iree.list<!iree.variant> -> i32
%12 = cmpi eq, %c9_i32_22, %11 : i32
cond_br %12, ^bb3, ^bb7
^bb3: // pred: ^bb2
%c1_23 = constant 1 : index
%c0_i32_24 = constant 0 : i32
%13 = iree.list.get %10[%c1_23] : !iree.list<!iree.variant> -> i32
br ^bb4(%c0_i32_24, %13 : i32, i32)
^bb4(%14: i32, %15: i32): // 2 preds: ^bb3, ^bb7
%c0_i32_25 = constant 0 : i32
%16 = cmpi eq, %c0_i32_25, %14 : i32
cond_br %16, ^bb5, ^bb8
^bb5: // pred: ^bb4
%c0_i32_26 = constant 0 : i32
return %c0_i32_26, %15 : i32, i32
^bb6: // pred: ^bb0
%c0_i32_27 = constant 0 : i32
return %7#0, %c0_i32_27 : i32, i32
^bb7: // pred: ^bb2
%c-4_i32 = constant -4 : i32
%c0_i32_28 = constant 0 : i32
br ^bb4(%c-4_i32, %c0_i32_28 : i32, i32)
^bb8: // pred: ^bb4
%c0_i32_29 = constant 0 : i32
return %14, %c0_i32_29 : i32, i32
}
func private @pydmrtl$object_as_bool(%arg0: !iree.list<!iree.variant>) -> (i32, i1) {
%true = constant true
%cst = constant 0.000000e+00 : f32
%c10_i32 = constant 10 : i32
%c0_i32 = constant 0 : i32
%c9_i32 = constant 9 : i32
%false = constant false
%c1_i32 = constant 1 : i32
%c8_i32 = constant 8 : i32
%0 = iree.list.create : !iree.list<!iree.variant>
%c2 = constant 2 : index
iree.list.resize %0, %c2 : !iree.list<!iree.variant>
%c0 = constant 0 : index
%c256_i32 = constant 256 : i32
iree.list.set %0[%c0], %c256_i32 : !iree.list<!iree.variant>, i32
%c1 = constant 1 : index
iree.list.set %0[%c1], %arg0 : !iree.list<!iree.variant>, !iree.list<!iree.variant>
%c1_0 = constant 1 : index
%1 = iree.list.get %0[%c1_0] : !iree.list<!iree.variant> -> !iree.list<!iree.variant>
%c0_1 = constant 0 : index
%2 = iree.list.get %1[%c0_1] : !iree.list<!iree.variant> -> i32
%3 = cmpi eq, %c8_i32, %2 : i32
cond_br %3, ^bb1, ^bb4
^bb1: // pred: ^bb0
%c1_2 = constant 1 : index
%4 = iree.list.get %0[%c1_2] : !iree.list<!iree.variant> -> !iree.list<!iree.variant>
%c0_3 = constant 0 : index
%c8_i32_4 = constant 8 : i32
%5 = iree.list.get %4[%c0_3] : !iree.list<!iree.variant> -> i32
%6 = cmpi eq, %c8_i32_4, %5 : i32
cond_br %6, ^bb2, ^bb16
^bb2: // pred: ^bb1
%c1_5 = constant 1 : index
%c0_i32_6 = constant 0 : i32
%7 = iree.list.get %4[%c1_5] : !iree.list<!iree.variant> -> i1
br ^bb3(%c0_i32_6, %7 : i32, i1)
^bb3(%8: i32, %9: i1): // 2 preds: ^bb2, ^bb16
%c0_i32_7 = constant 0 : i32
return %c0_i32_7, %9 : i32, i1
^bb4: // pred: ^bb0
%c1_8 = constant 1 : index
%10 = iree.list.get %0[%c1_8] : !iree.list<!iree.variant> -> !iree.list<!iree.variant>
%c0_9 = constant 0 : index
%11 = iree.list.get %10[%c0_9] : !iree.list<!iree.variant> -> i32
%12 = cmpi eq, %c1_i32, %11 : i32
cond_br %12, ^bb5(%false : i1), ^bb6
^bb5(%13: i1): // 2 preds: ^bb4, ^bb10
%c0_i32_10 = constant 0 : i32
return %c0_i32_10, %13 : i32, i1
^bb6: // pred: ^bb4
%c1_11 = constant 1 : index
%14 = iree.list.get %0[%c1_11] : !iree.list<!iree.variant> -> !iree.list<!iree.variant>
%c0_12 = constant 0 : index
%15 = iree.list.get %14[%c0_12] : !iree.list<!iree.variant> -> i32
%16 = cmpi eq, %c9_i32, %15 : i32
cond_br %16, ^bb7, ^bb10
^bb7: // pred: ^bb6
%c1_13 = constant 1 : index
%17 = iree.list.get %0[%c1_13] : !iree.list<!iree.variant> -> !iree.list<!iree.variant>
%c0_14 = constant 0 : index
%c9_i32_15 = constant 9 : i32
%18 = iree.list.get %17[%c0_14] : !iree.list<!iree.variant> -> i32
%19 = cmpi eq, %c9_i32_15, %18 : i32
cond_br %19, ^bb8, ^bb15
^bb8: // pred: ^bb7
%c1_16 = constant 1 : index
%c0_i32_17 = constant 0 : i32
%20 = iree.list.get %17[%c1_16] : !iree.list<!iree.variant> -> i32
br ^bb9(%c0_i32_17, %20 : i32, i32)
^bb9(%21: i32, %22: i32): // 2 preds: ^bb8, ^bb15
%23 = cmpi ne, %22, %c0_i32 : i32
%c0_i32_18 = constant 0 : i32
return %c0_i32_18, %23 : i32, i1
^bb10: // pred: ^bb6
%c1_19 = constant 1 : index
%24 = iree.list.get %0[%c1_19] : !iree.list<!iree.variant> -> !iree.list<!iree.variant>
%c0_20 = constant 0 : index
%25 = iree.list.get %24[%c0_20] : !iree.list<!iree.variant> -> i32
%26 = cmpi eq, %c10_i32, %25 : i32
cond_br %26, ^bb11, ^bb5(%true : i1)
^bb11: // pred: ^bb10
%c1_21 = constant 1 : index
%27 = iree.list.get %0[%c1_21] : !iree.list<!iree.variant> -> !iree.list<!iree.variant>
%c0_22 = constant 0 : index
%c10_i32_23 = constant 10 : i32
%28 = iree.list.get %27[%c0_22] : !iree.list<!iree.variant> -> i32
%29 = cmpi eq, %c10_i32_23, %28 : i32
cond_br %29, ^bb12, ^bb14
^bb12: // pred: ^bb11
%c1_24 = constant 1 : index
%c0_i32_25 = constant 0 : i32
%30 = iree.list.get %27[%c1_24] : !iree.list<!iree.variant> -> f32
br ^bb13(%c0_i32_25, %30 : i32, f32)
^bb13(%31: i32, %32: f32): // 2 preds: ^bb12, ^bb14
%33 = cmpf one, %32, %cst : f32
%c0_i32_26 = constant 0 : i32
return %c0_i32_26, %33 : i32, i1
^bb14: // pred: ^bb11
%c-4_i32 = constant -4 : i32
%cst_27 = constant 0.000000e+00 : f32
br ^bb13(%c-4_i32, %cst_27 : i32, f32)
^bb15: // pred: ^bb7
%c-4_i32_28 = constant -4 : i32
%c0_i32_29 = constant 0 : i32
br ^bb9(%c-4_i32_28, %c0_i32_29 : i32, i32)
^bb16: // pred: ^bb1
%c-4_i32_30 = constant -4 : i32
%false_31 = constant false
br ^bb3(%c-4_i32_30, %false_31 : i32, i1)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment