Skip to content

Commit edb8c26

Browse files
committed
Revert "[MLIR] Change getBackwardSlice to return a logicalresult rather than crash (llvm#140961)"
This reverts commit 6a8dde0.
1 parent 5086bf1 commit edb8c26

File tree

10 files changed

+39
-67
lines changed

10 files changed

+39
-67
lines changed

mlir/include/mlir/Analysis/SliceAnalysis.h

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -138,17 +138,13 @@ void getForwardSlice(Value root, SetVector<Operation *> *forwardSlice,
138138
/// Assuming all local orders match the numbering order:
139139
/// {1, 2, 5, 3, 4, 6}
140140
///
141-
/// This function returns whether the backwards slice was able to be
142-
/// successfully computed, and failure if it was unable to determine the slice.
143-
LogicalResult getBackwardSlice(Operation *op,
144-
SetVector<Operation *> *backwardSlice,
145-
const BackwardSliceOptions &options = {});
141+
void getBackwardSlice(Operation *op, SetVector<Operation *> *backwardSlice,
142+
const BackwardSliceOptions &options = {});
146143

147144
/// Value-rooted version of `getBackwardSlice`. Return the union of all backward
148145
/// slices for the op defining or owning the value `root`.
149-
LogicalResult getBackwardSlice(Value root,
150-
SetVector<Operation *> *backwardSlice,
151-
const BackwardSliceOptions &options = {});
146+
void getBackwardSlice(Value root, SetVector<Operation *> *backwardSlice,
147+
const BackwardSliceOptions &options = {});
152148

153149
/// Iteratively computes backward slices and forward slices until
154150
/// a fixed point is reached. Returns an `SetVector<Operation *>` which

mlir/include/mlir/Query/Matcher/SliceMatchers.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,7 @@ bool BackwardSliceMatcher<Matcher>::matches(
112112
}
113113
return true;
114114
};
115-
LogicalResult result = getBackwardSlice(rootOp, &backwardSlice, options);
116-
assert(result.succeeded() && "expected backward slice to succeed");
115+
getBackwardSlice(rootOp, &backwardSlice, options);
117116
return options.inclusive ? backwardSlice.size() > 1
118117
: backwardSlice.size() >= 1;
119118
}

mlir/lib/Analysis/SliceAnalysis.cpp

Lines changed: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -80,43 +80,41 @@ void mlir::getForwardSlice(Value root, SetVector<Operation *> *forwardSlice,
8080
forwardSlice->insert(v.rbegin(), v.rend());
8181
}
8282

83-
static LogicalResult getBackwardSliceImpl(Operation *op,
84-
SetVector<Operation *> *backwardSlice,
85-
const BackwardSliceOptions &options) {
83+
static void getBackwardSliceImpl(Operation *op,
84+
SetVector<Operation *> *backwardSlice,
85+
const BackwardSliceOptions &options) {
8686
if (!op || op->hasTrait<OpTrait::IsIsolatedFromAbove>())
87-
return success();
87+
return;
8888

8989
// Evaluate whether we should keep this def.
9090
// This is useful in particular to implement scoping; i.e. return the
9191
// transitive backwardSlice in the current scope.
9292
if (options.filter && !options.filter(op))
93-
return success();
93+
return;
9494

9595
auto processValue = [&](Value value) {
9696
if (auto *definingOp = value.getDefiningOp()) {
9797
if (backwardSlice->count(definingOp) == 0)
98-
return getBackwardSliceImpl(definingOp, backwardSlice, options);
98+
getBackwardSliceImpl(definingOp, backwardSlice, options);
9999
} else if (auto blockArg = dyn_cast<BlockArgument>(value)) {
100100
if (options.omitBlockArguments)
101-
return success();
101+
return;
102102

103103
Block *block = blockArg.getOwner();
104104
Operation *parentOp = block->getParentOp();
105105
// TODO: determine whether we want to recurse backward into the other
106106
// blocks of parentOp, which are not technically backward unless they flow
107107
// into us. For now, just bail.
108108
if (parentOp && backwardSlice->count(parentOp) == 0) {
109-
if (parentOp->getNumRegions() == 1 &&
110-
llvm::hasSingleElement(parentOp->getRegion(0).getBlocks())) {
111-
return getBackwardSliceImpl(parentOp, backwardSlice, options);
112-
}
109+
assert(parentOp->getNumRegions() == 1 &&
110+
llvm::hasSingleElement(parentOp->getRegion(0).getBlocks()));
111+
getBackwardSliceImpl(parentOp, backwardSlice, options);
113112
}
113+
} else {
114+
llvm_unreachable("No definingOp and not a block argument.");
114115
}
115-
return failure();
116116
};
117117

118-
bool succeeded = true;
119-
120118
if (!options.omitUsesFromAbove) {
121119
llvm::for_each(op->getRegions(), [&](Region &region) {
122120
// Walk this region recursively to collect the regions that descend from
@@ -127,41 +125,36 @@ static LogicalResult getBackwardSliceImpl(Operation *op,
127125
region.walk([&](Operation *op) {
128126
for (OpOperand &operand : op->getOpOperands()) {
129127
if (!descendents.contains(operand.get().getParentRegion()))
130-
if (!processValue(operand.get()).succeeded()) {
131-
return WalkResult::interrupt();
132-
}
128+
processValue(operand.get());
133129
}
134-
return WalkResult::advance();
135130
});
136131
});
137132
}
138133
llvm::for_each(op->getOperands(), processValue);
139134

140135
backwardSlice->insert(op);
141-
return success(succeeded);
142136
}
143137

144-
LogicalResult mlir::getBackwardSlice(Operation *op,
145-
SetVector<Operation *> *backwardSlice,
146-
const BackwardSliceOptions &options) {
147-
LogicalResult result = getBackwardSliceImpl(op, backwardSlice, options);
138+
void mlir::getBackwardSlice(Operation *op,
139+
SetVector<Operation *> *backwardSlice,
140+
const BackwardSliceOptions &options) {
141+
getBackwardSliceImpl(op, backwardSlice, options);
148142

149143
if (!options.inclusive) {
150144
// Don't insert the top level operation, we just queried on it and don't
151145
// want it in the results.
152146
backwardSlice->remove(op);
153147
}
154-
return result;
155148
}
156149

157-
LogicalResult mlir::getBackwardSlice(Value root,
158-
SetVector<Operation *> *backwardSlice,
159-
const BackwardSliceOptions &options) {
150+
void mlir::getBackwardSlice(Value root, SetVector<Operation *> *backwardSlice,
151+
const BackwardSliceOptions &options) {
160152
if (Operation *definingOp = root.getDefiningOp()) {
161-
return getBackwardSlice(definingOp, backwardSlice, options);
153+
getBackwardSlice(definingOp, backwardSlice, options);
154+
return;
162155
}
163156
Operation *bbAargOwner = cast<BlockArgument>(root).getOwner()->getParentOp();
164-
return getBackwardSlice(bbAargOwner, backwardSlice, options);
157+
getBackwardSlice(bbAargOwner, backwardSlice, options);
165158
}
166159

167160
SetVector<Operation *>
@@ -177,9 +170,7 @@ mlir::getSlice(Operation *op, const BackwardSliceOptions &backwardSliceOptions,
177170
auto *currentOp = (slice)[currentIndex];
178171
// Compute and insert the backwardSlice starting from currentOp.
179172
backwardSlice.clear();
180-
LogicalResult result =
181-
getBackwardSlice(currentOp, &backwardSlice, backwardSliceOptions);
182-
assert(result.succeeded());
173+
getBackwardSlice(currentOp, &backwardSlice, backwardSliceOptions);
183174
slice.insert_range(backwardSlice);
184175

185176
// Compute and insert the forwardSlice starting from currentOp.
@@ -202,8 +193,7 @@ static bool dependsOnCarriedVals(Value value,
202193
sliceOptions.filter = [&](Operation *op) {
203194
return !ancestorOp->isAncestor(op);
204195
};
205-
LogicalResult result = getBackwardSlice(value, &slice, sliceOptions);
206-
assert(result.succeeded());
196+
getBackwardSlice(value, &slice, sliceOptions);
207197

208198
// Check that none of the operands of the operations in the backward slice are
209199
// loop iteration arguments, and neither is the value itself.

mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,9 +317,7 @@ getSliceContract(Operation *op,
317317
auto *currentOp = (slice)[currentIndex];
318318
// Compute and insert the backwardSlice starting from currentOp.
319319
backwardSlice.clear();
320-
LogicalResult result =
321-
getBackwardSlice(currentOp, &backwardSlice, backwardSliceOptions);
322-
assert(result.succeeded() && "expected a backward slice");
320+
getBackwardSlice(currentOp, &backwardSlice, backwardSliceOptions);
323321
slice.insert_range(backwardSlice);
324322

325323
// Compute and insert the forwardSlice starting from currentOp.

mlir/lib/Dialect/Linalg/Transforms/HoistPadding.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,10 @@ static void computeBackwardSlice(tensor::PadOp padOp,
124124
getUsedValuesDefinedAbove(padOp.getRegion(), padOp.getRegion(),
125125
valuesDefinedAbove);
126126
for (Value v : valuesDefinedAbove) {
127-
LogicalResult result = getBackwardSlice(v, &backwardSlice, sliceOptions);
128-
assert(result.succeeded() && "expected a backward slice");
127+
getBackwardSlice(v, &backwardSlice, sliceOptions);
129128
}
130129
// Then, add the backward slice from padOp itself.
131-
LogicalResult result =
132-
getBackwardSlice(padOp.getOperation(), &backwardSlice, sliceOptions);
133-
assert(result.succeeded() && "expected a backward slice");
130+
getBackwardSlice(padOp.getOperation(), &backwardSlice, sliceOptions);
134131
}
135132

136133
//===----------------------------------------------------------------------===//

mlir/lib/Dialect/NVGPU/TransformOps/NVGPUTransformOps.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -290,10 +290,8 @@ static void getPipelineStages(
290290
});
291291
options.inclusive = true;
292292
for (Operation &op : forOp.getBody()->getOperations()) {
293-
if (stage0Ops.contains(&op)) {
294-
LogicalResult result = getBackwardSlice(&op, &dependencies, options);
295-
assert(result.succeeded() && "expected a backward slice");
296-
}
293+
if (stage0Ops.contains(&op))
294+
getBackwardSlice(&op, &dependencies, options);
297295
}
298296

299297
for (Operation &op : forOp.getBody()->getOperations()) {

mlir/lib/Dialect/SCF/Transforms/TileUsingInterface.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1772,8 +1772,7 @@ checkAssumptionForLoop(Operation *loopOp, Operation *consumerOp,
17721772
};
17731773
llvm::SetVector<Operation *> slice;
17741774
for (auto operand : consumerOp->getOperands()) {
1775-
LogicalResult result = getBackwardSlice(operand, &slice, options);
1776-
assert(result.succeeded() && "expected a backward slice");
1775+
getBackwardSlice(operand, &slice, options);
17771776
}
17781777

17791778
if (!slice.empty()) {

mlir/lib/Transforms/Utils/RegionUtils.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1094,8 +1094,7 @@ LogicalResult mlir::moveOperationDependencies(RewriterBase &rewriter,
10941094
return !dominance.properlyDominates(sliceBoundaryOp, insertionPoint);
10951095
};
10961096
llvm::SetVector<Operation *> slice;
1097-
LogicalResult result = getBackwardSlice(op, &slice, options);
1098-
assert(result.succeeded() && "expected a backward slice");
1097+
getBackwardSlice(op, &slice, options);
10991098

11001099
// If the slice contains `insertionPoint` cannot move the dependencies.
11011100
if (slice.contains(insertionPoint)) {
@@ -1160,8 +1159,7 @@ LogicalResult mlir::moveValueDefinitions(RewriterBase &rewriter,
11601159
};
11611160
llvm::SetVector<Operation *> slice;
11621161
for (auto value : prunedValues) {
1163-
LogicalResult result = getBackwardSlice(value, &slice, options);
1164-
assert(result.succeeded() && "expected a backward slice");
1162+
getBackwardSlice(value, &slice, options);
11651163
}
11661164

11671165
// If the slice contains `insertionPoint` cannot move the dependencies.

mlir/test/lib/Dialect/Affine/TestVectorizationUtils.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -154,9 +154,7 @@ void VectorizerTestPass::testBackwardSlicing(llvm::raw_ostream &outs) {
154154
patternTestSlicingOps().match(f, &matches);
155155
for (auto m : matches) {
156156
SetVector<Operation *> backwardSlice;
157-
LogicalResult result =
158-
getBackwardSlice(m.getMatchedOperation(), &backwardSlice);
159-
assert(result.succeeded() && "expected a backward slice");
157+
getBackwardSlice(m.getMatchedOperation(), &backwardSlice);
160158
outs << "\nmatched: " << *m.getMatchedOperation()
161159
<< " backward static slice: ";
162160
for (auto *op : backwardSlice)

mlir/test/lib/IR/TestSlicing.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@ static LogicalResult createBackwardSliceFunction(Operation *op,
4141
options.omitBlockArguments = omitBlockArguments;
4242
// TODO: Make this default.
4343
options.omitUsesFromAbove = false;
44-
LogicalResult result = getBackwardSlice(op, &slice, options);
45-
assert(result.succeeded() && "expected a backward slice");
44+
getBackwardSlice(op, &slice, options);
4645
for (Operation *slicedOp : slice)
4746
builder.clone(*slicedOp, mapper);
4847
builder.create<func::ReturnOp>(loc);

0 commit comments

Comments
 (0)