| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
Reland: [MLIR][Transforms] Fix Mem2Reg removal order to respect dominance (#68877) This commit fixes a bug in the Mem2Reg operation erasure order. Replacing the use-def based topological order with a dominance-based weak order ensures that no operation is removed before all its uses have been replaced. The order relation uses the topological order of blocks and block internal ordering to determine a deterministic operation order. Additionally, the reliance on the DenseMap key order was eliminated by switching to a MapVector, that gives a deterministic iteration order. Example: %ptr = alloca ... ... %val0 = %load %ptr ... // LOAD0 store %val0 %ptr ... %val1 = load %ptr ... // LOAD1 ` When promoting the slot backing %ptr, it can happen that the LOAD0 was cleaned before LOAD1. This results in all uses of LOAD0 being replaced by its reaching definition, before LOAD1's result is replaced by LOAD0's result. The subsequent erasure of LOAD0 can thus not succeed, as it has remaining usages. | 2 年前 | |
[OMPIRBuilder] - Handle dependencies in createTarget (#93977) This patch handles dependencies specified by the depend clause on an OpenMP target construct. It does this much the same way clang does it by materializing an OpenMP task that is tagged with the dependencies. The following functions are relevant to this patch - 1) createTarget - This function itself is largely unchanged except that it now accepts a vector of DependData objects that it simply forwards to emitTargetCall 2) emitTargetCall - This function has changed now to check if an outer target-task needs to be materialized (i.e if target construct has nowait or has depend clause). If yes, it calls emitTargetTask to do all the heavy lifting for creating and dispatching the task. 3) emitTargetTask - Bulk of the change is here. See the large comment explaining what it does at the beginning of this function | 1 年前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 2 年前 | ||
| 1 年前 |