29template <OpComparable Op> mlir::FailureOr<bool>
isLocationLess(
const Op &l,
const Op &r) {
30 Op &lhs =
const_cast<Op &
>(l);
31 Op &rhs =
const_cast<Op &
>(r);
32 mlir::Location lhsLoc = lhs.getOperation()->getLoc(), rhsLoc = rhs.getOperation()->getLoc();
33 auto unknownLoc = mlir::UnknownLoc::get(lhs.getOperation()->getContext());
35 if (lhsLoc == unknownLoc || rhsLoc == unknownLoc) {
36 return mlir::failure();
39 auto lhsFileLoc = llvm::dyn_cast<mlir::FileLineColLoc>(lhsLoc);
40 auto rhsFileLoc = llvm::dyn_cast<mlir::FileLineColLoc>(rhsLoc);
41 if (lhsFileLoc && rhsFileLoc) {
42 auto filenameCmp = lhsFileLoc.getFilename().compare(rhsFileLoc.getFilename());
43 return filenameCmp < 0 || (filenameCmp == 0 && lhsFileLoc.getLine() < rhsFileLoc.getLine()) ||
44 (filenameCmp == 0 && lhsFileLoc.getLine() == rhsFileLoc.getLine() &&
45 lhsFileLoc.getColumn() < rhsFileLoc.getColumn());
47 return mlir::failure();