Enhance the logic of phi -> phi_start transform#295
Enhance the logic of phi -> phi_start transform#295ShangkunLi wants to merge 3 commits intocoredac:mainfrom
phi -> phi_start transform#295Conversation
|
Hi~ @n0thingNoob, Since you can handle the |
After discussion with @n0thingNoob, we can handle this later after evaluation of their project. |
What we avoid transforming using this PR? |
For ir like: %48 = neura.grant_predicate %39, %43 : !neura.data<i64, i1>, !neura.data<i1, i1> -> !neura.data<i64, i1>
%49 = neura.grant_predicate %39, %43 : !neura.data<i64, i1>, !neura.data<i1, i1> -> !neura.data<i64, i1>
%50 = neura.grant_predicate %40, %43 : !neura.data<i32, i1>, !neura.data<i1, i1> -> !neura.data<i32, i1>
%51 = neura.reserve : !neura.data<i32, i1>
%52 = neura.phi_start %50, %51 : !neura.data<i32, i1>, !neura.data<i32, i1> -> !neura.data<i32, i1>
%53 = neura.reserve : !neura.data<i64, i1>
%54 = neura.phi_start %49, %53 : !neura.data<i64, i1>, !neura.data<i64, i1> -> !neura.data<i64, i1>
%55 = neura.reserve : !neura.data<i64, i1>
%56 = neura.phi_start %48, %55 : !neura.data<i64, i1>, !neura.data<i64, i1> -> !neura.data<i64, i1>
%57 = "neura.gep"(%56) <{operandSegmentSizes = array<i32: 0, 1>}> {lhs_value = "%arg3"} : (!neura.data<i64, i1>) -> !neura.data<!llvm.ptr, i1>
%58 = "neura.load"(%57) : (!neura.data<!llvm.ptr, i1>) -> !neura.data<i32, i1>
%59 = "neura.icmp"(%58) <{cmpType = "slt"}> {rhs_value = 0 : i32} : (!neura.data<i32, i1>) -> !neura.data<i1, i1>
%60 = neura.grant_predicate %57, %59 : !neura.data<!llvm.ptr, i1>, !neura.data<i1, i1> -> !neura.data<!llvm.ptr, i1>
%61 = neura.grant_predicate %54, %59 : !neura.data<i64, i1>, !neura.data<i1, i1> -> !neura.data<i64, i1>
%62 = neura.grant_predicate %52, %59 : !neura.data<i32, i1>, !neura.data<i1, i1> -> !neura.data<i32, i1>
%63 = "neura.not"(%59) : (!neura.data<i1, i1>) -> !neura.data<i1, i1>
%64 = neura.grant_predicate %54, %63 : !neura.data<i64, i1>, !neura.data<i1, i1> -> !neura.data<i64, i1>
%65 = neura.grant_predicate %52, %63 : !neura.data<i32, i1>, !neura.data<i1, i1> -> !neura.data<i32, i1>These |
|
Okay, so it sounds like, if the LHS is Above summary is correct? |
Yes, this is what this pr done. But after carefully thinking, I think we don't even need a
The semantics of |
In this pr,
phitophi_start. In the previous logic, we transform allphiwith areserveop as an operand intophi_start. This may violate the semantics in the simulator, so we only transformphiops with areserveop + agrant_onceop intophi_startops