summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuiling Song <ruiling.song@intel.com>2016-06-21 09:02:38 +0800
committerYang Rong <rong.r.yang@intel.com>2016-06-24 18:27:42 +0800
commitbe29f577a687c62e81fc3b18b9b423aa64c832be (patch)
treec5cbaec8edd245af6b204dae6da3453d80b58d49
parentd049f47408895c162a9a9050b7250b190c5e5478 (diff)
downloadbeignet-be29f577a687c62e81fc3b18b9b423aa64c832be.tar.gz
GBE: Fix two bugs in loop preheader.
Loop preheader requires the preheader has only one successor, in fact, we don't need that strict requirement, just use predecessor is OK. So it could fit into more situations. We may re-assign LabelIndex during sortLabels, so, we need to fix the LabelIndex for loop preheader. Signed-off-by: Ruiling Song <ruiling.song@intel.com> Reviewed-by: Yang Rong <rong.r.yang@intel.com>
-rw-r--r--backend/src/ir/function.cpp2
-rw-r--r--backend/src/llvm/llvm_gen_backend.cpp2
2 files changed, 3 insertions, 1 deletions
diff --git a/backend/src/ir/function.cpp b/backend/src/ir/function.cpp
index 4112f068..fddafc72 100644
--- a/backend/src/ir/function.cpp
+++ b/backend/src/ir/function.cpp
@@ -120,6 +120,8 @@ namespace ir {
for (auto &y : x->bbs)
y = labelMap[y];
+ x->preheader = labelMap[x->preheader];
+
for (auto &z : x->exits) {
z.first = labelMap[z.first];
z.second = labelMap[z.second];
diff --git a/backend/src/llvm/llvm_gen_backend.cpp b/backend/src/llvm/llvm_gen_backend.cpp
index 419f585b..8a75124b 100644
--- a/backend/src/llvm/llvm_gen_backend.cpp
+++ b/backend/src/llvm/llvm_gen_backend.cpp
@@ -2752,7 +2752,7 @@ namespace gbe
GBE_ASSERT(labelMap.find(b) != labelMap.end());
loopBBs.push_back(labelMap[b]);
}
- BasicBlock *preheader = loop.first->getLoopPreheader();
+ BasicBlock *preheader = loop.first->getLoopPredecessor();
ir::LabelIndex preheaderBB(0);
if (preheader) {
preheaderBB = labelMap[preheader];