diff --git a/include/llvm/Analysis/BasicValueNumbering.h b/include/llvm/Analysis/BasicValueNumbering.h new file mode 100644 index 00000000000..66c7d94c1ab --- /dev/null +++ b/include/llvm/Analysis/BasicValueNumbering.h @@ -0,0 +1,37 @@ +//===- llvm/Analysis/BasicValueNumbering.h - Value #'ing Impl ---*- C++ -*-===// +// +// This file defines the default implementation of the Value Numbering +// interface, which uses the SSA value graph to find lexically identical +// expressions. This does not require any computation ahead of time, so it is a +// very fast default implementation. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_ANALYSIS_BASIC_VALUE_NUMBERING_H +#define LLVM_ANALYSIS_BASIC_VALUE_NUMBERING_H + +#include "llvm/Analysis/ValueNumbering.h" +#include "llvm/Pass.h" + +struct BasicValueNumbering : public FunctionPass, public ValueNumbering { + + /// Pass Implementation stuff. This isn't much of a pass. + /// + bool runOnFunction(Function &) { return false; } + + /// getAnalysisUsage - Does not modify anything. + /// + virtual void getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesAll(); + } + + /// getEqualNumberNodes - Return nodes with the same value number as the + /// specified Value. This fills in the argument vector with any equal values. + /// + /// This is where our implementation is. + /// + virtual void getEqualNumberNodes(Value *V1, + std::vector &RetVals) const; +}; + +#endif