Lines Matching defs:transform
21 #define DEBUG_TYPE "transform-dialect"
22 #define DEBUG_TYPE_FULL "transform-dialect-full"
23 #define DEBUG_PRINT_AFTER_ALL "transform-dialect-print-top-level-after-all"
51 constexpr const Value transform::TransformState::kTopLevelValue;
53 transform::TransformState::TransformState(
67 Operation *transform::TransformState::getTopLevel() const { return topLevel; }
70 transform::TransformState::getPayloadOpsView(Value value) const {
79 ArrayRef<Attribute> transform::TransformState::getParams(Value value) const {
88 transform::TransformState::getPayloadValuesView(Value handleValue) const {
96 LogicalResult transform::TransformState::getHandlesForPayloadOp(
115 LogicalResult transform::TransformState::getHandlesForPayloadValue(
137 Value handle, ArrayRef<transform::MappedValue> values,
139 function_ref<LogicalResult(ArrayRef<transform::Param>)> paramsFn,
141 if (llvm::isa<transform::TransformHandleTypeInterface>(handle.getType())) {
144 for (transform::MappedValue value : values) {
157 if (llvm::isa<transform::TransformValueHandleTypeInterface>(
161 for (transform::MappedValue value : values) {
174 assert(llvm::isa<transform::TransformParamTypeInterface>(handle.getType()) &&
176 SmallVector<transform::Param> parameters;
178 for (transform::MappedValue value : values) {
192 transform::TransformState::mapBlockArgument(BlockArgument argument,
208 LogicalResult transform::TransformState::mapBlockArguments(
218 transform::TransformState::setPayloadOps(Value value,
229 << "attempting to assign a null payload op to this transform value";
254 transform::TransformState::setPayloadValues(Value handle,
264 "value to this transform handle";
288 LogicalResult transform::TransformState::setParams(Value value,
296 << "attempting to assign a null parameter to this transform value";
326 void transform::TransformState::forgetMapping(Value opHandle,
355 void transform::TransformState::forgetValueMapping(
385 transform::TransformState::replacePayloadOp(Operation *op,
410 // is stored in the mapping. These nullptrs are removed after each transform.
441 transform::TransformState::replacePayloadValue(Value value, Value replacement) {
477 void transform::TransformState::recordOpHandleInvalidationOne(
480 transform::TransformState::InvalidatedHandleMap &newlyInvalidated) const {
523 "previously executed transform op";
526 << "invalidated by this transform op that consumes its operand #"
540 void transform::TransformState::recordValueHandleInvalidationByOpHandleOne(
543 transform::TransformState::InvalidatedHandleMap &newlyInvalidated) const {
583 "previously executed transform op";
586 << "invalidated by this transform op that consumes its operand #"
605 void transform::TransformState::recordOpHandleInvalidation(
608 transform::TransformState::InvalidatedHandleMap &newlyInvalidated) const {
622 "previously executed transform op";
624 << "invalidated by this transform op that consumes its operand #"
631 // expensive and only necessary for error reporting in case of transform
665 void transform::TransformState::recordValueHandleInvalidation(
667 transform::TransformState::InvalidatedHandleMap &newlyInvalidated) const {
680 "previously executed transform op";
683 << "invalidated by this transform op that consumes its operand #"
708 LogicalResult transform::TransformState::checkAndRecordHandleInvalidationImpl(
709 transform::TransformOpInterface transform,
710 transform::TransformState::InvalidatedHandleMap &newlyInvalidated) const {
713 cast<MemoryEffectOpInterface>(transform.getOperation());
716 transform::TransformMappingResource::get(), effects);
718 for (OpOperand &target : transform->getOpOperands()) {
725 // caused by the current transform operation affecting its other operands.
731 return it->getSecond()(transform->getLoc()), failure();
733 if (!transform.allowsRepeatedHandleOperands() &&
737 return nit->getSecond()(transform->getLoc()), failure();
748 if (llvm::isa<transform::TransformHandleTypeInterface>(
755 } else if (llvm::isa<transform::TransformValueHandleTypeInterface>(
771 LogicalResult transform::TransformState::checkAndRecordHandleInvalidation(
772 transform::TransformOpInterface transform) {
775 checkAndRecordHandleInvalidationImpl(transform, newlyInvalidated);
784 transform::TransformOpInterface transform,
790 transform.emitSilenceableError()
804 void transform::TransformState::compactOpHandles() {
820 transform::TransformState::applyTransform(TransformOpInterface transform) {
823 transform->print(llvm::dbgs(), OpPrintingFlags().skipRegions());
835 // Set current transform op.
836 regionStack.back()->currentTransform = transform;
838 // Expensive checks to detect invalid transform IR.
841 if (failed(checkAndRecordHandleInvalidation(transform)))
844 for (OpOperand &operand : transform->getOpOperands()) {
848 if (!isHandleConsumed(operand.get(), transform)) {
852 if (transform.allowsRepeatedHandleOperands()) {
863 getPayloadOpsView(operand.get()), transform,
873 getPayloadValuesView(operand.get()), transform,
887 transform.getConsumedHandleOpOperands();
918 emitDefiniteFailure(transform->getLoc())
942 transform::ErrorCheckingTrackingListener trackingListener(*this, transform,
944 transform::TransformRewriter rewriter(transform->getContext(),
950 transform::TransformResults results(transform->getNumResults());
951 DiagnosedSilenceableFailure result(transform.apply(rewriter, results, *this));
954 // Error handling: fail if transform or listener failed.
957 if (!transform->hasTrait<ReportTrackingListenerFailuresOpTrait>() ||
958 transform->hasAttr(FindPayloadReplacementOpInterface::
983 results.setRemainingToEmpty(transform);
997 if (failed(updateStateFromResults(results, transform->getResults())))
1008 LogicalResult transform::TransformState::updateStateFromResults(
1041 transform::TransformState::Extension::~Extension() = default;
1044 transform::TransformState::Extension::replacePayloadOp(Operation *op,
1052 transform::TransformState::Extension::replacePayloadValue(Value value,
1061 transform::TransformState::RegionScope::~RegionScope() {
1091 transform::TransformResults::TransformResults(unsigned numSegments) {
1097 void transform::TransformResults::setParams(
1098 OpResult value, ArrayRef<transform::TransformState::Param> params) {
1110 void transform::TransformResults::setMappedValues(
1131 void transform::TransformResults::setRemainingToEmpty(
1132 transform::TransformOpInterface transform) {
1133 for (OpResult opResult : transform->getResults()) {
1140 transform::TransformResults::get(unsigned resultNumber) const {
1148 ArrayRef<transform::TransformState::Param>
1149 transform::TransformResults::getParams(unsigned resultNumber) const {
1158 transform::TransformResults::getValues(unsigned resultNumber) const {
1166 bool transform::TransformResults::isParam(unsigned resultNumber) const {
1172 bool transform::TransformResults::isValue(unsigned resultNumber) const {
1178 bool transform::TransformResults::isSet(unsigned resultNumber) const {
1190 transform::TrackingListener::TrackingListener(TransformState &state,
1201 Operation *transform::TrackingListener::getCommonDefiningOp(ValueRange values) {
1217 DiagnosedSilenceableFailure transform::TrackingListener::findReplacementOp(
1225 "during application of this transform op");
1275 void transform::TrackingListener::notifyMatchFailure(
1284 void transform::TrackingListener::notifyOperationErased(Operation *op) {
1292 void transform::TrackingListener::notifyOperationReplaced(
1309 // Helper function to check if the current transform op consumes any handle
1356 transform::ErrorCheckingTrackingListener::~ErrorCheckingTrackingListener() {
1364 transform::ErrorCheckingTrackingListener::checkAndResetError() {
1371 bool transform::ErrorCheckingTrackingListener::failed() const {
1375 void transform::ErrorCheckingTrackingListener::notifyPayloadReplacementNotFound(
1397 transform::TransformRewriter::TransformRewriter(
1403 bool transform::TransformRewriter::hasTrackingFailures() const {
1408 void transform::TransformRewriter::silenceTrackingFailure() {
1415 LogicalResult transform::TransformRewriter::notifyPayloadOperationReplaced(
1425 transform::detail::checkNestedConsumption(Location loc,
1432 << "transform operation consumes a handle pointing to an ancestor "
1447 transform::detail::checkApplyToOne(Operation *transformOp,
1500 static SmallVector<T> castVector(ArrayRef<transform::MappedValue> range) {
1502 range, [](transform::MappedValue value) { return cast<T>(value); }));
1505 void transform::detail::setApplyToOneResults(
1534 // Utilities for implementing transform ops with regions.
1537 LogicalResult transform::detail::appendValueMappings(
1538 MutableArrayRef<SmallVector<transform::MappedValue>> mappings,
1539 ValueRange values, const transform::TransformState &state, bool flatten) {
1550 "unsupported kind of transform dialect value");
1560 void transform::detail::prepareValueMappings(
1561 SmallVectorImpl<SmallVector<transform::MappedValue>> &mappings,
1562 ValueRange values, const transform::TransformState &state) {
1565 MutableArrayRef<SmallVector<transform::MappedValue>>(mappings).take_back(
1570 void transform::detail::forwardTerminatorOperands(
1571 Block *block, transform::TransformState &state,
1572 transform::TransformResults &results) {
1576 if (llvm::isa<transform::TransformHandleTypeInterface>(result.getType())) {
1578 } else if (llvm::isa<transform::TransformValueHandleTypeInterface>(
1583 llvm::isa<transform::TransformParamTypeInterface>(result.getType()) &&
1584 "unhandled transform type interface");
1590 transform::TransformState
1591 transform::detail::makeTransformStateForTesting(Region *region,
1627 iface.getEffectsOnResource(transform::PayloadIRResource::get(),
1633 void transform::detail::getPotentialTopLevelEffects(
1636 transform::onlyReadsHandle(operation->getOpOperands(), effects);
1637 transform::producesHandle(operation->getOpResults(), effects);
1656 LogicalResult transform::detail::mapPossibleTopLevelTransformOpBlockArguments(
1691 transform::detail::verifyPossibleTopLevelTransformOpTrait(Operation *op) {
1758 void transform::detail::getParamProducerTransformOpTraitEffects(
1773 transform::detail::verifyParamProducerTransformOpTrait(Operation *op) {
1796 void transform::consumesHandle(
1817 bool transform::isHandleConsumed(Value handle,
1818 transform::TransformOpInterface transform) {
1819 auto iface = cast<MemoryEffectOpInterface>(transform.getOperation());
1826 void transform::producesHandle(
1837 void transform::producesHandle(
1848 void transform::onlyReadsHandle(
1857 void transform::modifiesPayload(
1863 void transform::onlyReadsPayload(
1868 bool transform::doesModifyPayload(transform::TransformOpInterface transform) {
1869 auto iface = cast<MemoryEffectOpInterface>(transform.getOperation());
1875 bool transform::doesReadPayload(transform::TransformOpInterface transform) {
1876 auto iface = cast<MemoryEffectOpInterface>(transform.getOperation());
1882 void transform::getConsumedBlockArguments(
1897 effect.getResource() != transform::TransformMappingResource::get()) {
1909 SmallVector<OpOperand *> transform::detail::getConsumedHandleOpOperands(
1920 return isa<transform::TransformMappingResource>(
1930 LogicalResult transform::detail::verifyTransformOpInterface(Operation *op) {
1997 LogicalResult transform::applyTransforms(
1998 Operation *payloadRoot, TransformOpInterface transform,
2004 if (!transform->hasTrait<PossibleTopLevelTransformOpTrait>() ||
2005 transform->getNumOperands() != 0) {
2006 return transform->emitError()
2007 << "expected transform to start at the top-level transform op";
2010 detail::verifyPossibleTopLevelTransformOpTrait(transform))) {
2014 TransformState state(transform->getParentRegion(), payloadRoot, extraMapping,
2018 if (state.applyTransform(transform).checkAndReport().failed())