#include "llvm/ADT/Statistic.h"
#include "llvm/Transforms/Utils/UnifyFunctionExitNodes.h"
#include "llvm/Support/CFG.h"
-#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include <algorithm>
}
namespace {
- class VISIBILITY_HIDDEN ValueTable {
+ class ValueTable {
private:
DenseMap<Value*, uint32_t> valueNumbering;
DenseMap<Expression, uint32_t> expressionNumbering;
//===----------------------------------------------------------------------===//
namespace {
-
- class VISIBILITY_HIDDEN GVNPRE : public FunctionPass {
+ class GVNPRE : public FunctionPass {
bool runOnFunction(Function &F);
public:
static char ID; // Pass identification, replacement for typeid
Value* GVNPRE::phi_translate(Value* V, BasicBlock* pred, BasicBlock* succ) {
if (V == 0)
return 0;
-
- LLVMContext &Context = V->getContext();
// Unary Operations
if (CastInst* U = dyn_cast<CastInst>(V)) {
newOp1, newOp2,
BO->getName()+".expr");
else if (CmpInst* C = dyn_cast<CmpInst>(U))
- newVal = CmpInst::Create(Context, C->getOpcode(),
+ newVal = CmpInst::Create(C->getOpcode(),
C->getPredicate(),
newOp1, newOp2,
C->getName()+".expr");
else if (ExtractElementInst* E = dyn_cast<ExtractElementInst>(U))
- newVal = ExtractElementInst::Create(newOp1, newOp2, E->getName()+".expr");
+ newVal = ExtractElementInst::Create(newOp1, newOp2,
+ E->getName()+".expr");
uint32_t v = VN.lookup_or_add(newVal);
/// dump - Dump a set of values to standard error
void GVNPRE::dump(ValueNumberedSet& s) const {
- DOUT << "{ ";
+ DEBUG(errs() << "{ ");
for (ValueNumberedSet::iterator I = s.begin(), E = s.end();
I != E; ++I) {
- DOUT << "" << VN.lookup(*I) << ": ";
+ DEBUG(errs() << "" << VN.lookup(*I) << ": ");
DEBUG((*I)->dump());
}
- DOUT << "}\n\n";
+ DEBUG(errs() << "}\n\n");
}
/// elimination - Phase 3 of the main algorithm. Perform full redundancy
void GVNPRE::insertion_pre(Value* e, BasicBlock* BB,
DenseMap<BasicBlock*, Value*>& avail,
std::map<BasicBlock*, ValueNumberedSet>& new_sets) {
- LLVMContext &Context = e->getContext();
for (pred_iterator PI = pred_begin(BB), PE = pred_end(BB); PI != PE; ++PI) {
Value* e2 = avail[*PI];
if (!availableOut[*PI].test(VN.lookup(e2))) {
BO->getName()+".gvnpre",
(*PI)->getTerminator());
else if (CmpInst* C = dyn_cast<CmpInst>(U))
- newVal = CmpInst::Create(Context, C->getOpcode(),
+ newVal = CmpInst::Create(C->getOpcode(),
C->getPredicate(), s1, s2,
C->getName()+".gvnpre",
(*PI)->getTerminator());