When debuging a crash or conversion failure in a deep pass pipeline,
there are often many interleaved frames with `failed` and `succeeded`.
`LogicalResult` is used through the pass infrastructure, so by not implementing
failure in terms of a call to succeess, this patch noticeably reduces the total
total call stack depth and improves the debugging experience.
Reviewed By: rriddle
Differential Revision: https://reviews.llvm.org/D135116
/// If isFailure is true a `failure` result is generated, otherwise a
/// 'success' result is generated.
static LogicalResult failure(bool isFailure = true) {
- return success(!isFailure);
+ return LogicalResult(!isFailure);
}
/// Returns true if the provided LogicalResult corresponds to a success value.
bool succeeded() const { return isSuccess; }
/// Returns true if the provided LogicalResult corresponds to a failure value.
- bool failed() const { return !succeeded(); }
+ bool failed() const { return !isSuccess; }
private:
LogicalResult(bool isSuccess) : isSuccess(isSuccess) {}