[Beignet] [PATCH] Fix crash in loop unrolling
Rebecca N. Palmer
rebecca_palmer at zoho.com
Sun Jan 6 10:59:03 UTC 2019
LLVM 6+'s llvm::LoopInfo::erase(), unlike its predecessor
llvm::LoopInfo::markAsRemoved(), doesn't necessarily remove the loop it
erases from the to-be-processed queue. Do this explicitly, as trying to
process an erased (0-block) loop is likely to crash, e.g. in getHeader().
Signed-off-by: Rebecca N. Palmer <rebecca_palmer at zoho.com>
---
Looks like I introduced this (in 6e60548a) - sorry.
Examples at https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=913141
diff --git a/backend/src/llvm/llvm_unroll.cpp b/backend/src/llvm/llvm_unroll.cpp
index 813e116d..f378b63d 100644
--- a/backend/src/llvm/llvm_unroll.cpp
+++ b/backend/src/llvm/llvm_unroll.cpp
@@ -206,6 +206,7 @@ namespace gbe {
//Don't change the unrollID if doesn't force unroll.
//setUnrollID(parentL, false);
#if LLVM_VERSION_MAJOR >= 6
+ LPM.markLoopAsDeleted(*parentL);
loopInfo.erase(parentL);
#elif LLVM_VERSION_MAJOR * 10 + LLVM_VERSION_MINOR >= 38
loopInfo.markAsRemoved(parentL);
More information about the Beignet
mailing list