summaryrefslogtreecommitdiffstats
path: root/llvm/test/MC/ELF/cgprofile.ll
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/test/MC/ELF/cgprofile.ll')
-rw-r--r--llvm/test/MC/ELF/cgprofile.ll50
1 files changed, 50 insertions, 0 deletions
diff --git a/llvm/test/MC/ELF/cgprofile.ll b/llvm/test/MC/ELF/cgprofile.ll
new file mode 100644
index 00000000000..27b43f1172c
--- /dev/null
+++ b/llvm/test/MC/ELF/cgprofile.ll
@@ -0,0 +1,50 @@
+; RUN: llc -filetype=asm %s -o - -mtriple x86_64-pc-linux-gnu | FileCheck %s
+; RUN: llc -filetype=obj %s -o %t -mtriple x86_64-pc-linux-gnu
+; RUN: llvm-readobj -elf-cg-profile %t | FileCheck %s --check-prefix=OBJ
+
+declare void @b()
+
+define void @a() {
+ call void @b()
+ ret void
+}
+
+define void @freq(i1 %cond) {
+ br i1 %cond, label %A, label %B
+A:
+ call void @a();
+ ret void
+B:
+ call void @b();
+ ret void
+}
+
+!llvm.module.flags = !{!0}
+
+!0 = !{i32 5, !"CG Profile", !1}
+!1 = !{!2, !3, !4}
+!2 = !{void ()* @a, void ()* @b, i64 32}
+!3 = !{void (i1)* @freq, void ()* @a, i64 11}
+!4 = !{void (i1)* @freq, void ()* @b, i64 20}
+
+; CHECK: .cg_profile a, b, 32
+; CHECK: .cg_profile freq, a, 11
+; CHECK: .cg_profile freq, b, 20
+
+; OBJ: CGProfile [
+; OBJ: CGProfileEntry {
+; OBJ: From: a
+; OBJ: To: b
+; OBJ: Weight: 32
+; OBJ: }
+; OBJ: CGProfileEntry {
+; OBJ: From: freq
+; OBJ: To: a
+; OBJ: Weight: 11
+; OBJ: }
+; OBJ: CGProfileEntry {
+; OBJ: From: freq
+; OBJ: To: b
+; OBJ: Weight: 20
+; OBJ: }
+; OBJ:]
OpenPOWER on IntegriCloud