#include <set>
using namespace llvm;
-namespace {
- Statistic
- NumIters("anders-aa", "Number of iterations to reach convergence");
- Statistic
- NumConstraints("anders-aa", "Number of constraints");
- Statistic
- NumNodes("anders-aa", "Number of nodes");
- Statistic
- NumEscapingFunctions("anders-aa", "Number of internal functions that escape");
- Statistic
- NumIndirectCallees("anders-aa", "Number of indirect callees found");
+STATISTIC(NumIters , "Number of iterations to reach convergence");
+STATISTIC(NumConstraints , "Number of constraints");
+STATISTIC(NumNodes , "Number of nodes");
+STATISTIC(NumEscapingFunctions, "Number of internal functions that escape");
+STATISTIC(NumIndirectCallees , "Number of indirect callees found");
+namespace {
class Andersens : public ModulePass, public AliasAnalysis,
private InstVisitor<Andersens> {
/// Node class - This class is used to represent a memory object in the
//
//===----------------------------------------------------------------------===//
+#define DEBUG_TYPE "globalsmodref-aa"
#include "llvm/Analysis/Passes.h"
#include "llvm/Module.h"
#include "llvm/Pass.h"
#include <set>
using namespace llvm;
+STATISTIC(NumNonAddrTakenGlobalVars,
+ "Number of global vars without address taken");
+STATISTIC(NumNonAddrTakenFunctions,"Number of functions without address taken");
+STATISTIC(NumNoMemFunctions, "Number of functions that do not access memory");
+STATISTIC(NumReadMemFunctions, "Number of functions that only read memory");
+STATISTIC(NumIndirectGlobalVars, "Number of indirect global objects");
+
namespace {
- Statistic
- NumNonAddrTakenGlobalVars("globalsmodref-aa",
- "Number of global vars without address taken");
- Statistic
- NumNonAddrTakenFunctions("globalsmodref-aa",
- "Number of functions without address taken");
- Statistic
- NumNoMemFunctions("globalsmodref-aa",
- "Number of functions that do not access memory");
- Statistic
- NumReadMemFunctions("globalsmodref-aa",
- "Number of functions that only read memory");
- Statistic
- NumIndirectGlobalVars("globalsmodref-aa",
- "Number of indirect global objects");
-
/// FunctionRecord - One instance of this structure is stored for every
/// function in the program. Later, the entries for these functions are
/// removed if the function is found to call an external function (in which
//
//===----------------------------------------------------------------------===//
+#define DEBUG_TYPE "instcount"
#include "llvm/Analysis/Passes.h"
#include "llvm/Pass.h"
#include "llvm/Function.h"
#include <ostream>
using namespace llvm;
-namespace {
- Statistic TotalInsts ("instcount", "Number of instructions (of all types)");
- Statistic TotalBlocks("instcount", "Number of basic blocks");
- Statistic TotalFuncs ("instcount", "Number of non-external functions");
- Statistic TotalMemInst("instcount", "Number of memory instructions");
+STATISTIC(TotalInsts , "Number of instructions (of all types)");
+STATISTIC(TotalBlocks, "Number of basic blocks");
+STATISTIC(TotalFuncs , "Number of non-external functions");
+STATISTIC(TotalMemInst, "Number of memory instructions");
#define HANDLE_INST(N, OPCODE, CLASS) \
- Statistic Num##OPCODE##Inst("instcount", "Number of " #OPCODE " insts");
+ STATISTIC(Num ## OPCODE ## Inst, "Number of " #OPCODE " insts");
#include "llvm/Instruction.def"
+
+namespace {
class InstCount : public FunctionPass, public InstVisitor<InstCount> {
friend class InstVisitor<InstCount>;
//
//===----------------------------------------------------------------------===//
+#define DEBUG_TYPE "scalar-evolution"
#include "llvm/Analysis/ScalarEvolutionExpressions.h"
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
#include <cmath>
using namespace llvm;
+STATISTIC(NumBruteForceEvaluations,
+ "Number of brute force evaluations needed to "
+ "calculate high-order polynomial exit values");
+STATISTIC(NumArrayLenItCounts,
+ "Number of trip counts computed with array length");
+STATISTIC(NumTripCountsComputed,
+ "Number of loops with predictable loop counts");
+STATISTIC(NumTripCountsNotComputed,
+ "Number of loops without predictable loop counts");
+STATISTIC(NumBruteForceTripCountsComputed,
+ "Number of loops with trip counts computed by force");
+
+cl::opt<unsigned>
+MaxBruteForceIterations("scalar-evolution-max-iterations", cl::ReallyHidden,
+ cl::desc("Maximum number of iterations SCEV will "
+ "symbolically execute a constant derived loop"),
+ cl::init(100));
+
namespace {
RegisterPass<ScalarEvolution>
R("scalar-evolution", "Scalar Evolution Analysis");
-
- Statistic
- NumBruteForceEvaluations("scalar-evolution",
- "Number of brute force evaluations needed to "
- "calculate high-order polynomial exit values");
- Statistic
- NumArrayLenItCounts("scalar-evolution",
- "Number of trip counts computed with array length");
- Statistic
- NumTripCountsComputed("scalar-evolution",
- "Number of loops with predictable loop counts");
- Statistic
- NumTripCountsNotComputed("scalar-evolution",
- "Number of loops without predictable loop counts");
- Statistic
- NumBruteForceTripCountsComputed("scalar-evolution",
- "Number of loops with trip counts computed by force");
-
- cl::opt<unsigned>
- MaxBruteForceIterations("scalar-evolution-max-iterations", cl::ReallyHidden,
- cl::desc("Maximum number of iterations SCEV will "
- "symbolically execute a constant derived loop"),
- cl::init(100));
}
//===----------------------------------------------------------------------===//