LLVM  6.0.0svn
Macros | Enumerations | Functions | Variables
LoopRerollPass.cpp File Reference
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/DenseSet.h"
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AliasAnalysis.h"
#include "llvm/Analysis/AliasSetTracker.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/LoopPass.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionExpander.h"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/Pass.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.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/Local.h"
#include "llvm/Transforms/Utils/LoopUtils.h"
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <cstdlib>
#include <iterator>
#include <map>
#include <utility>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "loop-reroll"
 

Enumerations

enum  IterationLimits
 

Functions

 STATISTIC (NumRerolledLoops, "Number of rerolled loops")
 
static bool hasUsesOutsideLoop (Instruction *I, Loop *L)
 
static const SCEVConstantgetIncrmentFactorSCEV (ScalarEvolution *SE, const SCEV *SCEVExpr, Instruction &IV)
 
static bool isUnorderedLoadStore (Instruction *I)
 
static bool isSimpleArithmeticOp (User *IVU)
 Return true if IVU is a "simple" arithmetic operation. More...
 
static bool isLoopIncrement (User *U, Instruction *IV)
 
static bool isIgnorableInst (const Instruction *I)
 

Variables

static cl::opt< unsignedMaxInc ("max-reroll-increment", cl::init(2048), cl::Hidden, cl::desc("The maximum increment for loop rerolling"))
 
static cl::opt< unsignedNumToleratedFailedMatches ("reroll-num-tolerated-failed-matches", cl::init(400), cl::Hidden, cl::desc("The maximum number of failures to tolerate" " during fuzzy matching. (default: 400)"))
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "loop-reroll"

Definition at line 67 of file LoopRerollPass.cpp.

Enumeration Type Documentation

◆ IterationLimits

Definition at line 158 of file LoopRerollPass.cpp.

Function Documentation

◆ getIncrmentFactorSCEV()

static const SCEVConstant* getIncrmentFactorSCEV ( ScalarEvolution SE,
const SCEV SCEVExpr,
Instruction IV 
)
static

◆ hasUsesOutsideLoop()

static bool hasUsesOutsideLoop ( Instruction I,
Loop L 
)
static

◆ isIgnorableInst()

static bool isIgnorableInst ( const Instruction I)
static

Definition at line 1158 of file LoopRerollPass.cpp.

References llvm::AliasSetTracker::add(), assert(), llvm::Continue, llvm::IRBuilder< T, Inserter >::CreateSExt(), llvm::dbgs(), DEBUG, llvm::DeleteDeadPHIs(), llvm::dyn_cast(), llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::SCEVAddRecExpr::evaluateAtIteration(), llvm::SCEVExpander::expandCodeFor(), llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::SCEV::FlagAnyWrap, GEP, llvm::Module::getDataLayout(), llvm::BasicBlock::getFirstNonPHIOrDbg(), llvm::LoopBase< BlockT, LoopT >::getHeader(), llvm::IntrinsicInst::getIntrinsicID(), llvm::LoopBase< BlockT, LoopT >::getLoopPreheader(), llvm::BasicBlock::getModule(), llvm::Value::getName(), llvm::LoopBase< BlockT, LoopT >::getNumBlocks(), llvm::User::getNumOperands(), llvm::User::getOperand(), llvm::BasicBlock::getParent(), llvm::SCEVAddRecExpr::getStart(), llvm::BasicBlock::getTerminator(), llvm::SCEV::getType(), llvm::SCEVNAryExpr::getType(), llvm::Value::getType(), hasUsesOutsideLoop(), I, llvm::CmpInst::ICMP_EQ, llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::insert(), llvm::InsertPreheaderForLoop(), llvm::Instruction::isAssociative(), isAssociative(), llvm::Instruction::isCommutative(), llvm::APInt::isNegative(), llvm::Type::isPointerTy(), llvm::isSafeToSpeculativelyExecute(), llvm::Instruction::isSameOperationAs(), isUnorderedLoadStore(), llvm::LCSSAID, llvm::Instruction::mayReadFromMemory(), llvm::Instruction::mayWriteToMemory(), N, NumToleratedFailedMatches, llvm::BasicBlock::rbegin(), llvm::BasicBlock::rend(), llvm::object::replace(), llvm::User::replaceUsesOfWith(), llvm::IRBuilderBase::SetCurrentDebugLocation(), llvm::SimplifyInstructionsInBlock(), llvm::Value::user_begin(), Users, users, and llvm::Value::users().

◆ isLoopIncrement()

static bool isLoopIncrement ( User U,
Instruction IV 
)
static

◆ isSimpleArithmeticOp()

static bool isSimpleArithmeticOp ( User IVU)
static

Return true if IVU is a "simple" arithmetic operation.

This is used for narrowing the search space for DAGRoots; only arithmetic and GEPs can be part of a DAGRoot.

Definition at line 797 of file LoopRerollPass.cpp.

References llvm::MCID::Add, and I.

Referenced by isLoopIncrement().

◆ isUnorderedLoadStore()

static bool isUnorderedLoadStore ( Instruction I)
static

Definition at line 784 of file LoopRerollPass.cpp.

References MI, and SI.

Referenced by isIgnorableInst().

◆ STATISTIC()

STATISTIC ( NumRerolledLoops  ,
"Number of rerolled loops  
)

Variable Documentation

◆ MaxInc

cl::opt<unsigned> MaxInc("max-reroll-increment", cl::init(2048), cl::Hidden, cl::desc("The maximum increment for loop rerolling"))
static

Referenced by getIncrmentFactorSCEV().

◆ NumToleratedFailedMatches

cl::opt<unsigned> NumToleratedFailedMatches("reroll-num-tolerated-failed-matches", cl::init(400), cl::Hidden, cl::desc("The maximum number of failures to tolerate" " during fuzzy matching. (default: 400)"))
static

Referenced by isIgnorableInst().