diff options
author | Ruiling Song <ruiling.song@intel.com> | 2016-06-21 09:02:38 +0800 |
---|---|---|
committer | Yang Rong <rong.r.yang@intel.com> | 2016-06-24 18:27:42 +0800 |
commit | be29f577a687c62e81fc3b18b9b423aa64c832be (patch) | |
tree | c5cbaec8edd245af6b204dae6da3453d80b58d49 | |
parent | d049f47408895c162a9a9050b7250b190c5e5478 (diff) | |
download | beignet-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.cpp | 2 | ||||
-rw-r--r-- | backend/src/llvm/llvm_gen_backend.cpp | 2 |
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]; |