[Beignet] [PATCH 3/5] GBE: add two helper routines for liveness partially update.
Zhigang Gong
zhigang.gong at intel.com
Mon Aug 31 21:05:01 PDT 2015
We don't need to recompute the entire liveness information for
all cases. This is a preparation patch for further phi copy
optimization.
Signed-off-by: Zhigang Gong <zhigang.gong at intel.com>
---
backend/src/ir/liveness.cpp | 33 +++++++++++++++++++++++++++++++++
backend/src/ir/liveness.hpp | 7 +++++++
2 files changed, 40 insertions(+)
diff --git a/backend/src/ir/liveness.cpp b/backend/src/ir/liveness.cpp
index e2240c0..c5a6374 100644
--- a/backend/src/ir/liveness.cpp
+++ b/backend/src/ir/liveness.cpp
@@ -59,6 +59,39 @@ namespace ir {
}
}
+ void Liveness::removeRegs(const set<Register> &removes) {
+ for (auto &pair : liveness) {
+ BlockInfo &info = *(pair.second);
+ for (auto reg : removes) {
+ if (info.liveOut.contains(reg))
+ info.liveOut.erase(reg);
+ if (info.upwardUsed.contains(reg))
+ info.upwardUsed.erase(reg);
+ }
+ }
+ }
+
+ void Liveness::replaceRegs(const map<Register, Register> &replaceMap) {
+
+ for (auto &pair : liveness) {
+ BlockInfo &info = *pair.second;
+ BasicBlock *bb = const_cast<BasicBlock *>(&info.bb);
+ for (auto &pair : replaceMap) {
+ Register from = pair.first;
+ Register to = pair.second;
+ if (info.liveOut.contains(from)) {
+ info.liveOut.erase(from);
+ info.liveOut.insert(to);
+ bb->definedPhiRegs.insert(to);
+ }
+ if (info.upwardUsed.contains(from)) {
+ info.upwardUsed.erase(from);
+ info.upwardUsed.insert(to);
+ }
+ }
+ }
+ }
+
Liveness::~Liveness(void) {
for (auto &pair : liveness) GBE_SAFE_DELETE(pair.second);
}
diff --git a/backend/src/ir/liveness.hpp b/backend/src/ir/liveness.hpp
index d9fa2ed..df889e6 100644
--- a/backend/src/ir/liveness.hpp
+++ b/backend/src/ir/liveness.hpp
@@ -116,6 +116,13 @@ namespace ir {
}
}
}
+
+ // remove some registers from the liveness information.
+ void removeRegs(const set<Register> &removes);
+
+ // replace some registers according to (from, to) register map.
+ void replaceRegs(const map<Register, Register> &replaceMap);
+
private:
/*! Store the liveness of all blocks */
Info liveness;
--
1.9.1
More information about the Beignet
mailing list