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