LLVM  10.0.0svn
Macros | Functions | Variables
HardwareLoops.cpp File Reference

Insert hardware loop intrinsics into loops which are deemed profitable by the target, by querying TargetTransformInfo. More...

#include "llvm/Pass.h"
#include "llvm/PassRegistry.h"
#include "llvm/PassSupport.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/AssumptionCache.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/ScalarEvolution.h"
#include "llvm/Analysis/ScalarEvolutionExpander.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Debug.h"
#include "llvm/Transforms/Scalar.h"
#include "llvm/Transforms/Utils.h"
#include "llvm/Transforms/Utils/BasicBlockUtils.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/LoopUtils.h"
Include dependency graph for HardwareLoops.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "hardware-loops"
 
#define HW_LOOPS_NAME   "Hardware Loop Insertion"
 

Functions

 STATISTIC (NumHWLoops, "Number of loops converted to hardware loops")
 
static bool CanGenerateTest (Loop *L, Value *Count)
 

Variables

static cl::opt< boolForceHardwareLoops ("force-hardware-loops", cl::Hidden, cl::init(false), cl::desc("Force hardware loops intrinsics to be inserted"))
 
static cl::opt< boolForceHardwareLoopPHI ("force-hardware-loop-phi", cl::Hidden, cl::init(false), cl::desc("Force hardware loop counter to be updated through a phi"))
 
static cl::opt< boolForceNestedLoop ("force-nested-hardware-loop", cl::Hidden, cl::init(false), cl::desc("Force allowance of nested hardware loops"))
 
static cl::opt< unsignedLoopDecrement ("hardware-loop-decrement", cl::Hidden, cl::init(1), cl::desc("Set the loop decrement value"))
 
static cl::opt< unsignedCounterBitWidth ("hardware-loop-counter-bitwidth", cl::Hidden, cl::init(32), cl::desc("Set the loop counter bitwidth"))
 
static cl::opt< boolForceGuardLoopEntry ("force-hardware-loop-guard", cl::Hidden, cl::init(false), cl::desc("Force generation of loop guard intrinsic"))
 

Detailed Description

Insert hardware loop intrinsics into loops which are deemed profitable by the target, by querying TargetTransformInfo.

A hardware loop comprises of two intrinsics: one, outside the loop, to set the loop iteration count and another, in the exit block, to decrement the counter. The decremented value can either be carried through the loop via a phi or handled in some opaque way by the target.

Definition in file HardwareLoops.cpp.

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "hardware-loops"

Definition at line 44 of file HardwareLoops.cpp.

Referenced by CanGenerateTest().

◆ HW_LOOPS_NAME

#define HW_LOOPS_NAME   "Hardware Loop Insertion"

Definition at line 46 of file HardwareLoops.cpp.

Referenced by CanGenerateTest().

Function Documentation

◆ CanGenerateTest()

static bool CanGenerateTest ( Loop L,
Value Count 
)
static

◆ STATISTIC()

STATISTIC ( NumHWLoops  ,
"Number of loops converted to hardware loops  
)

Variable Documentation

◆ CounterBitWidth

cl::opt<unsigned> CounterBitWidth("hardware-loop-counter-bitwidth", cl::Hidden, cl::init(32), cl::desc("Set the loop counter bitwidth"))
static

◆ ForceGuardLoopEntry

cl::opt<bool> ForceGuardLoopEntry("force-hardware-loop-guard", cl::Hidden, cl::init(false), cl::desc("Force generation of loop guard intrinsic"))
static

Referenced by CanGenerateTest().

◆ ForceHardwareLoopPHI

cl::opt<bool> ForceHardwareLoopPHI("force-hardware-loop-phi", cl::Hidden, cl::init(false), cl::desc("Force hardware loop counter to be updated through a phi"))
static

◆ ForceHardwareLoops

cl::opt<bool> ForceHardwareLoops("force-hardware-loops", cl::Hidden, cl::init(false), cl::desc("Force hardware loops intrinsics to be inserted"))
static

◆ ForceNestedLoop

cl::opt<bool> ForceNestedLoop("force-nested-hardware-loop", cl::Hidden, cl::init(false), cl::desc("Force allowance of nested hardware loops"))
static

◆ LoopDecrement

cl::opt<unsigned> LoopDecrement("hardware-loop-decrement", cl::Hidden, cl::init(1), cl::desc("Set the loop decrement value"))
static

Referenced by CanGenerateTest().