- AliasSets[0].AccessTy = AliasSet::ModRef;
- AliasSets[0].AliasTy = AliasSet::MayAlias;
- AliasSets[0].Invokes.push_back(II);
+ OS << "\n";
+}
+
+void AliasSetTracker::print(std::ostream &OS) const {
+ OS << "Alias Set Tracker: " << AliasSets.size() << " alias sets for "
+ << PointerMap.size() << " pointer values.\n";
+ for (const_iterator I = begin(), E = end(); I != E; ++I)
+ I->print(OS);
+ OS << "\n";
+}
+
+void AliasSet::dump() const { print (std::cerr); }
+void AliasSetTracker::dump() const { print(std::cerr); }
+
+
+//===----------------------------------------------------------------------===//
+// AliasSetPrinter Pass
+//===----------------------------------------------------------------------===//
+
+namespace {
+ class AliasSetPrinter : public FunctionPass {
+ AliasSetTracker *Tracker;
+ public:
+ virtual void getAnalysisUsage(AnalysisUsage &AU) const {
+ AU.setPreservesAll();
+ AU.addRequired<AliasAnalysis>();
+ }
+
+ virtual bool runOnFunction(Function &F) {
+ Tracker = new AliasSetTracker(getAnalysis<AliasAnalysis>());
+
+ for (inst_iterator I = inst_begin(F), E = inst_end(F); I != E; ++I)
+ Tracker->add(*I);
+ return false;
+ }
+
+ /// print - Convert to human readable form
+ virtual void print(std::ostream &OS) const {
+ Tracker->print(OS);
+ }
+
+ virtual void releaseMemory() {
+ delete Tracker;
+ }
+ };
+ RegisterPass<AliasSetPrinter> X("print-alias-sets", "Alias Set Printer",
+ PassInfo::Analysis | PassInfo::Optimization);