Created
March 15, 2021 20:40
-
-
Save masahi/1142cfae30344fcc3fa6a6182d0b8c40 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| type Option[A] { | |
| Some(A), | |
| None, | |
| } | |
| type static_tensor_float32_2_4_t { | |
| tensor_nil_float32_2_4, | |
| tensor_constructor_float32_2_4(Tensor[(2, 4), float32]), | |
| } | |
| type static_tensor_float32_any_2_4_t { | |
| tensor_nil_float32_any_2_4, | |
| tensor_constructor_float32_any_2_4(Tensor[(?, 2, 4), float32]), | |
| } | |
| type tensor_int64_t { | |
| tensor_nil_int64, | |
| tensor0_int64(int64), | |
| tensor1_int64(Tensor[(?), int64]), | |
| tensor2_int64(Tensor[(?, ?), int64]), | |
| tensor3_int64(Tensor[(?, ?, ?), int64]), | |
| tensor4_int64(Tensor[(?, ?, ?, ?), int64]), | |
| tensor5_int64(Tensor[(?, ?, ?, ?, ?), int64]), | |
| tensor6_int64(Tensor[(?, ?, ?, ?, ?, ?), int64]), | |
| } | |
| type static_tensor_float32_4_t { | |
| tensor_nil_float32_4, | |
| tensor_constructor_float32_4(Tensor[(4), float32]), | |
| } | |
| type List[A] { | |
| Cons(A, List[A]), | |
| Nil, | |
| } | |
| type tensor_uint16_t { | |
| tensor_nil_uint16, | |
| tensor0_uint16(uint16), | |
| tensor1_uint16(Tensor[(?), uint16]), | |
| tensor2_uint16(Tensor[(?, ?), uint16]), | |
| tensor3_uint16(Tensor[(?, ?, ?), uint16]), | |
| tensor4_uint16(Tensor[(?, ?, ?, ?), uint16]), | |
| tensor5_uint16(Tensor[(?, ?, ?, ?, ?), uint16]), | |
| tensor6_uint16(Tensor[(?, ?, ?, ?, ?, ?), uint16]), | |
| } | |
| type static_tensor_float32_any_4_t { | |
| tensor_nil_float32_any_4, | |
| tensor_constructor_float32_any_4(Tensor[(?, 4), float32]), | |
| } | |
| type tensor_uint8_t { | |
| tensor_nil_uint8, | |
| tensor0_uint8(uint8), | |
| tensor1_uint8(Tensor[(?), uint8]), | |
| tensor2_uint8(Tensor[(?, ?), uint8]), | |
| tensor3_uint8(Tensor[(?, ?, ?), uint8]), | |
| tensor4_uint8(Tensor[(?, ?, ?, ?), uint8]), | |
| tensor5_uint8(Tensor[(?, ?, ?, ?, ?), uint8]), | |
| tensor6_uint8(Tensor[(?, ?, ?, ?, ?, ?), uint8]), | |
| } | |
| type tensor_float64_t { | |
| tensor_nil_float64, | |
| tensor0_float64(float64), | |
| tensor1_float64(Tensor[(?), float64]), | |
| tensor2_float64(Tensor[(?, ?), float64]), | |
| tensor3_float64(Tensor[(?, ?, ?), float64]), | |
| tensor4_float64(Tensor[(?, ?, ?, ?), float64]), | |
| tensor5_float64(Tensor[(?, ?, ?, ?, ?), float64]), | |
| tensor6_float64(Tensor[(?, ?, ?, ?, ?, ?), float64]), | |
| } | |
| type tensor_int16_t { | |
| tensor_nil_int16, | |
| tensor0_int16(int16), | |
| tensor1_int16(Tensor[(?), int16]), | |
| tensor2_int16(Tensor[(?, ?), int16]), | |
| tensor3_int16(Tensor[(?, ?, ?), int16]), | |
| tensor4_int16(Tensor[(?, ?, ?, ?), int16]), | |
| tensor5_int16(Tensor[(?, ?, ?, ?, ?), int16]), | |
| tensor6_int16(Tensor[(?, ?, ?, ?, ?, ?), int16]), | |
| } | |
| type Tree[A] { | |
| Rose(A, List[Tree[A]]), | |
| } | |
| type tensor_int32_t { | |
| tensor_nil_int32, | |
| tensor0_int32(int32), | |
| tensor1_int32(Tensor[(?), int32]), | |
| tensor2_int32(Tensor[(?, ?), int32]), | |
| tensor3_int32(Tensor[(?, ?, ?), int32]), | |
| tensor4_int32(Tensor[(?, ?, ?, ?), int32]), | |
| tensor5_int32(Tensor[(?, ?, ?, ?, ?), int32]), | |
| tensor6_int32(Tensor[(?, ?, ?, ?, ?, ?), int32]), | |
| } | |
| type tensor_float32_t { | |
| tensor_nil_float32, | |
| tensor0_float32(float32), | |
| tensor1_float32(Tensor[(?), float32]), | |
| tensor2_float32(Tensor[(?, ?), float32]), | |
| tensor3_float32(Tensor[(?, ?, ?), float32]), | |
| tensor4_float32(Tensor[(?, ?, ?, ?), float32]), | |
| tensor5_float32(Tensor[(?, ?, ?, ?, ?), float32]), | |
| tensor6_float32(Tensor[(?, ?, ?, ?, ?, ?), float32]), | |
| } | |
| type tensor_float16_t { | |
| tensor_nil_float16, | |
| tensor0_float16(float16), | |
| tensor1_float16(Tensor[(?), float16]), | |
| tensor2_float16(Tensor[(?, ?), float16]), | |
| tensor3_float16(Tensor[(?, ?, ?), float16]), | |
| tensor4_float16(Tensor[(?, ?, ?, ?), float16]), | |
| tensor5_float16(Tensor[(?, ?, ?, ?, ?), float16]), | |
| tensor6_float16(Tensor[(?, ?, ?, ?, ?, ?), float16]), | |
| } | |
| type tensor_int8_t { | |
| tensor_nil_int8, | |
| tensor0_int8(int8), | |
| tensor1_int8(Tensor[(?), int8]), | |
| tensor2_int8(Tensor[(?, ?), int8]), | |
| tensor3_int8(Tensor[(?, ?, ?), int8]), | |
| tensor4_int8(Tensor[(?, ?, ?, ?), int8]), | |
| tensor5_int8(Tensor[(?, ?, ?, ?, ?), int8]), | |
| tensor6_int8(Tensor[(?, ?, ?, ?, ?, ?), int8]), | |
| } | |
| type static_tensor_float32_any_any_2_4_t { | |
| tensor_nil_float32_any_any_2_4, | |
| tensor_constructor_float32_any_any_2_4(Tensor[(?, ?, 2, 4), float32]), | |
| } | |
| def @hd[A](%xs: List[A]) -> A { | |
| match? (%xs) { | |
| Cons(%x: A, _) => { | |
| %x | |
| }, | |
| } | |
| } | |
| def @main(%states: (Tensor[(2, 4), float32], Tensor[(2, 4), float32]), %input: Tensor[(5, 2, 3), float32], %cell.weight_ih: Tensor[(16, 3), float32], %cell.layernorm_i.weight: Tensor[(16), float32], %cell.layernorm_i.bias: Tensor[(16), float32], %cell.weight_hh: Tensor[(16, 4), float32], %cell.layernorm_h.weight: Tensor[(16), float32], %cell.layernorm_h.bias: Tensor[(16), float32], %cell.layernorm_c.weight: Tensor[(4), float32], %cell.layernorm_c.bias: Tensor[(4), float32]) { | |
| %0 = Nil; | |
| %36 = ( | |
| let %while_loop = fn (%i.1: int32, %outputs.6: List[meta[IncompleteType][0]], %state.6: (Tensor[(2, 4), float32], Tensor[(2, 4), float32]), %input.1: Tensor[(5, 2, 3), float32]) { | |
| %1 = less(%i.1, 5); | |
| if (%1) { | |
| %2 = add(%i.1, 1); | |
| %3 = take(%input.1, %i.1, axis=0, mode="wrap"); | |
| %4 = transpose(%cell.weight_ih, axes=[1, 0]); | |
| %5 = transpose(%4, axes=[1, 0]); | |
| %6 = nn.dense(%3, %5, units=None); | |
| %7 = nn.layer_norm(%6, %cell.layernorm_i.weight, %cell.layernorm_i.bias); | |
| %8 = %state.6.0; | |
| %9 = transpose(%cell.weight_hh, axes=[1, 0]); | |
| %10 = transpose(%9, axes=[1, 0]); | |
| %11 = nn.dense(%8, %10, units=None); | |
| %12 = nn.layer_norm(%11, %cell.layernorm_h.weight, %cell.layernorm_h.bias); | |
| %13 = add(%7, %12); | |
| %14 = strided_slice(%13, begin=[0, 12], end=[2, 16], strides=[1, 1]); | |
| %15 = sigmoid(%14); | |
| %16 = strided_slice(%13, begin=[0, 4], end=[2, 8], strides=[1, 1]); | |
| %17 = sigmoid(%16); | |
| %18 = %state.6.1; | |
| %19 = multiply(%17, %18); | |
| %20 = strided_slice(%13, begin=[0, 0], end=[2, 4], strides=[1, 1]); | |
| %21 = sigmoid(%20); | |
| %22 = strided_slice(%13, begin=[0, 8], end=[2, 12], strides=[1, 1]); | |
| %23 = tanh(%22); | |
| %24 = multiply(%21, %23); | |
| %25 = add(%19, %24); | |
| %26 = nn.layer_norm(%25, %cell.layernorm_c.weight, %cell.layernorm_c.bias); | |
| %27 = tanh(%26); | |
| %28 = multiply(%15, %27); | |
| %29 = (%28, %26); | |
| %30 = (%28, %29); | |
| %31 = %30.0; | |
| %32 = Nil; | |
| %33 = Cons(%31, %32); | |
| %34 = @concat(%outputs.6, %33); | |
| %35 = %30.1; | |
| %while_loop(%2, %34, %35, %input.1) | |
| } else { | |
| (%i.1, %outputs.6, %state.6, %input.1) | |
| } | |
| }; | |
| %while_loop | |
| ); | |
| %37 = %36(0, %0, %states, %input); | |
| %38 = %37.1; | |
| %39 = @map(tensor_constructor_float32_2_4(Tensor[(2, 4), float32]), %38); | |
| %40 = @tensor_array_stack_float32_2_4(%39); | |
| %41 = @tensor_get_data_float32_any_2_4(%40); | |
| %42 = %37.2; | |
| (%41, %42) | |
| } | |
| def @tensor_array_stack_float32_2_4(%tensor_array: List[static_tensor_float32_2_4_t[]]) -> static_tensor_float32_any_2_4_t[] { | |
| %43 = @map(@tensor_expand_dims_float32_2_4, %tensor_array); | |
| %44 = @hd(%43); | |
| %45 = @tl(%43); | |
| @foldl(@tensor_concatenate_float32_any_2_4, %44, %45) | |
| } | |
| def @concat[A](%xs1: List[A], %ys: List[A]) -> List[A] { | |
| @foldr(Cons, %ys, %xs1) /* /home/masa/projects/dev/tvm/python/tvm/relay/std/prelude.rly */ /* ty=List[A] */ | |
| } | |
| def @map[A, B](%f: fn (A) -> B, %xs2: List[A]) -> List[B] { | |
| match (%xs2) { | |
| Cons(%x1: A, %rest: List[A]) => { | |
| %46 = %f(%x1) /* /home/masa/projects/dev/tvm/python/tvm/relay/std/prelude.rly */ /* ty=B */; | |
| %47 = @map(%f, %rest) /* /home/masa/projects/dev/tvm/python/tvm/relay/std/prelude.rly */ /* ty=List[B] */; | |
| Cons(%46, %47) /* /home/masa/projects/dev/tvm/python/tvm/relay/std/prelude.rly */ /* ty=List[B] */ | |
| }, | |
| Nil => { | |
| Nil /* ty=List[B] */ | |
| }, | |
| } | |
| } | |
| def @tensor_expand_dims_float32_2_4(%x2: static_tensor_float32_2_4_t[]) -> static_tensor_float32_any_2_4_t[] { | |
| match? (%x2) { | |
| tensor_constructor_float32_2_4(%t) => { | |
| %48 = expand_dims(%t, axis=0); | |
| tensor_constructor_float32_any_2_4(%48) | |
| }, | |
| } | |
| } | |
| def @foldl[A, B](%f1: fn (A, B) -> A, %acc: A, %xs3: List[B]) -> A { | |
| match (%xs3) { | |
| Cons(%x3: B, %rest1: List[B]) => { | |
| %49 = %f1(%acc, %x3) /* /home/masa/projects/dev/tvm/python/tvm/relay/std/prelude.rly */ /* ty=A */; | |
| @foldl(%f1, %49, %rest1) /* /home/masa/projects/dev/tvm/python/tvm/relay/std/prelude.rly */ /* ty=A */ | |
| }, | |
| Nil => { | |
| %acc | |
| }, | |
| } | |
| } | |
| def @tl[A](%xs4: List[A]) -> List[A] { | |
| match? (%xs4) { | |
| Cons(_, %rest2: List[A]) => { | |
| %rest2 | |
| }, | |
| } | |
| } | |
| def @tensor_get_data_float32_any_2_4(%tensor: static_tensor_float32_any_2_4_t[]) -> Tensor[(?, 2, 4), float32] { | |
| match? (%tensor) { | |
| tensor_constructor_float32_any_2_4(%t1) => { | |
| %t1 | |
| }, | |
| } | |
| } | |
| def @tensor_concatenate_float32_any_2_4(%x4: static_tensor_float32_any_2_4_t[], %y: static_tensor_float32_any_2_4_t[]) -> static_tensor_float32_any_2_4_t[] { | |
| match? (%x4) { | |
| tensor_constructor_float32_any_2_4(%t11) => { | |
| match? (%y) { | |
| tensor_constructor_float32_any_2_4(%t2) => { | |
| %50 = (%t11, %t2); | |
| %51 = concatenate(%50); | |
| tensor_constructor_float32_any_2_4(%51) | |
| }, | |
| } | |
| }, | |
| } | |
| } | |
| def @foldr[A, B](%f2: fn (A, B) -> B, %acc1: B, %xs5: List[A]) -> B { | |
| match (%xs5) { | |
| Cons(%x5: A, %rest3: List[A]) => { | |
| %52 = @foldr(%f2, %acc1, %rest3) /* /home/masa/projects/dev/tvm/python/tvm/relay/std/prelude.rly */ /* ty=B */; | |
| %f2(%x5, %52) /* /home/masa/projects/dev/tvm/python/tvm/relay/std/prelude.rly */ /* ty=B */ | |
| }, | |
| Nil => { | |
| %acc1 | |
| }, | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment