Skip to content

Commit 05efddd

Browse files
committed
utility multiRootGetSlice decoupling
1 parent e063f17 commit 05efddd

File tree

4 files changed

+41
-8
lines changed

4 files changed

+41
-8
lines changed

third_party/iluvatar/backend/flagtree_backend_specialization/include/triton/Analysis/iluvatar_Utility.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
#define ILUVATAR_TRITON_ANALYSIS_UTILITY_H
33

44
#define FLAGTREE_SPEC_Utility_Function
5+
#define FLAGTREE_SPEC_Utility_multiRootGetSlice_ARG bool
56

67
#endif // TRITON_ANALYSIS_UTILITY_H

third_party/iluvatar/backend/flagtree_backend_specialization/lib/Analysis/Utility.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,34 @@ void getBackwardSliceCorex(Operation *op, SetVector<Operation *> *backwardSlice,
7575
backwardSlice->remove(op);
7676
}
7777

78+
SetVector<Operation *> multiRootGetSlice(Operation *op,
79+
TransitiveFilter backwardFilter,
80+
TransitiveFilter forwardFilter,
81+
bool omitBlockArguments) {
82+
SetVector<Operation *> slice;
83+
slice.insert(op);
84+
85+
unsigned currentIndex = 0;
86+
SetVector<Operation *> backwardSlice;
87+
SetVector<Operation *> forwardSlice;
88+
while (currentIndex != slice.size()) {
89+
auto *currentOp = (slice)[currentIndex];
90+
// Compute and insert the backwardSlice starting from currentOp.
91+
backwardSlice.clear();
92+
BackwardSliceOptions opt;
93+
opt.omitBlockArguments = true;
94+
opt.filter = backwardFilter;
95+
getBackwardSliceCorex(currentOp, &backwardSlice, opt.filter,
96+
opt.omitBlockArguments);
97+
slice.insert(backwardSlice.begin(), backwardSlice.end());
98+
99+
// Compute and insert the forwardSlice starting from currentOp.
100+
forwardSlice.clear();
101+
getForwardSlice(currentOp, &forwardSlice, forwardFilter);
102+
slice.insert(forwardSlice.begin(), forwardSlice.end());
103+
++currentIndex;
104+
}
105+
return multiRootTopologicalSort(slice);
106+
}
107+
78108
}

third_party/iluvatar/include/triton/Analysis/Utility.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,10 +228,16 @@ void getBackwardSliceImplCorex(Operation *op,
228228
#endif
229229

230230
/// This uses the toplogicalSort above
231+
#ifdef FLAGTREE_SPEC_Utility_multiRootGetSlice_ARG
231232
SetVector<Operation *>
232233
multiRootGetSlice(Operation *op, TransitiveFilter backwardFilter = nullptr,
233234
TransitiveFilter forwardFilter = nullptr,
234-
bool omitBlockArguments = true);
235+
FLAGTREE_SPEC_Utility_multiRootGetSlice_ARG spec_arg = true);
236+
#else
237+
SetVector<Operation *>
238+
multiRootGetSlice(Operation *op, TransitiveFilter backwardFilter = nullptr,
239+
TransitiveFilter forwardFilter = nullptr);
240+
#endif
235241

236242
/// Create a basic DataFlowSolver with constant and dead code analysis included.
237243
std::unique_ptr<DataFlowSolver> createDataFlowSolver();

third_party/iluvatar/lib/Analysis/Utility.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -808,10 +808,10 @@ multiRootTopologicalSort(const SetVector<Operation *> &toSort) {
808808
return res;
809809
}
810810

811+
#ifndef FLAGTREE_SPEC_Utility_multiRootGetSlice_ARG
811812
SetVector<Operation *> multiRootGetSlice(Operation *op,
812813
TransitiveFilter backwardFilter,
813-
TransitiveFilter forwardFilter,
814-
bool omitBlockArguments) {
814+
TransitiveFilter forwardFilter) {
815815
SetVector<Operation *> slice;
816816
slice.insert(op);
817817

@@ -825,12 +825,7 @@ SetVector<Operation *> multiRootGetSlice(Operation *op,
825825
BackwardSliceOptions opt;
826826
opt.omitBlockArguments = true;
827827
opt.filter = backwardFilter;
828-
#ifdef __ILUVATAR__
829-
getBackwardSliceCorex(currentOp, &backwardSlice, opt.filter,
830-
opt.omitBlockArguments);
831-
#elif
832828
getBackwardSlice(currentOp, &backwardSlice, opt);
833-
#endif
834829
slice.insert(backwardSlice.begin(), backwardSlice.end());
835830

836831
// Compute and insert the forwardSlice starting from currentOp.
@@ -841,6 +836,7 @@ SetVector<Operation *> multiRootGetSlice(Operation *op,
841836
}
842837
return multiRootTopologicalSort(slice);
843838
}
839+
#endif
844840

845841
namespace {
846842
// Copied from TestDeadCodeAnalysis.cpp, because some dead code analysis

0 commit comments

Comments
 (0)