diff options
author | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2014-10-01 20:10:44 +0000 |
---|---|---|
committer | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2014-10-01 20:10:44 +0000 |
commit | c7b719fc032ec29af7fa0181292fb6b08854d74d (patch) | |
tree | 44a56791f7bc6caaad142dedcfc5ad1b9d69720c /polly/lib/CodeGen/LoopGenerators.cpp | |
parent | e3c513a965427d15f80c5abe94f2288d1aa9aa78 (diff) | |
download | bcm5719-llvm-c7b719fc032ec29af7fa0181292fb6b08854d74d.tar.gz bcm5719-llvm-c7b719fc032ec29af7fa0181292fb6b08854d74d.zip |
Annotate LLVM-IR for all parallel loops
This change allows to annotate all parallel loops with loop id metadata.
Furthermore, it will annotate memory instructions with
llvm.mem.parallel_loop_access metadata for all surrounding parallel loops.
This is especially usefull if an external paralleliser is used.
This also removes the PollyLoopInfo class and comments the
LoopAnnotator.
A test case for multiple parallel loops is attached.
llvm-svn: 218793
Diffstat (limited to 'polly/lib/CodeGen/LoopGenerators.cpp')
-rw-r--r-- | polly/lib/CodeGen/LoopGenerators.cpp | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/polly/lib/CodeGen/LoopGenerators.cpp b/polly/lib/CodeGen/LoopGenerators.cpp index ef9bda58fd5..1ec9fb85026 100644 --- a/polly/lib/CodeGen/LoopGenerators.cpp +++ b/polly/lib/CodeGen/LoopGenerators.cpp @@ -64,12 +64,6 @@ Value *polly::createLoop(Value *LB, Value *UB, Value *Stride, BasicBlock *PreHeaderBB = BasicBlock::Create(Context, "polly.loop_preheader", F); - if (Annotator) { - Annotator->Begin(HeaderBB); - if (Parallel) - Annotator->SetCurrentParallel(); - } - // Update LoopInfo Loop *OuterLoop = LI.getLoopFor(BeforeBB); Loop *NewLoop = new Loop(); @@ -86,6 +80,11 @@ Value *polly::createLoop(Value *LB, Value *UB, Value *Stride, NewLoop->addBasicBlockToLoop(HeaderBB, LI.getBase()); + // Notify the annotator (if present) that we have a new loop, but only + // after the header block is set. + if (Annotator) + Annotator->pushLoop(NewLoop, Parallel); + // ExitBB ExitBB = SplitBlock(BeforeBB, Builder.GetInsertPoint()++, P); ExitBB->setName("polly.loop_exit"); @@ -122,7 +121,12 @@ Value *polly::createLoop(Value *LB, Value *UB, Value *Stride, UB = Builder.CreateSub(UB, Stride, "polly.adjust_ub"); LoopCondition = Builder.CreateICmp(Predicate, IV, UB); LoopCondition->setName("polly.loop_cond"); - Builder.CreateCondBr(LoopCondition, HeaderBB, ExitBB); + + // Create the loop latch and annotate it as such. + BranchInst *B = Builder.CreateCondBr(LoopCondition, HeaderBB, ExitBB); + if (Annotator) + Annotator->annotateLoopLatch(B, NewLoop, Parallel); + IV->addIncoming(IncrementedIV, HeaderBB); if (GuardBB) DT.changeImmediateDominator(ExitBB, GuardBB); |