xref: /llvm-project/llvm/test/Transforms/PGOProfile/memop_size_annotation.ll (revision 9ff36df5a4a7d52c51e950522870bb64912688d2)
1; RUN: llvm-profdata merge %S/Inputs/memop_size_annotation.proftext -o %t.profdata
2; RUN: opt < %s -passes=pgo-instr-use -memop-max-annotations=9 -pgo-test-profile-file=%t.profdata -pgo-memop-optimize-memcmp-bcmp -S | FileCheck %s --check-prefixes=MEMOP_ANNOTATION,MEMOP_ANNOTATION9
3; RUN: opt < %s -passes=pgo-instr-use -pgo-test-profile-file=%t.profdata -pgo-memop-optimize-memcmp-bcmp -S | FileCheck %s --check-prefixes=MEMOP_ANNOTATION,MEMOP_ANNOTATION4
4
5target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
6target triple = "x86_64-unknown-linux-gnu"
7
8define void @foo(ptr %dst, ptr %src, ptr %a, i32 %n) {
9entry:
10  br label %for.cond
11
12for.cond:
13  %i.0 = phi i32 [ 0, %entry ], [ %inc5, %for.inc4 ]
14  %cmp = icmp slt i32 %i.0, %n
15  br i1 %cmp, label %for.body, label %for.end6
16
17for.body:
18  br label %for.cond1
19
20for.cond1:
21  %j.0 = phi i32 [ 0, %for.body ], [ %inc, %for.inc ]
22  %idx.ext = sext i32 %i.0 to i64
23  %add.ptr = getelementptr inbounds i32, ptr %a, i64 %idx.ext
24  %0 = load i32, ptr %add.ptr, align 4
25  %cmp2 = icmp slt i32 %j.0, %0
26  br i1 %cmp2, label %for.body3, label %for.end
27
28for.body3:
29  %add = add nsw i32 %i.0, 1
30  %conv = sext i32 %add to i64
31  call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %conv, i1 false)
32; MEMOP_ANNOTATION: call void @llvm.memcpy.p0.p0.i64(ptr %dst, ptr %src, i64 %conv, i1 false)
33; MEMOP_ANNOTATION-SAME: !prof ![[MEMOP_VALUESITE:[0-9]+]]
34  %memcmp = call i32 @memcmp(ptr %dst, ptr %src, i64 %conv)
35; MEMOP_ANNOTATION: call i32 @memcmp(ptr %dst, ptr %src, i64 %conv)
36; MEMOP_ANNOTATION-SAME: !prof ![[MEMOP_VALUESITE]]
37  %bcmp = call i32 @bcmp(ptr %dst, ptr %src, i64 %conv)
38; MEMOP_ANNOTATION: call i32 @bcmp(ptr %dst, ptr %src, i64 %conv)
39; MEMOP_ANNOTATION-SAME: !prof ![[MEMOP_VALUESITE]]
40; MEMOP_ANNOTATION9: ![[MEMOP_VALUESITE]] = !{!"VP", i32 1, i64 556, i64 1, i64 99, i64 2, i64 88, i64 3, i64 77, i64 9, i64 72, i64 4, i64 66, i64 5, i64 55, i64 6, i64 44, i64 7, i64 33, i64 8, i64 22}
41; MEMOP_ANNOTATION4: ![[MEMOP_VALUESITE]] = !{!"VP", i32 1, i64 556, i64 1, i64 99, i64 2, i64 88, i64 3, i64 77, i64 9, i64 72}
42  br label %for.inc
43
44for.inc:
45  %inc = add nsw i32 %j.0, 1
46  br label %for.cond1
47
48for.end:
49  br label %for.inc4
50
51for.inc4:
52  %inc5 = add nsw i32 %i.0, 1
53  br label %for.cond
54
55for.end6:
56  ret void
57}
58
59declare void @llvm.lifetime.start(i64, ptr nocapture)
60
61declare void @llvm.memcpy.p0.p0.i64(ptr nocapture writeonly, ptr nocapture readonly, i64, i1)
62
63declare i32 @memcmp(ptr, ptr, i64)
64declare i32 @bcmp(ptr, ptr, i64)
65
66declare void @llvm.lifetime.end(i64, ptr nocapture)
67