From 8edce4ee6276df36969283bf98b8bef898fb548c Mon Sep 17 00:00:00 2001 From: Tobias Grosser Date: Tue, 16 Apr 2013 08:04:42 +0000 Subject: Support SCoPs with multiple entry edges. Regions that have multiple entry edges are very common. A simple if condition yields e.g. such a region: if / \ then else \ / for_region This for_region contains two entry edges 'then' -> 'for_region' and 'else' -> 'for_region'. Previously we scheduled the RegionSimplify pass to translate such regions into simple regions. With this patch, we now support them natively when the region is in -loop-simplify form, which means the entry block should not be a loop header. Contributed by: Star Tan llvm-svn: 179586 --- polly/lib/CodeGen/CodeGeneration.cpp | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) (limited to 'polly/lib/CodeGen/CodeGeneration.cpp') diff --git a/polly/lib/CodeGen/CodeGeneration.cpp b/polly/lib/CodeGen/CodeGeneration.cpp index 833d20b7793b..ad9b6e25de9c 100644 --- a/polly/lib/CodeGen/CodeGeneration.cpp +++ b/polly/lib/CodeGen/CodeGeneration.cpp @@ -986,16 +986,10 @@ public: bool runOnScop(Scop &S) { ParallelLoops.clear(); - Region &R = S.getRegion(); + assert(!S.getRegion().isTopLevelRegion() + && "Top level regions are not supported"); - assert(!R.isTopLevelRegion() && "Top level regions are not supported"); - assert(R.getEnteringBlock() && "Only support regions with a single entry"); - - if (!R.getExitingBlock()) { - BasicBlock *newExit = createSingleExitEdge(&R, this); - for (Region::const_iterator RI = R.begin(), RE = R.end(); RI != RE; ++RI) - (*RI)->replaceExitRecursive(newExit); - } + simplifyRegion(&S, this); BasicBlock *StartBlock = executeScopConditionally(S, this); -- cgit v1.2.3