-
Notifications
You must be signed in to change notification settings - Fork 15
[P1] Interpreting for loop in dataflow style #42
Copy link
Copy link
Open
Labels
new featureNew feature or requestNew feature or request
Description
A for loop is transformed from ctrl flow to data flow in #39:
dataflow/test/neura/ctrl/branch_for.mlir
Lines 57 to 82 in df70824
| // CTRL2DATA: func.func @loop_test() -> f32 attributes {accelerator = "neura"} { | |
| // CTRL2DATA-NEXT: %0 = "neura.constant"() <{predicate = true, value = 10 : i64}> : () -> !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: %1 = "neura.grant_once"(%0) : (!neura.data<i64, i1>) -> !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: %2 = "neura.constant"() <{predicate = true, value = 0 : i64}> : () -> !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: %3 = "neura.grant_once"(%2) : (!neura.data<i64, i1>) -> !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: %4 = "neura.constant"() <{predicate = true, value = 1 : i64}> : () -> !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: %5 = "neura.grant_once"(%4) : (!neura.data<i64, i1>) -> !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: %6 = "neura.constant"() <{predicate = true, value = 3.000000e+00 : f32}> : () -> !neura.data<f32, i1> | |
| // CTRL2DATA-NEXT: %7 = "neura.grant_once"(%6) : (!neura.data<f32, i1>) -> !neura.data<f32, i1> | |
| // CTRL2DATA-NEXT: %8 = "neura.constant"() <{predicate = true, value = 0.000000e+00 : f32}> : () -> !neura.data<f32, i1> | |
| // CTRL2DATA-NEXT: %9 = "neura.grant_once"(%8) : (!neura.data<f32, i1>) -> !neura.data<f32, i1> | |
| // CTRL2DATA-NEXT: %10 = neura.reserve : !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: %11 = "neura.phi"(%3, %10) : (!neura.data<i64, i1>, !neura.data<i64, i1>) -> !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: %12 = neura.reserve : !neura.data<f32, i1> | |
| // CTRL2DATA-NEXT: %13 = "neura.phi"(%9, %12) : (!neura.data<f32, i1>, !neura.data<f32, i1>) -> !neura.data<f32, i1> | |
| // CTRL2DATA-NEXT: %14 = "neura.fadd"(%13, %7) : (!neura.data<f32, i1>, !neura.data<f32, i1>) -> !neura.data<f32, i1> | |
| // CTRL2DATA-NEXT: %15 = "neura.add"(%11, %5) : (!neura.data<i64, i1>, !neura.data<i64, i1>) -> !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: %16 = "neura.icmp"(%15, %1) <{cmpType = "slt"}> : (!neura.data<i64, i1>, !neura.data<i64, i1>) -> !neura.data<i1, i1> | |
| // CTRL2DATA-NEXT: %17 = "neura.not"(%16) : (!neura.data<i1, i1>) -> !neura.data<i1, i1> | |
| // CTRL2DATA-NEXT: %18 = neura.grant_predicate %14, %17 : !neura.data<f32, i1>, !neura.data<i1, i1> -> !neura.data<f32, i1> | |
| // CTRL2DATA-NEXT: %19 = neura.grant_predicate %14, %16 : !neura.data<f32, i1>, !neura.data<i1, i1> -> !neura.data<f32, i1> | |
| // CTRL2DATA-NEXT: neura.ctrl_mov %19 -> %12 : !neura.data<f32, i1> !neura.data<f32, i1> | |
| // CTRL2DATA-NEXT: %20 = neura.grant_predicate %15, %16 : !neura.data<i64, i1>, !neura.data<i1, i1> -> !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: neura.ctrl_mov %20 -> %10 : !neura.data<i64, i1> !neura.data<i64, i1> | |
| // CTRL2DATA-NEXT: "neura.return"(%18) : (!neura.data<f32, i1>) -> () | |
| // CTRL2DATA-NEXT: } |
@Yfeng-44 It would be perfect if you could help with this dataflow for loop support in the interpreter as your next step. Plz let me know if anything is not clear to you. Thanks :-)
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
new featureNew feature or requestNew feature or request