summaryrefslogtreecommitdiffstats
path: root/llvm/test
diff options
context:
space:
mode:
authorRong Xu <xur@google.com>2016-10-25 21:47:24 +0000
committerRong Xu <xur@google.com>2016-10-25 21:47:24 +0000
commit33308f92ebef0a0848997f912659c50ddf647383 (patch)
tree142670fd3c0522f394dd02b2a21fce001a94a85f /llvm/test
parentfa2412b2e706d18c1afb7f70f34353baebb9c0ba (diff)
downloadbcm5719-llvm-33308f92ebef0a0848997f912659c50ddf647383.tar.gz
bcm5719-llvm-33308f92ebef0a0848997f912659c50ddf647383.zip
[PGO] Fix select instruction annotation
Summary: Select instruction annotation in IR PGO uses the edge count to infer the branch count. It's currently placed in setInstrumentedCounts() where no all the BB counts have been computed. This leads to wrong branch weights. Move the annotation after all BB counts are populated. Reviewers: davidxl Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D25961 llvm-svn: 285128
Diffstat (limited to 'llvm/test')
-rw-r--r--llvm/test/Transforms/PGOProfile/Inputs/select2.proftext11
-rw-r--r--llvm/test/Transforms/PGOProfile/select2.ll37
2 files changed, 48 insertions, 0 deletions
diff --git a/llvm/test/Transforms/PGOProfile/Inputs/select2.proftext b/llvm/test/Transforms/PGOProfile/Inputs/select2.proftext
new file mode 100644
index 00000000000..56d78387ec2
--- /dev/null
+++ b/llvm/test/Transforms/PGOProfile/Inputs/select2.proftext
@@ -0,0 +1,11 @@
+# IR level Instrumentation Flag
+:ir
+foo
+# Func Hash:
+72057628175588252
+# Num Counters:
+3
+# Counter Values:
+800
+3
+300
diff --git a/llvm/test/Transforms/PGOProfile/select2.ll b/llvm/test/Transforms/PGOProfile/select2.ll
new file mode 100644
index 00000000000..b19fa1ff798
--- /dev/null
+++ b/llvm/test/Transforms/PGOProfile/select2.ll
@@ -0,0 +1,37 @@
+; RUN: llvm-profdata merge %S/Inputs/select2.proftext -o %t.profdata
+; RUN: opt < %s -pgo-instr-use -pgo-test-profile-file=%t.profdata -pgo-instr-select=true -S | FileCheck %s --check-prefix=USE
+; RUN: opt < %s -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -pgo-instr-select=true -S | FileCheck %s --check-prefix=USE
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define i32 @foo(i32 %n) {
+;USE: define i32 @foo(i32 %n) !prof ![[ENTRY_COUNT:[0-9]+]] {
+entry:
+ br label %for.cond
+
+for.cond:
+ %i.0 = phi i32 [ 0, %entry ], [ %inc, %for.inc ]
+ %sum.0 = phi i32 [ 0, %entry ], [ %add, %for.inc ]
+ %cmp = icmp slt i32 %i.0, %n
+ br i1 %cmp, label %for.body, label %for.end
+;USE: br i1 %cmp, label %for.body, label %for.end, !prof ![[BW_FOR_BR:[0-9]+]]
+
+for.body:
+ %cmp1 = icmp sgt i32 %sum.0, 10
+ %cond = select i1 %cmp1, i32 20, i32 -10
+;USE: %cond = select i1 %cmp1, i32 20, i32 -10, !prof ![[BW_FOR_SELECT:[0-9]+]]
+ %add = add nsw i32 %sum.0, %cond
+ br label %for.inc
+
+for.inc:
+ %inc = add nsw i32 %i.0, 1
+ br label %for.cond
+
+for.end:
+ ret i32 %sum.0
+}
+
+;USE: ![[ENTRY_COUNT]] = !{!"function_entry_count", i64 3}
+;USE: ![[BW_FOR_BR]] = !{!"branch_weights", i32 800, i32 3}
+;USE: ![[BW_FOR_SELECT]] = !{!"branch_weights", i32 300, i32 500}
OpenPOWER on IntegriCloud