Allow loops with multiple back edges
In order to allow multiple back edges we:
- compute the conditions under which each back edge is taken
- build the union over all these conditions, thus the condition that
any back edge is taken
- apply the same logic to the union we applied to a single back edge
git-svn-id: https://llvm.org/svn/llvm-project/polly/trunk@248120
Extended Description
Hi,
Polly crashes after commit:
Author: Johannes Doerfert doerfert@cs.uni-saarland.de Date: Sun Sep 20 15:00:20 2015 +0000
with the following error:
/home/grosser/Projects/polly/git/tools/polly/lib/External/isl/isl_space.c:1620: index out of bounds 0 opt 0x00000000021bb3ae llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 46 1 opt 0x00000000021bc4e9 2 opt 0x00000000021baf23 llvm::sys::RunSignalHandlers() + 131 3 opt 0x00000000021bc744 4 libpthread.so.0 0x00007f78eb99dd10 5 libc.so.6 0x00007f78eabb0267 gsignal + 55 6 libc.so.6 0x00007f78eabb1eca abort + 362 7 LLVMPolly.so 0x00007f78ea83f465 8 LLVMPolly.so 0x00007f78ea6bbaae 9 LLVMPolly.so 0x00007f78ea63ccc1 10 LLVMPolly.so 0x00007f78ea63cda7 11 LLVMPolly.so 0x00007f78ea7483b3 polly::Scop::buildDomainsWithBranchConstraints(llvm::Region, llvm::LoopInfo&, polly::ScopDetection&, llvm::DominatorTree&) + 1603 12 LLVMPolly.so 0x00007f78ea747c45 polly::Scop::buildDomains(llvm::Region, llvm::LoopInfo&, polly::ScopDetection&, llvm::DominatorTree&) + 309 13 LLVMPolly.so 0x00007f78ea74b3d4 polly::Scop::init(llvm::LoopInfo&, polly::ScopDetection&, llvm::AAResults&) + 68 14 LLVMPolly.so 0x00007f78ea74f906 polly::ScopInfo::buildScop(llvm::Region&, llvm::DominatorTree&) + 230 15 LLVMPolly.so 0x00007f78ea74ff24 polly::ScopInfo::runOnRegion(llvm::Region*, llvm::RGPassManager&) + 308 16 opt 0x00000000015e646e llvm::RGPassManager::runOnFunction(llvm::Function&) + 1102 17 opt 0x0000000001c5dd9f llvm::FPPassManager::runOnFunction(llvm::Function&) + 399 18 opt 0x0000000001c5e0b5 llvm::FPPassManager::runOnModule(llvm::Module&) + 117 19 opt 0x0000000001c5e84a 20 opt 0x0000000001c5e376 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 342 21 opt 0x0000000001c5ed61 llvm::legacy::PassManager::run(llvm::Module&) + 33
When run with 'polly-opt /tmp/bug.ll -polly-scops' on bug.ll