MLIR  16.0.0git
RegionUtils.h
Go to the documentation of this file.
1 //===- RegionUtils.h - Region-related transformation utilities --*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef MLIR_TRANSFORMS_REGIONUTILS_H_
10 #define MLIR_TRANSFORMS_REGIONUTILS_H_
11 
12 #include "mlir/IR/Region.h"
13 #include "mlir/IR/Value.h"
14 
15 #include "llvm/ADT/SetVector.h"
16 
17 namespace mlir {
18 class RewriterBase;
19 
20 /// Check if all values in the provided range are defined above the `limit`
21 /// region. That is, if they are defined in a region that is a proper ancestor
22 /// of `limit`.
23 template <typename Range>
24 bool areValuesDefinedAbove(Range values, Region &limit) {
25  for (Value v : values)
26  if (!v.getParentRegion()->isProperAncestor(&limit))
27  return false;
28  return true;
29 }
30 
31 /// Replace all uses of `orig` within the given region with `replacement`.
32 void replaceAllUsesInRegionWith(Value orig, Value replacement, Region &region);
33 
34 /// Calls `callback` for each use of a value within `region` or its descendants
35 /// that was defined at the ancestors of the `limit`.
36 void visitUsedValuesDefinedAbove(Region &region, Region &limit,
37  function_ref<void(OpOperand *)> callback);
38 
39 /// Calls `callback` for each use of a value within any of the regions provided
40 /// that was defined in one of the ancestors.
41 void visitUsedValuesDefinedAbove(MutableArrayRef<Region> regions,
42  function_ref<void(OpOperand *)> callback);
43 
44 /// Fill `values` with a list of values defined at the ancestors of the `limit`
45 /// region and used within `region` or its descendants.
46 void getUsedValuesDefinedAbove(Region &region, Region &limit,
47  SetVector<Value> &values);
48 
49 /// Fill `values` with a list of values used within any of the regions provided
50 /// but defined in one of the ancestors.
51 void getUsedValuesDefinedAbove(MutableArrayRef<Region> regions,
52  SetVector<Value> &values);
53 
54 /// Run a set of structural simplifications over the given regions. This
55 /// includes transformations like unreachable block elimination, dead argument
56 /// elimination, as well as some other DCE. This function returns success if any
57 /// of the regions were simplified, failure otherwise. The provided rewriter is
58 /// used to notify callers of operation and block deletion.
59 LogicalResult simplifyRegions(RewriterBase &rewriter,
60  MutableArrayRef<Region> regions);
61 
62 /// Erase the unreachable blocks within the provided regions. Returns success
63 /// if any blocks were erased, failure otherwise.
64 LogicalResult eraseUnreachableBlocks(RewriterBase &rewriter,
65  MutableArrayRef<Region> regions);
66 
67 /// This function returns success if any operations or arguments were deleted,
68 /// failure otherwise.
69 LogicalResult runRegionDCE(RewriterBase &rewriter,
70  MutableArrayRef<Region> regions);
71 
72 } // namespace mlir
73 
74 #endif // MLIR_TRANSFORMS_REGIONUTILS_H_
This class contains a list of basic blocks and a link to the parent operation it is attached to.
Definition: Region.h:26
This class represents an instance of an SSA value in the MLIR system, representing a computable value...
Definition: Value.h:85
Include the generated interface declarations.
llvm::function_ref< Fn > function_ref
Definition: LLVM.h:150
void replaceAllUsesInRegionWith(Value orig, Value replacement, Region &region)
Replace all uses of orig within the given region with replacement.
Definition: RegionUtils.cpp:24
LogicalResult simplifyRegions(RewriterBase &rewriter, MutableArrayRef< Region > regions)
Run a set of structural simplifications over the given regions.
LogicalResult eraseUnreachableBlocks(RewriterBase &rewriter, MutableArrayRef< Region > regions)
Erase the unreachable blocks within the provided regions.
Definition: RegionUtils.cpp:79
void getUsedValuesDefinedAbove(Region &region, Region &limit, SetVector< Value > &values)
Fill values with a list of values defined at the ancestors of the limit region and used within region...
Definition: RegionUtils.cpp:59
LogicalResult runRegionDCE(RewriterBase &rewriter, MutableArrayRef< Region > regions)
This function returns success if any operations or arguments were deleted, failure otherwise.
bool areValuesDefinedAbove(Range values, Region &limit)
Check if all values in the provided range are defined above the limit region.
Definition: RegionUtils.h:24
void visitUsedValuesDefinedAbove(Region &region, Region &limit, function_ref< void(OpOperand *)> callback)
Calls callback for each use of a value within region or its descendants that was defined at the ances...
Definition: RegionUtils.cpp:32
Represents a range (offset, size, and stride) where each element of the triple may be dynamic or stat...