Add pass printing support to BlockFrequencyInfo pass. The implementation
authorChandler Carruth <chandlerc@gmail.com>
Wed, 19 Oct 2011 10:12:41 +0000 (10:12 +0000)
committerChandler Carruth <chandlerc@gmail.com>
Wed, 19 Oct 2011 10:12:41 +0000 (10:12 +0000)
layer already had support for printing the results of this analysis, but
the wiring was missing.

Now that printing the analysis works, actually bring some of this
analysis, and the BranchProbabilityInfo analysis that it wraps, under
test! I'm planning on fixing some bugs and doing other work here, so
having a nice place to add regression tests and a way to observe the
results is really useful.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@142491 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Analysis/BlockFrequencyInfo.h
lib/Analysis/BlockFrequencyInfo.cpp
test/Analysis/BlockFrequencyInfo/basic.ll [new file with mode: 0644]
test/Analysis/BlockFrequencyInfo/dg.exp [new file with mode: 0644]

index 5978d5fa0ee9e82465c1d22c973daf745d06ba45..9e698a9f4bb1d065f4c0520e6444210163a5ffaa 100644 (file)
@@ -40,6 +40,7 @@ public:
   void getAnalysisUsage(AnalysisUsage &AU) const;
 
   bool runOnFunction(Function &F);
+  void print(raw_ostream &O, const Module *M) const;
 
   /// getblockFreq - Return block frequency. Return 0 if we don't have the
   /// information. Please note that initial frequency is equal to 1024. It means
index ee899153e1dc5f34b954e2980b0450cf54daaef9..d16665fa55cf3bb0f27f80b0bd59028e081d1fab 100644 (file)
@@ -49,6 +49,10 @@ bool BlockFrequencyInfo::runOnFunction(Function &F) {
   return false;
 }
 
+void BlockFrequencyInfo::print(raw_ostream &O, const Module *) const {
+  if (BFI) BFI->print(O);
+}
+
 /// getblockFreq - Return block frequency. Return 0 if we don't have the
 /// information. Please note that initial frequency is equal to 1024. It means
 /// that we should not rely on the value itself, but only on the comparison to
diff --git a/test/Analysis/BlockFrequencyInfo/basic.ll b/test/Analysis/BlockFrequencyInfo/basic.ll
new file mode 100644 (file)
index 0000000..c09e3ff
--- /dev/null
@@ -0,0 +1,24 @@
+; RUN: opt < %s -analyze -block-freq | FileCheck %s
+
+define i32 @test1(i32 %i, i32* %a) {
+; CHECK: Printing analysis {{.*}} for function 'test1'
+; CHECK: entry = 1024
+entry:
+  br label %body
+
+; Loop backedges are weighted and thus their bodies have a greater frequency.
+; CHECK: body = 31744
+body:
+  %iv = phi i32 [ 0, %entry ], [ %next, %body ]
+  %base = phi i32 [ 0, %entry ], [ %sum, %body ]
+  %arrayidx = getelementptr inbounds i32* %a, i32 %iv
+  %0 = load i32* %arrayidx
+  %sum = add nsw i32 %0, %base
+  %next = add i32 %iv, 1
+  %exitcond = icmp eq i32 %next, %i
+  br i1 %exitcond, label %exit, label %body
+
+; CHECK: exit = 1024
+exit:
+  ret i32 %sum
+}
diff --git a/test/Analysis/BlockFrequencyInfo/dg.exp b/test/Analysis/BlockFrequencyInfo/dg.exp
new file mode 100644 (file)
index 0000000..f200589
--- /dev/null
@@ -0,0 +1,3 @@
+load_lib llvm.exp
+
+RunLLVMTests [lsort [glob -nocomplain $srcdir/$subdir/*.{ll,c,cpp}]]