User Details
- User Since
- Jan 9 2020, 1:29 AM (194 w, 6 d)
Sep 28 2021
Updated error handling to propagate errors upwards in order to signal pass failures.
Sep 22 2021
Addressed reviewer comments and enhanced error handling.
Sep 21 2021
Addressed reviewer comments and added support for failing interface functions.
Sep 14 2021
Added new buildClone operation to the newly introduced AllocationOpInterface.
Made Op interface methods static.
Added support for automatic building of "compatible" deallocation/clone operations based on inverse alias information.
Added support for building "default" DeallocOp/CloneOp values in the case of unknown value sources (e.g. function parameters).
Refined verification part to work on logical result values.
Sep 7 2021
Jul 25 2021
Jul 23 2021
Addressed reviewer comments from @rriddle.
Jul 22 2021
Changed namespace qualifiers to explicitly reference the llvm/mlir namespaces.
Jul 21 2021
@herhut I think it might be beneficial to either remove the ReturnLike trait or to change it in a way such that it automatically provides a "default implementation" of the newly added RegionBranchTerminatorOpInterface.
Jul 14 2021
Adatped ForwardDataFlowSolver to support the newly added RegionBranchTerminatorOpInterface.
Jul 13 2021
@rriddle there is also another use of the ReturnLike trait in the scope of the DataFlowAnalysis. Currently, you check whether a terminator is ReturnLike. If not, you mark the following region successors to have reached a pessimistic fixpoint. This raises the question of whether we want to change this behavior to propagate lattice information in the context of "more return-like" operations.
Addressed reviewer comments and refined RegionBranchTerminatorOpInterface.
Adapted uses of hasTrait<ReturnLike> to use newly added functions (if possible).
Jun 28 2021
May 10 2021
Awesome work, thanks a lot :-)
May 7 2021
May 5 2021
I have to admit that my comment regarding all aliases of A was a bit misleading :-( At the time of writing, I accidentally had the "flow"-property (required by the BufferDeallocation phase) in mind. My comment was meant to address potentially "inconsistent" results of two "alias analyses" (of course, aliasing is a symmetric property!) :-)
Apr 29 2021
I have to admit that I am not convinced by the general notion of a "dependency". In my opinion, BufferDependencyAnalysis::resolve(B) => {B, C, D}, does not give any guarantees about whether C and D actually depend on B in the sense of true "data dependencies". Instead, C and D can also be block arguments that are pure aliases without any read/write dependencies. Also, BufferAliasAnalysis::resolve(B) => {A, B, C, D} feels to me like A can be an alias of B, which is not actually the case, right? B has two aliases, namely C and D on the one hand. On the other hand, A has three aliases, namely B, C and D. Returning A as an alias of B could cause confusion in the future. What do you think about this?
Dec 22 2020
@silvas @mehdi_amini @herhut based on the feedback and the discussion in the public Discourse forums, we will close this PR for now until there is a better solution to overcome these limitations in the future.
Dec 7 2020
@silvas Our intention was not to "bypass anything", sorry for the confusion. As you have mentioned, the discussion went a bit "idle" and we had to more forwards to simplify the integration of the BufferDeallocation pass into other third-party sub projects. Therefore, we proposed this CL that realizes an extremely light-weight version of the Pass Interface being discussed in the forums. However, the proposed solution in the scope of this CL is meant to unblock others on the one hand and being minimally invasive on the other hand. In other words: as soon as we can come up with a better solution based on the Discourse discussion, we can easily "revert" or "update" this pass interface. Please note further that existing code will not break or require further updates after merging this CL.
Dec 3 2020
Nov 12 2020
Awesome work 🚀 I don't see any problems to land this CL after addressing the nits 🤓
Nov 11 2020
Nov 6 2020
Nov 5 2020
Actually, it sounds like the direction we want to go with this is to split this functionality out. I'll do that in a separate patch.
Oct 30 2020
Oct 29 2020
Awesome work +1. I guess this should be ready to go after replacing some autos with their underlying types.
For example, FunctionLike doesn't guarantee that the op has a FunctionType, so all the code here where we modify the function type can't be written generically (see this thread for a similar issue:
Unfortunately, we cannot use this trait for the reasons you mentioned.
Oct 28 2020
I guess this approach introduces a limitation with respect to applicability to arbitrary dialects. We are now able to match ReturnOp and CallOps only while the previous version supported a generic customization to arbitrary dialects, right?
I would recommend that we should try to match CallOpInterface and ReturnLike implementations to make this code more generic in favor of standard CallOp and ReturnOp-based matchers from the Std dialect.
Oct 27 2020
The basic idea behind these generic type converts was to provide a highly customizable way to decompose and rewrite tuple types.
However, if there are no real users and as you are currently refactoring these parts into a separate pass anyway, it might be a good idea to simplify these conversion patterns.
See this CL for additional comments on the general refactoring process.
Oct 19 2020
Oct 16 2020
Addressed reviewer comments.
Oct 14 2020
Refactored code and addressed reviewer comments.
Oct 13 2020
Refined all parts of this PR and addressed all reviewer comments.
Sep 30 2020
Addressed reviewer comments and changed the BufferAllocationHoisting pass to pay attention to escaping buffers via backedges.
Sep 16 2020
Sep 9 2020
Sep 8 2020
Addressed reviewer comments regarding tests, comments and invariants.
Sep 2 2020
Aug 25 2020
Completed support for loops using structured control flow and addressed reviewer comments.
Aug 7 2020
Jun 26 2020
Addressed reviewer comments.
Jun 25 2020
Added support for region-region control flow within operations that implement the RegionBranchOpInterface.
Added new test operations to verify more advanced region-region control-flow scenarios.
Jun 24 2020
Jun 23 2020
Refactored implementation and simplified the iteration over all successor regions.
Jun 19 2020
Added extended support for the RegionOpInterface to query successor bindings for successor regions
Jun 17 2020
Jun 16 2020
Jun 15 2020
Refactored access to getSuccessorOperands to distinguish between read-only and write-enabled accesses.
Added an additional comment and change to code to use the implicit OperandRange conversion operator.
Jun 9 2020
Resolved merge conflicts and integrated an additional test case into an existing one in order to capture an additional special case.
Jun 3 2020
Updated processing of aliases to avoid the aggressive insertion of copy operations in special cases.
Reformatted test cases.
May 27 2020
Fixed corner cases in which no copies have been created due to aliasing (see reviewer comments).
Added additional test cases to simulate such special control-flow scenarios.
Changed behavior of the BufferPlacement pass to ignore Alloc operations with multiple allocation results.
May 20 2020
May 19 2020
Implemented a fix-point iteration to reduce the number of required copies.
Fixed minor issues (see review comments).
May 18 2020
@mehdi_amini Thanks a lot for your feedback. Unfortunately, I haven't received some comments from him.