|
LLVM
3.7.0
|
#include "llvm/Transforms/Utils/UnrollLoop.h"#include "llvm/ADT/Statistic.h"#include "llvm/Analysis/AliasAnalysis.h"#include "llvm/Analysis/LoopIterator.h"#include "llvm/Analysis/LoopPass.h"#include "llvm/Analysis/ScalarEvolution.h"#include "llvm/Analysis/ScalarEvolutionExpander.h"#include "llvm/IR/BasicBlock.h"#include "llvm/IR/Dominators.h"#include "llvm/IR/Metadata.h"#include "llvm/IR/Module.h"#include "llvm/Support/Debug.h"#include "llvm/Support/raw_ostream.h"#include "llvm/Transforms/Scalar.h"#include "llvm/Transforms/Utils/BasicBlockUtils.h"#include "llvm/Transforms/Utils/Cloning.h"#include <algorithm>Go to the source code of this file.
Macros | |
| #define | DEBUG_TYPE "loop-unroll" |
Functions | |
| STATISTIC (NumRuntimeUnrolled,"Number of loops unrolled with run-time trip counts") | |
| static void | ConnectProlog (Loop *L, Value *BECount, unsigned Count, BasicBlock *LastPrologBB, BasicBlock *PrologEnd, BasicBlock *OrigPH, BasicBlock *NewPH, ValueToValueMapTy &VMap, AliasAnalysis *AA, DominatorTree *DT, LoopInfo *LI, Pass *P) |
| Connect the unrolling prolog code to the original loop. More... | |
| static void | CloneLoopBlocks (Loop *L, Value *NewIter, const bool UnrollProlog, BasicBlock *InsertTop, BasicBlock *InsertBot, std::vector< BasicBlock * > &NewBlocks, LoopBlocksDFS &LoopBlocks, ValueToValueMapTy &VMap, LoopInfo *LI) |
| Create a clone of the blocks in a loop and connect them together. More... | |
| #define DEBUG_TYPE "loop-unroll" |
Definition at line 44 of file LoopUnrollRuntime.cpp.
|
static |
Create a clone of the blocks in a loop and connect them together.
If UnrollProlog is true, loop structure will not be cloned, otherwise a new loop will be created including all cloned blocks, and the iterator of it switches to count NewIter down to 0.
Definition at line 142 of file LoopUnrollRuntime.cpp.
References llvm::LoopBase< N, M >::addBasicBlockToLoop(), llvm::LoopBase< N, M >::addChildLoop(), llvm::PHINode::addIncoming(), llvm::LoopInfoBase< N, M >::addTopLevelLoop(), llvm::BasicBlock::begin(), llvm::LoopBlocksDFS::beginRPO(), llvm::CloneBasicBlock(), llvm::PHINode::Create(), llvm::dyn_cast(), llvm::LoopBlocksDFS::endRPO(), llvm::ValueMap< KeyT, ValueT, Config >::erase(), F(), llvm::ConstantInt::get(), llvm::MDString::get(), llvm::MDNode::get(), llvm::PHINode::getBasicBlockIndex(), llvm::BasicBlock::getFirstNonPHI(), llvm::LoopBase< N, M >::getHeader(), llvm::PHINode::getIncomingValue(), llvm::PHINode::getIncomingValueForBlock(), llvm::Loop::getLoopID(), llvm::LoopBase< N, M >::getLoopLatch(), llvm::LoopBase< N, M >::getLoopPreheader(), llvm::Value::getName(), llvm::MDNode::getNumOperands(), llvm::MDNode::getOperand(), llvm::BasicBlock::getParent(), llvm::LoopBase< N, M >::getParentLoop(), llvm::MDString::getString(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), I, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::MDNode::replaceOperandWith(), llvm::PHINode::setIncomingBlock(), llvm::PHINode::setIncomingValue(), llvm::Loop::setLoopID(), llvm::TerminatorInst::setSuccessor(), and llvm::StringRef::startswith().
Referenced by llvm::UnrollRuntimeLoopProlog().
|
static |
Connect the unrolling prolog code to the original loop.
The unrolling prolog code contains code to execute the 'extra' iterations if the run-time trip count modulo the unroll count is non-zero.
This function performs the following:
Definition at line 62 of file LoopUnrollRuntime.cpp.
References llvm::PHINode::addIncoming(), llvm::LoopBase< N, M >::contains(), llvm::PHINode::Create(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateCondBr(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateICmpULT(), llvm::dyn_cast(), llvm::Instruction::eraseFromParent(), llvm::ConstantInt::get(), llvm::UndefValue::get(), llvm::PHINode::getBasicBlockIndex(), llvm::PHINode::getIncomingValueForBlock(), llvm::LoopBase< N, M >::getLoopLatch(), llvm::Value::getName(), llvm::BasicBlock::getTerminator(), llvm::Value::getType(), llvm::Loop::getUniqueExitBlock(), I, llvm::LCSSAID, llvm::Pass::mustPreserveAnalysisID(), llvm::pred_begin(), llvm::pred_end(), llvm::PHINode::setIncomingValue(), llvm::SplitBlockPredecessors(), llvm::succ_begin(), and llvm::succ_end().
Referenced by llvm::UnrollRuntimeLoopProlog().
| STATISTIC | ( | NumRuntimeUnrolled | , |
| "Number of loops unrolled with run-time trip counts" | |||
| ) |
1.8.6