static char ID; // Class identification, replacement for typeinfo
LoadVN() : FunctionPass((intptr_t)&ID) {}
- /// isAnalysis - Return true if this pass is implementing an analysis pass.
- virtual bool isAnalysis() const { return true; }
-
/// Pass Implementation stuff. This doesn't do any analysis.
///
bool runOnFunction(Function &) { return false; }
void getCallEqualNumberNodes(CallInst *CI,
std::vector<Value*> &RetVals) const;
};
+}
- char LoadVN::ID = 0;
- // Register this pass...
- RegisterPass<LoadVN> X("load-vn", "Load Value Numbering");
+char LoadVN::ID = 0;
+// Register this pass...
+static RegisterPass<LoadVN>
+X("load-vn", "Load Value Numbering", false, true);
- // Declare that we implement the ValueNumbering interface
- RegisterAnalysisGroup<ValueNumbering> Y(X);
-}
+// Declare that we implement the ValueNumbering interface
+static RegisterAnalysisGroup<ValueNumbering> Y(X);
FunctionPass *llvm::createLoadValueNumberingPass() { return new LoadVN(); }
// global. In particular, we would prefer to have an argument or instruction
// operand to chase the def-use chains of.
Value *Op = CF;
- for (unsigned i = 1, e = CI->getNumOperands(); i != e; ++i)
- if (isa<Argument>(CI->getOperand(i)) ||
- isa<Instruction>(CI->getOperand(i))) {
- Op = CI->getOperand(i);
+ for (User::op_iterator i = CI->op_begin() + 1, e = CI->op_end(); i != e; ++i)
+ if (isa<Argument>(*i) ||
+ isa<Instruction>(*i)) {
+ Op = *i;
break;
}
C->getOperand(0) == CI->getOperand(0) &&
C->getParent()->getParent() == CIFunc && C != CI) {
bool AllOperandsEqual = true;
- for (unsigned i = 1, e = CI->getNumOperands(); i != e; ++i)
- if (C->getOperand(i) != CI->getOperand(i)) {
+ for (User::op_iterator i = CI->op_begin() + 1, j = C->op_begin() + 1,
+ e = CI->op_end(); i != e; ++i, ++j)
+ if (*j != *i) {
AllOperandsEqual = false;
break;
}