11#ifndef AIE_DIALECT_AIEVEC_TRANSFORMS_AIE2PSHUFFLEPLANNER_H
12#define AIE_DIALECT_AIEVEC_TRANSFORMS_AIE2PSHUFFLEPLANNER_H
16#include "mlir/Dialect/Vector/IR/VectorOps.h"
17#include "mlir/IR/PatternMatch.h"
18#include "mlir/Transforms/DialectConversion.h"
19#include "llvm/ADT/SmallVector.h"
20#include "llvm/ADT/StringMap.h"
41 std::string
key()
const;
49 llvm::SmallVector<int64_t>
mask;
64 ShuffleMode
mode = ShuffleMode::T512_1X2_LO;
74 llvm::SmallVector<ShuffleMode>
modes()
const;
85 const llvm::SmallVector<ShufflePlan, 2> &
91 std::optional<ShufflePlan>
93 llvm::SmallVector<mlir::Value> *leaves =
nullptr);
99 llvm::StringMap<llvm::SmallVector<ShufflePlan, 2>> cache;
100 llvm::SmallVector<ShuffleMode> usedModes;
113 mlir::RewritePatternSet &patterns,
114 std::shared_ptr<AIE2PShufflePlanner> planner);
119 mlir::ConversionTarget &target,
120 std::shared_ptr<AIE2PShufflePlanner> planner);
std::optional< ShufflePlan > planFor(const ShuffleRequest &request, ShuffleGather *gather=nullptr, llvm::SmallVector< mlir::Value > *leaves=nullptr)
const llvm::SmallVector< ShufflePlan, 2 > & candidates(const ShuffleGather &gather)
void noteUsed(const ShufflePlan &plan)
void populateAIE2PShufflePlannerPatterns(mlir::RewritePatternSet &patterns, std::shared_ptr< AIE2PShufflePlanner > planner)
unsigned estimateLLVMShuffleCost(const ShuffleGather &gather)
void configureAIE2PShufflePlannerLegality(mlir::ConversionTarget &target, std::shared_ptr< AIE2PShufflePlanner > planner)
bool simulateShufflePlan(const ShuffleGather &gather, const ShufflePlan &plan)
llvm::SmallVector< int64_t > sourceLanes
int32_t sourceOffset(unsigned k) const
llvm::SmallVector< int32_t > target
llvm::SmallVector< bool > sourceIsSplat
int32_t numLabels() const
enum xilinx::aievec::ShufflePlan::Node::Kind kind
llvm::SmallVector< int > results
llvm::SmallVector< Node > nodes
llvm::SmallVector< ShuffleMode > modes() const
llvm::SmallVector< int64_t > mask
mlir::VectorType resultType