diff --git a/mlir/include/mlir/Analysis/SliceAnalysis.h b/mlir/include/mlir/Analysis/SliceAnalysis.h --- a/mlir/include/mlir/Analysis/SliceAnalysis.h +++ b/mlir/include/mlir/Analysis/SliceAnalysis.h @@ -17,7 +17,7 @@ #include "llvm/ADT/SetVector.h" namespace mlir { - +class BlockArgument; class Operation; class Value; @@ -205,6 +205,37 @@ /// Returns a topologically sorted SetVector. SetVector topologicalSort(const SetVector &toSort); +/// Utility to match a generic reduction given a list of iteration-carried +/// arguments, `iterCarriedArgs` and the position of the potential reduction +/// argument within the list, `redPos`. If a reduction is matched, returns the +/// reduced value and the topologically-sorted list of combiner operations +/// involved in the reduction. Otherwise, returns a null value. +/// +/// The matching algorithm relies on the following invariants, which are subject +/// to change: +/// 1. The first combiner operation must be a binary operation with the +/// iteration-carried value and the reduced value as operands. +/// 2. The iteration-carried value and combiner operations must be side +/// effect-free, have single result and a single use. +/// 3. Combiner operations must be immediately nested in the region op +/// performing the reduction. +/// 4. Reduction def-use chain must end in a terminator op that yields the +/// next iteration/output values in the same order as the iteration-carried +/// values in `iterCarriedArgs`. +/// 5. `iterCarriedArgs` must contain all the iteration-carried/output values +/// of the region op performing the reduction. +/// +/// This utility is generic enough to detect reductions involving multiple +/// combiner operations (disabled for now) across multiple dialects, including +/// Linalg, Affine and SCF. For the sake of genericity, it does not return +/// specific enum values for the combiner operations since its goal is also +/// matching reductions without pre-defined semantics in core MLIR. It's up to +/// each client to make sense out of the list of combiner operations. It's also +/// up to each client to check for additional invariants on the expected +/// reductions not covered by this generic matching. +Value matchReduction(ArrayRef iterCarriedArgs, unsigned redPos, + SmallVectorImpl &combinerOps); + } // namespace mlir #endif // MLIR_ANALYSIS_SLICEANALYSIS_H_ diff --git a/mlir/include/mlir/Analysis/AffineAnalysis.h b/mlir/include/mlir/Dialect/Affine/Analysis/AffineAnalysis.h rename from mlir/include/mlir/Analysis/AffineAnalysis.h rename to mlir/include/mlir/Dialect/Affine/Analysis/AffineAnalysis.h --- a/mlir/include/mlir/Analysis/AffineAnalysis.h +++ b/mlir/include/mlir/Dialect/Affine/Analysis/AffineAnalysis.h @@ -12,8 +12,8 @@ // //===----------------------------------------------------------------------===// -#ifndef MLIR_ANALYSIS_AFFINEANALYSIS_H -#define MLIR_ANALYSIS_AFFINEANALYSIS_H +#ifndef MLIR_DIALECT_AFFINE_ANALYSIS_AFFINEANALYSIS_H +#define MLIR_DIALECT_AFFINE_ANALYSIS_AFFINEANALYSIS_H #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" @@ -185,4 +185,4 @@ } // namespace mlir -#endif // MLIR_ANALYSIS_AFFINEANALYSIS_H +#endif // MLIR_DIALECT_AFFINE_ANALYSIS_AFFINEANALYSIS_H diff --git a/mlir/include/mlir/Analysis/AffineStructures.h b/mlir/include/mlir/Dialect/Affine/Analysis/AffineStructures.h rename from mlir/include/mlir/Analysis/AffineStructures.h rename to mlir/include/mlir/Dialect/Affine/Analysis/AffineStructures.h --- a/mlir/include/mlir/Analysis/AffineStructures.h +++ b/mlir/include/mlir/Dialect/Affine/Analysis/AffineStructures.h @@ -10,8 +10,8 @@ // //===----------------------------------------------------------------------===// -#ifndef MLIR_ANALYSIS_AFFINESTRUCTURES_H -#define MLIR_ANALYSIS_AFFINESTRUCTURES_H +#ifndef MLIR_DIALECT_AFFINE_ANALYSIS_AFFINESTRUCTURES_H +#define MLIR_DIALECT_AFFINE_ANALYSIS_AFFINESTRUCTURES_H #include "mlir/Analysis/Presburger/IntegerPolyhedron.h" #include "mlir/Analysis/Presburger/Matrix.h" @@ -694,4 +694,4 @@ } // namespace mlir. -#endif // MLIR_ANALYSIS_AFFINESTRUCTURES_H +#endif // MLIR_DIALECT_AFFINE_ANALYSIS_AFFINESTRUCTURES_H diff --git a/mlir/include/mlir/Analysis/LoopAnalysis.h b/mlir/include/mlir/Dialect/Affine/Analysis/LoopAnalysis.h rename from mlir/include/mlir/Analysis/LoopAnalysis.h rename to mlir/include/mlir/Dialect/Affine/Analysis/LoopAnalysis.h --- a/mlir/include/mlir/Analysis/LoopAnalysis.h +++ b/mlir/include/mlir/Dialect/Affine/Analysis/LoopAnalysis.h @@ -10,8 +10,8 @@ // //===----------------------------------------------------------------------===// -#ifndef MLIR_ANALYSIS_LOOPANALYSIS_H -#define MLIR_ANALYSIS_LOOPANALYSIS_H +#ifndef MLIR_DIALECT_AFFINE_ANALYSIS_LOOPANALYSIS_H +#define MLIR_DIALECT_AFFINE_ANALYSIS_LOOPANALYSIS_H #include "mlir/Support/LLVM.h" #include "llvm/ADT/ArrayRef.h" @@ -83,36 +83,6 @@ // the support. bool isOpwiseShiftValid(AffineForOp forOp, ArrayRef shifts); -/// Utility to match a generic reduction given a list of iteration-carried -/// arguments, `iterCarriedArgs` and the position of the potential reduction -/// argument within the list, `redPos`. If a reduction is matched, returns the -/// reduced value and the topologically-sorted list of combiner operations -/// involved in the reduction. Otherwise, returns a null value. -/// -/// The matching algorithm relies on the following invariants, which are subject -/// to change: -/// 1. The first combiner operation must be a binary operation with the -/// iteration-carried value and the reduced value as operands. -/// 2. The iteration-carried value and combiner operations must be side -/// effect-free, have single result and a single use. -/// 3. Combiner operations must be immediately nested in the region op -/// performing the reduction. -/// 4. Reduction def-use chain must end in a terminator op that yields the -/// next iteration/output values in the same order as the iteration-carried -/// values in `iterCarriedArgs`. -/// 5. `iterCarriedArgs` must contain all the iteration-carried/output values -/// of the region op performing the reduction. -/// -/// This utility is generic enough to detect reductions involving multiple -/// combiner operations (disabled for now) across multiple dialects, including -/// Linalg, Affine and SCF. For the sake of genericity, it does not return -/// specific enum values for the combiner operations since its goal is also -/// matching reductions without pre-defined semantics in core MLIR. It's up to -/// each client to make sense out of the list of combiner operations. It's also -/// up to each client to check for additional invariants on the expected -/// reductions not covered by this generic matching. -Value matchReduction(ArrayRef iterCarriedArgs, unsigned redPos, - SmallVectorImpl &combinerOps); } // namespace mlir -#endif // MLIR_ANALYSIS_LOOPANALYSIS_H +#endif // MLIR_DIALECT_AFFINE_ANALYSIS_LOOPANALYSIS_H diff --git a/mlir/include/mlir/Analysis/NestedMatcher.h b/mlir/include/mlir/Dialect/Affine/Analysis/NestedMatcher.h rename from mlir/include/mlir/Analysis/NestedMatcher.h rename to mlir/include/mlir/Dialect/Affine/Analysis/NestedMatcher.h --- a/mlir/include/mlir/Analysis/NestedMatcher.h +++ b/mlir/include/mlir/Dialect/Affine/Analysis/NestedMatcher.h @@ -6,8 +6,8 @@ // //===----------------------------------------------------------------------===// -#ifndef MLIR_ANALYSIS_NESTEDMATCHER_H -#define MLIR_ANALYSIS_NESTEDMATCHER_H +#ifndef MLIR_DIALECT_AFFINE_ANALYSIS_NESTEDMATCHER_H +#define MLIR_DIALECT_AFFINE_ANALYSIS_NESTEDMATCHER_H #include "mlir/IR/BuiltinOps.h" #include "mlir/IR/Operation.h" @@ -198,4 +198,4 @@ } // namespace matcher } // namespace mlir -#endif // MLIR_ANALYSIS_NESTEDMATCHER_H +#endif // MLIR_DIALECT_AFFINE_ANALYSIS_NESTEDMATCHER_H diff --git a/mlir/include/mlir/Analysis/Utils.h b/mlir/include/mlir/Dialect/Affine/Analysis/Utils.h rename from mlir/include/mlir/Analysis/Utils.h rename to mlir/include/mlir/Dialect/Affine/Analysis/Utils.h --- a/mlir/include/mlir/Analysis/Utils.h +++ b/mlir/include/mlir/Dialect/Affine/Analysis/Utils.h @@ -13,10 +13,10 @@ // //===----------------------------------------------------------------------===// -#ifndef MLIR_ANALYSIS_UTILS_H -#define MLIR_ANALYSIS_UTILS_H +#ifndef MLIR_DIALECT_AFFINE_ANALYSIS_UTILS_H +#define MLIR_DIALECT_AFFINE_ANALYSIS_UTILS_H -#include "mlir/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/IR/AffineMap.h" #include "mlir/IR/Block.h" #include "mlir/IR/Location.h" @@ -382,4 +382,4 @@ } // namespace mlir -#endif // MLIR_ANALYSIS_UTILS_H +#endif // MLIR_DIALECT_AFFINE_ANALYSIS_UTILS_H diff --git a/mlir/include/mlir/Dialect/Affine/Utils.h b/mlir/include/mlir/Dialect/Affine/Utils.h --- a/mlir/include/mlir/Dialect/Affine/Utils.h +++ b/mlir/include/mlir/Dialect/Affine/Utils.h @@ -13,7 +13,7 @@ #ifndef MLIR_DIALECT_AFFINE_UTILS_H #define MLIR_DIALECT_AFFINE_UTILS_H -#include "mlir/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" namespace mlir { diff --git a/mlir/lib/Analysis/CMakeLists.txt b/mlir/lib/Analysis/CMakeLists.txt --- a/mlir/lib/Analysis/CMakeLists.txt +++ b/mlir/lib/Analysis/CMakeLists.txt @@ -1,16 +1,11 @@ set(LLVM_OPTIONAL_SOURCES AliasAnalysis.cpp - AffineAnalysis.cpp - AffineStructures.cpp BufferViewFlowAnalysis.cpp CallGraph.cpp DataFlowAnalysis.cpp DataLayoutAnalysis.cpp Liveness.cpp - LoopAnalysis.cpp - NestedMatcher.cpp SliceAnalysis.cpp - Utils.cpp AliasAnalysis/LocalAliasAnalysis.cpp ) @@ -41,27 +36,4 @@ MLIRViewLikeInterface ) -add_mlir_library(MLIRLoopAnalysis - AffineAnalysis.cpp - AffineStructures.cpp - LoopAnalysis.cpp - NestedMatcher.cpp - Utils.cpp - - ADDITIONAL_HEADER_DIRS - ${MLIR_MAIN_INCLUDE_DIR}/mlir/Analysis - - DEPENDS - mlir-headers - - LINK_LIBS PUBLIC - MLIRAffine - MLIRAnalysis - MLIRCallInterfaces - MLIRControlFlowInterfaces - MLIRInferTypeOpInterface - MLIRPresburger - MLIRSCF - ) - add_subdirectory(Presburger) diff --git a/mlir/lib/Analysis/SliceAnalysis.cpp b/mlir/lib/Analysis/SliceAnalysis.cpp --- a/mlir/lib/Analysis/SliceAnalysis.cpp +++ b/mlir/lib/Analysis/SliceAnalysis.cpp @@ -15,6 +15,7 @@ #include "mlir/IR/Operation.h" #include "mlir/Support/LLVM.h" #include "llvm/ADT/SetVector.h" +#include "llvm/ADT/SmallPtrSet.h" /// /// Implements Analysis functions specific to slicing in Function. @@ -212,3 +213,105 @@ } return res; } + +/// Returns true if `value` (transitively) depends on iteration-carried values +/// of the given `ancestorOp`. +static bool dependsOnCarriedVals(Value value, + ArrayRef iterCarriedArgs, + Operation *ancestorOp) { + // Compute the backward slice of the value. + SetVector slice; + getBackwardSlice(value, &slice, + [&](Operation *op) { return !ancestorOp->isAncestor(op); }); + + // Check that none of the operands of the operations in the backward slice are + // loop iteration arguments, and neither is the value itself. + SmallPtrSet iterCarriedValSet(iterCarriedArgs.begin(), + iterCarriedArgs.end()); + if (iterCarriedValSet.contains(value)) + return true; + + for (Operation *op : slice) + for (Value operand : op->getOperands()) + if (iterCarriedValSet.contains(operand)) + return true; + + return false; +} + +/// Utility to match a generic reduction given a list of iteration-carried +/// arguments, `iterCarriedArgs` and the position of the potential reduction +/// argument within the list, `redPos`. If a reduction is matched, returns the +/// reduced value and the topologically-sorted list of combiner operations +/// involved in the reduction. Otherwise, returns a null value. +/// +/// The matching algorithm relies on the following invariants, which are subject +/// to change: +/// 1. The first combiner operation must be a binary operation with the +/// iteration-carried value and the reduced value as operands. +/// 2. The iteration-carried value and combiner operations must be side +/// effect-free, have single result and a single use. +/// 3. Combiner operations must be immediately nested in the region op +/// performing the reduction. +/// 4. Reduction def-use chain must end in a terminator op that yields the +/// next iteration/output values in the same order as the iteration-carried +/// values in `iterCarriedArgs`. +/// 5. `iterCarriedArgs` must contain all the iteration-carried/output values +/// of the region op performing the reduction. +/// +/// This utility is generic enough to detect reductions involving multiple +/// combiner operations (disabled for now) across multiple dialects, including +/// Linalg, Affine and SCF. For the sake of genericity, it does not return +/// specific enum values for the combiner operations since its goal is also +/// matching reductions without pre-defined semantics in core MLIR. It's up to +/// each client to make sense out of the list of combiner operations. It's also +/// up to each client to check for additional invariants on the expected +/// reductions not covered by this generic matching. +Value mlir::matchReduction(ArrayRef iterCarriedArgs, + unsigned redPos, + SmallVectorImpl &combinerOps) { + assert(redPos < iterCarriedArgs.size() && "'redPos' is out of bounds"); + + BlockArgument redCarriedVal = iterCarriedArgs[redPos]; + if (!redCarriedVal.hasOneUse()) + return nullptr; + + // For now, the first combiner op must be a binary op. + Operation *combinerOp = *redCarriedVal.getUsers().begin(); + if (combinerOp->getNumOperands() != 2) + return nullptr; + Value reducedVal = combinerOp->getOperand(0) == redCarriedVal + ? combinerOp->getOperand(1) + : combinerOp->getOperand(0); + + Operation *redRegionOp = + iterCarriedArgs.front().getOwner()->getParent()->getParentOp(); + if (dependsOnCarriedVals(reducedVal, iterCarriedArgs, redRegionOp)) + return nullptr; + + // Traverse the def-use chain starting from the first combiner op until a + // terminator is found. Gather all the combiner ops along the way in + // topological order. + while (!combinerOp->mightHaveTrait()) { + if (!MemoryEffectOpInterface::hasNoEffect(combinerOp) || + combinerOp->getNumResults() != 1 || !combinerOp->hasOneUse() || + combinerOp->getParentOp() != redRegionOp) + return nullptr; + + combinerOps.push_back(combinerOp); + combinerOp = *combinerOp->getUsers().begin(); + } + + // Limit matching to single combiner op until we can properly test reductions + // involving multiple combiners. + if (combinerOps.size() != 1) + return nullptr; + + // Check that the yielded value is in the same position as in + // `iterCarriedArgs`. + Operation *terminatorOp = combinerOp; + if (terminatorOp->getOperand(redPos) != combinerOps.back()->getResults()[0]) + return nullptr; + + return reducedVal; +} diff --git a/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp b/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp --- a/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp +++ b/mlir/lib/Conversion/SCFToOpenMP/SCFToOpenMP.cpp @@ -13,7 +13,8 @@ #include "mlir/Conversion/SCFToOpenMP/SCFToOpenMP.h" #include "../PassDetail.h" -#include "mlir/Analysis/LoopAnalysis.h" +#include "mlir/Analysis/SliceAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" #include "mlir/Dialect/OpenMP/OpenMPDialect.h" diff --git a/mlir/lib/Analysis/AffineAnalysis.cpp b/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp rename from mlir/lib/Analysis/AffineAnalysis.cpp rename to mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp --- a/mlir/lib/Analysis/AffineAnalysis.cpp +++ b/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp @@ -11,10 +11,10 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" #include "mlir/Analysis/SliceAnalysis.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" diff --git a/mlir/lib/Analysis/AffineStructures.cpp b/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp rename from mlir/lib/Analysis/AffineStructures.cpp rename to mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp --- a/mlir/lib/Analysis/AffineStructures.cpp +++ b/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/Analysis/Presburger/LinearTransform.h" #include "mlir/Analysis/Presburger/Simplex.h" #include "mlir/Analysis/Presburger/Utils.h" diff --git a/mlir/lib/Dialect/Affine/Analysis/CMakeLists.txt b/mlir/lib/Dialect/Affine/Analysis/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/mlir/lib/Dialect/Affine/Analysis/CMakeLists.txt @@ -0,0 +1,22 @@ +add_mlir_dialect_library(MLIRAffineAnalysis + AffineAnalysis.cpp + AffineStructures.cpp + LoopAnalysis.cpp + NestedMatcher.cpp + Utils.cpp + + ADDITIONAL_HEADER_DIRS + ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Affine + + DEPENDS + mlir-headers + + LINK_LIBS PUBLIC + MLIRAffine + MLIRAnalysis + MLIRCallInterfaces + MLIRControlFlowInterfaces + MLIRInferTypeOpInterface + MLIRPresburger + MLIRSCF + ) diff --git a/mlir/lib/Analysis/LoopAnalysis.cpp b/mlir/lib/Dialect/Affine/Analysis/LoopAnalysis.cpp rename from mlir/lib/Analysis/LoopAnalysis.cpp rename to mlir/lib/Dialect/Affine/Analysis/LoopAnalysis.cpp --- a/mlir/lib/Analysis/LoopAnalysis.cpp +++ b/mlir/lib/Dialect/Affine/Analysis/LoopAnalysis.cpp @@ -10,12 +10,12 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/AffineStructures.h" -#include "mlir/Analysis/NestedMatcher.h" #include "mlir/Analysis/SliceAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/NestedMatcher.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Support/MathExtras.h" @@ -381,105 +381,3 @@ } return true; } - -/// Returns true if `value` (transitively) depends on iteration-carried values -/// of the given `ancestorOp`. -static bool dependsOnCarriedVals(Value value, - ArrayRef iterCarriedArgs, - Operation *ancestorOp) { - // Compute the backward slice of the value. - SetVector slice; - getBackwardSlice(value, &slice, - [&](Operation *op) { return !ancestorOp->isAncestor(op); }); - - // Check that none of the operands of the operations in the backward slice are - // loop iteration arguments, and neither is the value itself. - SmallPtrSet iterCarriedValSet(iterCarriedArgs.begin(), - iterCarriedArgs.end()); - if (iterCarriedValSet.contains(value)) - return true; - - for (Operation *op : slice) - for (Value operand : op->getOperands()) - if (iterCarriedValSet.contains(operand)) - return true; - - return false; -} - -/// Utility to match a generic reduction given a list of iteration-carried -/// arguments, `iterCarriedArgs` and the position of the potential reduction -/// argument within the list, `redPos`. If a reduction is matched, returns the -/// reduced value and the topologically-sorted list of combiner operations -/// involved in the reduction. Otherwise, returns a null value. -/// -/// The matching algorithm relies on the following invariants, which are subject -/// to change: -/// 1. The first combiner operation must be a binary operation with the -/// iteration-carried value and the reduced value as operands. -/// 2. The iteration-carried value and combiner operations must be side -/// effect-free, have single result and a single use. -/// 3. Combiner operations must be immediately nested in the region op -/// performing the reduction. -/// 4. Reduction def-use chain must end in a terminator op that yields the -/// next iteration/output values in the same order as the iteration-carried -/// values in `iterCarriedArgs`. -/// 5. `iterCarriedArgs` must contain all the iteration-carried/output values -/// of the region op performing the reduction. -/// -/// This utility is generic enough to detect reductions involving multiple -/// combiner operations (disabled for now) across multiple dialects, including -/// Linalg, Affine and SCF. For the sake of genericity, it does not return -/// specific enum values for the combiner operations since its goal is also -/// matching reductions without pre-defined semantics in core MLIR. It's up to -/// each client to make sense out of the list of combiner operations. It's also -/// up to each client to check for additional invariants on the expected -/// reductions not covered by this generic matching. -Value mlir::matchReduction(ArrayRef iterCarriedArgs, - unsigned redPos, - SmallVectorImpl &combinerOps) { - assert(redPos < iterCarriedArgs.size() && "'redPos' is out of bounds"); - - BlockArgument redCarriedVal = iterCarriedArgs[redPos]; - if (!redCarriedVal.hasOneUse()) - return nullptr; - - // For now, the first combiner op must be a binary op. - Operation *combinerOp = *redCarriedVal.getUsers().begin(); - if (combinerOp->getNumOperands() != 2) - return nullptr; - Value reducedVal = combinerOp->getOperand(0) == redCarriedVal - ? combinerOp->getOperand(1) - : combinerOp->getOperand(0); - - Operation *redRegionOp = - iterCarriedArgs.front().getOwner()->getParent()->getParentOp(); - if (dependsOnCarriedVals(reducedVal, iterCarriedArgs, redRegionOp)) - return nullptr; - - // Traverse the def-use chain starting from the first combiner op until a - // terminator is found. Gather all the combiner ops along the way in - // topological order. - while (!combinerOp->mightHaveTrait()) { - if (!MemoryEffectOpInterface::hasNoEffect(combinerOp) || - combinerOp->getNumResults() != 1 || !combinerOp->hasOneUse() || - combinerOp->getParentOp() != redRegionOp) - return nullptr; - - combinerOps.push_back(combinerOp); - combinerOp = *combinerOp->getUsers().begin(); - } - - // Limit matching to single combiner op until we can properly test reductions - // involving multiple combiners. - if (combinerOps.size() != 1) - return nullptr; - - // Check that the yielded value is in the same position as in - // `iterCarriedArgs`. - Operation *terminatorOp = combinerOp; - if (terminatorOp->getOperand(redPos) != combinerOps.back()->getResults()[0]) - return nullptr; - - return reducedVal; -} diff --git a/mlir/lib/Analysis/NestedMatcher.cpp b/mlir/lib/Dialect/Affine/Analysis/NestedMatcher.cpp rename from mlir/lib/Analysis/NestedMatcher.cpp rename to mlir/lib/Dialect/Affine/Analysis/NestedMatcher.cpp --- a/mlir/lib/Analysis/NestedMatcher.cpp +++ b/mlir/lib/Dialect/Affine/Analysis/NestedMatcher.cpp @@ -8,7 +8,7 @@ #include -#include "mlir/Analysis/NestedMatcher.h" +#include "mlir/Dialect/Affine/Analysis/NestedMatcher.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" diff --git a/mlir/lib/Analysis/Utils.cpp b/mlir/lib/Dialect/Affine/Analysis/Utils.cpp rename from mlir/lib/Analysis/Utils.cpp rename to mlir/lib/Dialect/Affine/Analysis/Utils.cpp --- a/mlir/lib/Analysis/Utils.cpp +++ b/mlir/lib/Dialect/Affine/Analysis/Utils.cpp @@ -11,10 +11,10 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/Utils.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Analysis/Presburger/PresburgerSet.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" diff --git a/mlir/lib/Dialect/Affine/CMakeLists.txt b/mlir/lib/Dialect/Affine/CMakeLists.txt --- a/mlir/lib/Dialect/Affine/CMakeLists.txt +++ b/mlir/lib/Dialect/Affine/CMakeLists.txt @@ -1,3 +1,4 @@ +add_subdirectory(Analysis) add_subdirectory(IR) add_subdirectory(Transforms) add_subdirectory(Utils) diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp --- a/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineDataCopyGeneration.cpp @@ -20,7 +20,7 @@ //===----------------------------------------------------------------------===// #include "PassDetail.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Passes.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp --- a/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineLoopInvariantCodeMotion.cpp @@ -11,11 +11,11 @@ //===----------------------------------------------------------------------===// #include "PassDetail.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/AffineStructures.h" -#include "mlir/Analysis/LoopAnalysis.h" #include "mlir/Analysis/SliceAnalysis.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Passes.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" diff --git a/mlir/lib/Dialect/Affine/Transforms/AffineParallelize.cpp b/mlir/lib/Dialect/Affine/Transforms/AffineParallelize.cpp --- a/mlir/lib/Dialect/Affine/Transforms/AffineParallelize.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/AffineParallelize.cpp @@ -12,10 +12,10 @@ //===----------------------------------------------------------------------===// #include "PassDetail.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/AffineStructures.h" -#include "mlir/Analysis/LoopAnalysis.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Dialect/Affine/Passes.h" diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp --- a/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopTiling.cpp @@ -11,10 +11,10 @@ //===----------------------------------------------------------------------===// #include "PassDetail.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/AffineStructures.h" -#include "mlir/Analysis/LoopAnalysis.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Dialect/Affine/Passes.h" diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp --- a/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopUnroll.cpp @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// #include "PassDetail.h" -#include "mlir/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Passes.h" #include "mlir/IR/AffineExpr.h" diff --git a/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp b/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp --- a/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/LoopUnrollAndJam.cpp @@ -34,8 +34,8 @@ //===----------------------------------------------------------------------===// #include "PassDetail.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Passes.h" #include "mlir/IR/AffineExpr.h" diff --git a/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp b/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp --- a/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/SimplifyAffineStructures.cpp @@ -11,7 +11,7 @@ //===----------------------------------------------------------------------===// #include "PassDetail.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Passes.h" #include "mlir/IR/IntegerSet.h" diff --git a/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp b/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp --- a/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp +++ b/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp @@ -12,9 +12,9 @@ //===----------------------------------------------------------------------===// #include "PassDetail.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/LoopAnalysis.h" -#include "mlir/Analysis/NestedMatcher.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/NestedMatcher.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" diff --git a/mlir/lib/Dialect/Affine/Utils/Utils.cpp b/mlir/lib/Dialect/Affine/Utils/Utils.cpp --- a/mlir/lib/Dialect/Affine/Utils/Utils.cpp +++ b/mlir/lib/Dialect/Affine/Utils/Utils.cpp @@ -13,7 +13,7 @@ #include "mlir/Dialect/Affine/Utils.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" diff --git a/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt b/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt --- a/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt +++ b/mlir/lib/Dialect/Linalg/Analysis/CMakeLists.txt @@ -5,10 +5,10 @@ ${MLIR_MAIN_INCLUDE_DIR}/mlir/Dialect/Linalg LINK_LIBS PUBLIC + MLIRAffineAnalysis MLIRAnalysis MLIRIR MLIRLinalg - MLIRLoopAnalysis MLIRMemRef MLIRStandard ) diff --git a/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp b/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Hoisting.cpp @@ -12,8 +12,8 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/Linalg/Transforms/Hoisting.h" -#include "mlir/Analysis/AffineStructures.h" #include "mlir/Analysis/SliceAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" diff --git a/mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp b/mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp --- a/mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp +++ b/mlir/lib/Dialect/Linalg/Transforms/Vectorization.cpp @@ -10,8 +10,8 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/LoopAnalysis.h" #include "mlir/Analysis/SliceAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/Linalg/Analysis/DependenceAnalysis.h" #include "mlir/Dialect/Linalg/IR/Linalg.h" diff --git a/mlir/lib/Dialect/Linalg/Utils/Utils.cpp b/mlir/lib/Dialect/Linalg/Utils/Utils.cpp --- a/mlir/lib/Dialect/Linalg/Utils/Utils.cpp +++ b/mlir/lib/Dialect/Linalg/Utils/Utils.cpp @@ -12,8 +12,8 @@ #include "mlir/Dialect/Linalg/Utils/Utils.h" -#include "mlir/Analysis/AffineStructures.h" #include "mlir/Analysis/SliceAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" diff --git a/mlir/lib/Dialect/SCF/Transforms/AffineCanonicalizationUtils.cpp b/mlir/lib/Dialect/SCF/Transforms/AffineCanonicalizationUtils.cpp --- a/mlir/lib/Dialect/SCF/Transforms/AffineCanonicalizationUtils.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/AffineCanonicalizationUtils.cpp @@ -11,7 +11,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/SCF/AffineCanonicalizationUtils.h" -#include "mlir/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/SCF/SCF.h" #include "mlir/Dialect/Utils/StaticValueUtils.h" diff --git a/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp b/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp --- a/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp +++ b/mlir/lib/Dialect/SCF/Transforms/LoopSpecialization.cpp @@ -12,7 +12,7 @@ //===----------------------------------------------------------------------===// #include "PassDetail.h" -#include "mlir/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/SCF/AffineCanonicalizationUtils.h" diff --git a/mlir/lib/Dialect/Vector/CMakeLists.txt b/mlir/lib/Dialect/Vector/CMakeLists.txt --- a/mlir/lib/Dialect/Vector/CMakeLists.txt +++ b/mlir/lib/Dialect/Vector/CMakeLists.txt @@ -27,7 +27,7 @@ MLIRLinalg MLIRMemRef MLIRSCF - MLIRLoopAnalysis + MLIRAffineAnalysis MLIRDataLayoutInterfaces MLIRSideEffectInterfaces MLIRVectorInterfaces diff --git a/mlir/lib/Dialect/Vector/VectorUtils.cpp b/mlir/lib/Dialect/Vector/VectorUtils.cpp --- a/mlir/lib/Dialect/Vector/VectorUtils.cpp +++ b/mlir/lib/Dialect/Vector/VectorUtils.cpp @@ -11,7 +11,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Dialect/Vector/VectorUtils.h" -#include "mlir/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" diff --git a/mlir/lib/Transforms/LoopFusion.cpp b/mlir/lib/Transforms/LoopFusion.cpp --- a/mlir/lib/Transforms/LoopFusion.cpp +++ b/mlir/lib/Transforms/LoopFusion.cpp @@ -11,10 +11,10 @@ //===----------------------------------------------------------------------===// #include "PassDetail.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/AffineStructures.h" -#include "mlir/Analysis/LoopAnalysis.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/IR/AffineExpr.h" diff --git a/mlir/lib/Transforms/PipelineDataTransfer.cpp b/mlir/lib/Transforms/PipelineDataTransfer.cpp --- a/mlir/lib/Transforms/PipelineDataTransfer.cpp +++ b/mlir/lib/Transforms/PipelineDataTransfer.cpp @@ -13,9 +13,9 @@ #include "PassDetail.h" #include "mlir/Transforms/Passes.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/LoopAnalysis.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Dialect/StandardOps/Utils/Utils.h" diff --git a/mlir/lib/Transforms/Utils/CMakeLists.txt b/mlir/lib/Transforms/Utils/CMakeLists.txt --- a/mlir/lib/Transforms/Utils/CMakeLists.txt +++ b/mlir/lib/Transforms/Utils/CMakeLists.txt @@ -18,7 +18,7 @@ MLIRAffine MLIRArithmetic MLIRAnalysis - MLIRLoopAnalysis + MLIRAffineAnalysis MLIRMemRef MLIRSCF MLIRPass diff --git a/mlir/lib/Transforms/Utils/LoopFusionUtils.cpp b/mlir/lib/Transforms/Utils/LoopFusionUtils.cpp --- a/mlir/lib/Transforms/Utils/LoopFusionUtils.cpp +++ b/mlir/lib/Transforms/Utils/LoopFusionUtils.cpp @@ -12,11 +12,11 @@ #include "mlir/Transforms/LoopFusionUtils.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/AffineStructures.h" -#include "mlir/Analysis/LoopAnalysis.h" #include "mlir/Analysis/SliceAnalysis.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/IR/AffineExpr.h" #include "mlir/IR/AffineMap.h" diff --git a/mlir/lib/Transforms/Utils/LoopUtils.cpp b/mlir/lib/Transforms/Utils/LoopUtils.cpp --- a/mlir/lib/Transforms/Utils/LoopUtils.cpp +++ b/mlir/lib/Transforms/Utils/LoopUtils.cpp @@ -12,10 +12,10 @@ #include "mlir/Transforms/LoopUtils.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/LoopAnalysis.h" #include "mlir/Analysis/SliceAnalysis.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/LoopAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/IR/AffineValueMap.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" diff --git a/mlir/lib/Transforms/Utils/Utils.cpp b/mlir/lib/Transforms/Utils/Utils.cpp --- a/mlir/lib/Transforms/Utils/Utils.cpp +++ b/mlir/lib/Transforms/Utils/Utils.cpp @@ -12,9 +12,9 @@ //===----------------------------------------------------------------------===// #include "mlir/Transforms/Utils.h" -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/AffineStructures.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Arithmetic/IR/Arithmetic.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" diff --git a/mlir/test/lib/Analysis/TestMatchReduction.cpp b/mlir/test/lib/Analysis/TestMatchReduction.cpp --- a/mlir/test/lib/Analysis/TestMatchReduction.cpp +++ b/mlir/test/lib/Analysis/TestMatchReduction.cpp @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/LoopAnalysis.h" +#include "mlir/Analysis/SliceAnalysis.h" #include "mlir/Pass/Pass.h" using namespace mlir; diff --git a/mlir/test/lib/Analysis/TestMemRefBoundCheck.cpp b/mlir/test/lib/Analysis/TestMemRefBoundCheck.cpp --- a/mlir/test/lib/Analysis/TestMemRefBoundCheck.cpp +++ b/mlir/test/lib/Analysis/TestMemRefBoundCheck.cpp @@ -11,9 +11,9 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/AffineStructures.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/IR/Builders.h" #include "mlir/Pass/Pass.h" diff --git a/mlir/test/lib/Analysis/TestMemRefDependenceCheck.cpp b/mlir/test/lib/Analysis/TestMemRefDependenceCheck.cpp --- a/mlir/test/lib/Analysis/TestMemRefDependenceCheck.cpp +++ b/mlir/test/lib/Analysis/TestMemRefDependenceCheck.cpp @@ -10,9 +10,9 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/AffineStructures.h" -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/IR/Builders.h" #include "mlir/Pass/Pass.h" diff --git a/mlir/test/lib/Dialect/Affine/TestAffineDataCopy.cpp b/mlir/test/lib/Dialect/Affine/TestAffineDataCopy.cpp --- a/mlir/test/lib/Dialect/Affine/TestAffineDataCopy.cpp +++ b/mlir/test/lib/Dialect/Affine/TestAffineDataCopy.cpp @@ -11,7 +11,7 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/MemRef/IR/MemRef.h" #include "mlir/Pass/Pass.h" diff --git a/mlir/test/lib/Dialect/Affine/TestAffineLoopUnswitching.cpp b/mlir/test/lib/Dialect/Affine/TestAffineLoopUnswitching.cpp --- a/mlir/test/lib/Dialect/Affine/TestAffineLoopUnswitching.cpp +++ b/mlir/test/lib/Dialect/Affine/TestAffineLoopUnswitching.cpp @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Pass/Pass.h" diff --git a/mlir/test/lib/Dialect/Affine/TestLoopPermutation.cpp b/mlir/test/lib/Dialect/Affine/TestLoopPermutation.cpp --- a/mlir/test/lib/Dialect/Affine/TestLoopPermutation.cpp +++ b/mlir/test/lib/Dialect/Affine/TestLoopPermutation.cpp @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Pass/Pass.h" #include "mlir/Transforms/LoopUtils.h" diff --git a/mlir/test/lib/Dialect/Affine/TestVectorizationUtils.cpp b/mlir/test/lib/Dialect/Affine/TestVectorizationUtils.cpp --- a/mlir/test/lib/Dialect/Affine/TestVectorizationUtils.cpp +++ b/mlir/test/lib/Dialect/Affine/TestVectorizationUtils.cpp @@ -10,9 +10,9 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/AffineAnalysis.h" -#include "mlir/Analysis/NestedMatcher.h" #include "mlir/Analysis/SliceAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/AffineAnalysis.h" +#include "mlir/Dialect/Affine/Analysis/NestedMatcher.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/Affine/Utils.h" #include "mlir/Dialect/Vector/VectorOps.h" diff --git a/mlir/test/lib/Transforms/TestLoopFusion.cpp b/mlir/test/lib/Transforms/TestLoopFusion.cpp --- a/mlir/test/lib/Transforms/TestLoopFusion.cpp +++ b/mlir/test/lib/Transforms/TestLoopFusion.cpp @@ -10,7 +10,7 @@ // //===----------------------------------------------------------------------===// -#include "mlir/Analysis/Utils.h" +#include "mlir/Dialect/Affine/Analysis/Utils.h" #include "mlir/Dialect/Affine/IR/AffineOps.h" #include "mlir/Dialect/StandardOps/IR/Ops.h" #include "mlir/Pass/Pass.h" diff --git a/mlir/tools/mlir-lsp-server/CMakeLists.txt b/mlir/tools/mlir-lsp-server/CMakeLists.txt --- a/mlir/tools/mlir-lsp-server/CMakeLists.txt +++ b/mlir/tools/mlir-lsp-server/CMakeLists.txt @@ -29,7 +29,7 @@ ${dialect_libs} ${conversion_libs} ${test_libs} - MLIRLoopAnalysis + MLIRAffineAnalysis MLIRAnalysis MLIRDialect MLIRLspServerLib diff --git a/mlir/tools/mlir-opt/CMakeLists.txt b/mlir/tools/mlir-opt/CMakeLists.txt --- a/mlir/tools/mlir-opt/CMakeLists.txt +++ b/mlir/tools/mlir-opt/CMakeLists.txt @@ -37,7 +37,7 @@ ${dialect_libs} ${conversion_libs} ${test_libs} - MLIRLoopAnalysis + MLIRAffineAnalysis MLIRAnalysis MLIRDialect MLIROptLib diff --git a/mlir/unittests/Analysis/CMakeLists.txt b/mlir/unittests/Analysis/CMakeLists.txt --- a/mlir/unittests/Analysis/CMakeLists.txt +++ b/mlir/unittests/Analysis/CMakeLists.txt @@ -1,12 +1 @@ -add_mlir_unittest(MLIRAnalysisTests - AffineStructuresParser.cpp - AffineStructuresParserTest.cpp -) - -target_link_libraries(MLIRAnalysisTests - PRIVATE - MLIRLoopAnalysis - MLIRParser - ) - add_subdirectory(Presburger) diff --git a/mlir/unittests/Analysis/Presburger/CMakeLists.txt b/mlir/unittests/Analysis/Presburger/CMakeLists.txt --- a/mlir/unittests/Analysis/Presburger/CMakeLists.txt +++ b/mlir/unittests/Analysis/Presburger/CMakeLists.txt @@ -4,11 +4,11 @@ MatrixTest.cpp PresburgerSetTest.cpp SimplexTest.cpp - ../AffineStructuresParser.cpp + ../../Dialect/Affine/Analysis/AffineStructuresParser.cpp ) target_link_libraries(MLIRPresburgerTests PRIVATE MLIRPresburger - MLIRLoopAnalysis + MLIRAffineAnalysis MLIRParser ) diff --git a/mlir/unittests/Analysis/Presburger/IntegerPolyhedronTest.cpp b/mlir/unittests/Analysis/Presburger/IntegerPolyhedronTest.cpp --- a/mlir/unittests/Analysis/Presburger/IntegerPolyhedronTest.cpp +++ b/mlir/unittests/Analysis/Presburger/IntegerPolyhedronTest.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Analysis/Presburger/IntegerPolyhedron.h" -#include "../AffineStructuresParser.h" +#include "../../Dialect/Affine/Analysis/AffineStructuresParser.h" #include "mlir/IR/MLIRContext.h" #include diff --git a/mlir/unittests/Analysis/Presburger/PresburgerSetTest.cpp b/mlir/unittests/Analysis/Presburger/PresburgerSetTest.cpp --- a/mlir/unittests/Analysis/Presburger/PresburgerSetTest.cpp +++ b/mlir/unittests/Analysis/Presburger/PresburgerSetTest.cpp @@ -15,7 +15,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Analysis/Presburger/PresburgerSet.h" -#include "../AffineStructuresParser.h" +#include "../../Dialect/Affine/Analysis/AffineStructuresParser.h" #include #include diff --git a/mlir/unittests/Analysis/Presburger/SimplexTest.cpp b/mlir/unittests/Analysis/Presburger/SimplexTest.cpp --- a/mlir/unittests/Analysis/Presburger/SimplexTest.cpp +++ b/mlir/unittests/Analysis/Presburger/SimplexTest.cpp @@ -7,7 +7,7 @@ //===----------------------------------------------------------------------===// #include "mlir/Analysis/Presburger/Simplex.h" -#include "../AffineStructuresParser.h" +#include "../../Dialect/Affine/Analysis/AffineStructuresParser.h" #include #include diff --git a/mlir/unittests/Analysis/AffineStructuresParser.h b/mlir/unittests/Dialect/Affine/Analysis/AffineStructuresParser.h rename from mlir/unittests/Analysis/AffineStructuresParser.h rename to mlir/unittests/Dialect/Affine/Analysis/AffineStructuresParser.h --- a/mlir/unittests/Analysis/AffineStructuresParser.h +++ b/mlir/unittests/Dialect/Affine/Analysis/AffineStructuresParser.h @@ -14,7 +14,7 @@ #ifndef MLIR_UNITTEST_ANALYSIS_AFFINESTRUCTURESPARSER_H #define MLIR_UNITTEST_ANALYSIS_AFFINESTRUCTURESPARSER_H -#include "mlir/Analysis/AffineStructures.h" +#include "mlir/Dialect/Affine/Analysis/AffineStructures.h" #include "mlir/Support/LogicalResult.h" namespace mlir { diff --git a/mlir/unittests/Analysis/AffineStructuresParser.cpp b/mlir/unittests/Dialect/Affine/Analysis/AffineStructuresParser.cpp rename from mlir/unittests/Analysis/AffineStructuresParser.cpp rename to mlir/unittests/Dialect/Affine/Analysis/AffineStructuresParser.cpp diff --git a/mlir/unittests/Analysis/AffineStructuresParserTest.cpp b/mlir/unittests/Dialect/Affine/Analysis/AffineStructuresParserTest.cpp rename from mlir/unittests/Analysis/AffineStructuresParserTest.cpp rename to mlir/unittests/Dialect/Affine/Analysis/AffineStructuresParserTest.cpp diff --git a/mlir/unittests/Dialect/Affine/Analysis/CMakeLists.txt b/mlir/unittests/Dialect/Affine/Analysis/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/mlir/unittests/Dialect/Affine/Analysis/CMakeLists.txt @@ -0,0 +1,10 @@ +add_mlir_unittest(MLIRAffineAnalysisTests + AffineStructuresParser.cpp + AffineStructuresParserTest.cpp +) + +target_link_libraries(MLIRAffineAnalysisTests + PRIVATE + MLIRAffineAnalysis + MLIRParser + ) diff --git a/mlir/unittests/Dialect/Affine/CMakeLists.txt b/mlir/unittests/Dialect/Affine/CMakeLists.txt new file mode 100644 --- /dev/null +++ b/mlir/unittests/Dialect/Affine/CMakeLists.txt @@ -0,0 +1 @@ +add_subdirectory(Analysis) diff --git a/mlir/unittests/Dialect/CMakeLists.txt b/mlir/unittests/Dialect/CMakeLists.txt --- a/mlir/unittests/Dialect/CMakeLists.txt +++ b/mlir/unittests/Dialect/CMakeLists.txt @@ -6,6 +6,7 @@ MLIRIR MLIRDialect) +add_subdirectory(Affine) add_subdirectory(Quant) add_subdirectory(SparseTensor) add_subdirectory(SPIRV)