112 changes: 56 additions & 56 deletions llvm/test/Transforms/SampleProfile/propagate.ll
Original file line number Diff line number Diff line change
Expand Up @@ -48,98 +48,98 @@ entry:
%N.addr = alloca i64, align 8
%i = alloca i64, align 8
%j = alloca i64, align 8
store i32 %x, i32* %x.addr, align 4
call void @llvm.dbg.declare(metadata i32* %x.addr, metadata !11, metadata !12), !dbg !13
store i32 %y, i32* %y.addr, align 4
call void @llvm.dbg.declare(metadata i32* %y.addr, metadata !14, metadata !12), !dbg !15
store i64 %N, i64* %N.addr, align 8
call void @llvm.dbg.declare(metadata i64* %N.addr, metadata !16, metadata !12), !dbg !17
%0 = load i32, i32* %x.addr, align 4, !dbg !18
%1 = load i32, i32* %y.addr, align 4, !dbg !20
store i32 %x, ptr %x.addr, align 4
call void @llvm.dbg.declare(metadata ptr %x.addr, metadata !11, metadata !12), !dbg !13
store i32 %y, ptr %y.addr, align 4
call void @llvm.dbg.declare(metadata ptr %y.addr, metadata !14, metadata !12), !dbg !15
store i64 %N, ptr %N.addr, align 8
call void @llvm.dbg.declare(metadata ptr %N.addr, metadata !16, metadata !12), !dbg !17
%0 = load i32, ptr %x.addr, align 4, !dbg !18
%1 = load i32, ptr %y.addr, align 4, !dbg !20
%cmp = icmp slt i32 %0, %1, !dbg !21
br i1 %cmp, label %if.then, label %if.else, !dbg !22

if.then: ; preds = %entry
%2 = load i32, i32* %y.addr, align 4, !dbg !23
%3 = load i32, i32* %x.addr, align 4, !dbg !25
%2 = load i32, ptr %y.addr, align 4, !dbg !23
%3 = load i32, ptr %x.addr, align 4, !dbg !25
%sub = sub nsw i32 %2, %3, !dbg !26
%conv = sext i32 %sub to i64, !dbg !23
store i64 %conv, i64* %retval, align 8, !dbg !27
store i64 %conv, ptr %retval, align 8, !dbg !27
br label %return, !dbg !27

if.else: ; preds = %entry
call void @llvm.dbg.declare(metadata i64* %i, metadata !28, metadata !12), !dbg !31
store i64 0, i64* %i, align 8, !dbg !31
call void @llvm.dbg.declare(metadata ptr %i, metadata !28, metadata !12), !dbg !31
store i64 0, ptr %i, align 8, !dbg !31
br label %for.cond, !dbg !32

for.cond: ; preds = %for.inc17, %if.else
%4 = load i64, i64* %i, align 8, !dbg !33
%5 = load i64, i64* %N.addr, align 8, !dbg !36
%4 = load i64, ptr %i, align 8, !dbg !33
%5 = load i64, ptr %N.addr, align 8, !dbg !36
%cmp1 = icmp slt i64 %4, %5, !dbg !37
br i1 %cmp1, label %for.body, label %for.end19, !dbg !38

for.body: ; preds = %for.cond
%6 = load i64, i64* %i, align 8, !dbg !39
%7 = load i64, i64* %N.addr, align 8, !dbg !42
%6 = load i64, ptr %i, align 8, !dbg !39
%7 = load i64, ptr %N.addr, align 8, !dbg !42
%div = sdiv i64 %7, 3, !dbg !43
%cmp2 = icmp sgt i64 %6, %div, !dbg !44
br i1 %cmp2, label %if.then3, label %if.end, !dbg !45
; CHECK: edge for.body -> if.then3 probability is 0x51292fa6 / 0x80000000 = 63.41%
; CHECK: edge for.body -> if.end probability is 0x2ed6d05a / 0x80000000 = 36.59%

if.then3: ; preds = %for.body
%8 = load i32, i32* %x.addr, align 4, !dbg !46
%8 = load i32, ptr %x.addr, align 4, !dbg !46
%dec = add nsw i32 %8, -1, !dbg !46
store i32 %dec, i32* %x.addr, align 4, !dbg !46
store i32 %dec, ptr %x.addr, align 4, !dbg !46
br label %if.end, !dbg !47

if.end: ; preds = %if.then3, %for.body
%9 = load i64, i64* %i, align 8, !dbg !48
%10 = load i64, i64* %N.addr, align 8, !dbg !50
%9 = load i64, ptr %i, align 8, !dbg !48
%10 = load i64, ptr %N.addr, align 8, !dbg !50
%div4 = sdiv i64 %10, 4, !dbg !51
%cmp5 = icmp sgt i64 %9, %div4, !dbg !52
br i1 %cmp5, label %if.then6, label %if.else7, !dbg !53
; CHECK: edge if.end -> if.then6 probability is 0x5d89d89e / 0x80000000 = 73.08%
; CHECK: edge if.end -> if.else7 probability is 0x22762762 / 0x80000000 = 26.92%

if.then6: ; preds = %if.end
%11 = load i32, i32* %y.addr, align 4, !dbg !54
%11 = load i32, ptr %y.addr, align 4, !dbg !54
%inc = add nsw i32 %11, 1, !dbg !54
store i32 %inc, i32* %y.addr, align 4, !dbg !54
%12 = load i32, i32* %x.addr, align 4, !dbg !56
store i32 %inc, ptr %y.addr, align 4, !dbg !54
%12 = load i32, ptr %x.addr, align 4, !dbg !56
%add = add nsw i32 %12, 3, !dbg !56
store i32 %add, i32* %x.addr, align 4, !dbg !56
store i32 %add, ptr %x.addr, align 4, !dbg !56
br label %if.end16, !dbg !57

if.else7: ; preds = %if.end
call void @llvm.dbg.declare(metadata i64* %j, metadata !58, metadata !12), !dbg !62
store i64 0, i64* %j, align 8, !dbg !62
call void @llvm.dbg.declare(metadata ptr %j, metadata !58, metadata !12), !dbg !62
store i64 0, ptr %j, align 8, !dbg !62
br label %for.cond8, !dbg !63

for.cond8: ; preds = %for.inc, %if.else7
%13 = load i64, i64* %j, align 8, !dbg !64
%13 = load i64, ptr %j, align 8, !dbg !64
%cmp9 = icmp slt i64 %13, 100, !dbg !67
br i1 %cmp9, label %for.body10, label %for.end, !dbg !68
; CHECK: edge for.cond8 -> for.body10 probability is 0x7e941a89 / 0x80000000 = 98.89% [HOT edge]
; CHECK: edge for.cond8 -> for.end probability is 0x016be577 / 0x80000000 = 1.11%


for.body10: ; preds = %for.cond8
%14 = load i64, i64* %j, align 8, !dbg !69
%15 = load i32, i32* %x.addr, align 4, !dbg !71
%14 = load i64, ptr %j, align 8, !dbg !69
%15 = load i32, ptr %x.addr, align 4, !dbg !71
%conv11 = sext i32 %15 to i64, !dbg !71
%add12 = add nsw i64 %conv11, %14, !dbg !71
%conv13 = trunc i64 %add12 to i32, !dbg !71
store i32 %conv13, i32* %x.addr, align 4, !dbg !71
%16 = load i32, i32* %y.addr, align 4, !dbg !72
store i32 %conv13, ptr %x.addr, align 4, !dbg !71
%16 = load i32, ptr %y.addr, align 4, !dbg !72
%sub14 = sub nsw i32 %16, 3, !dbg !72
store i32 %sub14, i32* %y.addr, align 4, !dbg !72
store i32 %sub14, ptr %y.addr, align 4, !dbg !72
br label %for.inc, !dbg !73

for.inc: ; preds = %for.body10
%17 = load i64, i64* %j, align 8, !dbg !74
%17 = load i64, ptr %j, align 8, !dbg !74
%inc15 = add nsw i64 %17, 1, !dbg !74
store i64 %inc15, i64* %j, align 8, !dbg !74
store i64 %inc15, ptr %j, align 8, !dbg !74
br label %for.cond8, !dbg !76

for.end: ; preds = %for.cond8
Expand All @@ -149,24 +149,24 @@ if.end16: ; preds = %for.end, %if.then6
br label %for.inc17, !dbg !77

for.inc17: ; preds = %if.end16
%18 = load i64, i64* %i, align 8, !dbg !78
%18 = load i64, ptr %i, align 8, !dbg !78
%inc18 = add nsw i64 %18, 1, !dbg !78
store i64 %inc18, i64* %i, align 8, !dbg !78
store i64 %inc18, ptr %i, align 8, !dbg !78
br label %for.cond, !dbg !80

for.end19: ; preds = %for.cond
br label %if.end20

if.end20: ; preds = %for.end19
%19 = load i32, i32* %y.addr, align 4, !dbg !81
%20 = load i32, i32* %x.addr, align 4, !dbg !82
%19 = load i32, ptr %y.addr, align 4, !dbg !81
%20 = load i32, ptr %x.addr, align 4, !dbg !82
%mul = mul nsw i32 %19, %20, !dbg !83
%conv21 = sext i32 %mul to i64, !dbg !81
store i64 %conv21, i64* %retval, align 8, !dbg !84
store i64 %conv21, ptr %retval, align 8, !dbg !84
br label %return, !dbg !84

return: ; preds = %if.end20, %if.then
%21 = load i64, i64* %retval, align 8, !dbg !85
%21 = load i64, ptr %retval, align 8, !dbg !85
ret i64 %21, !dbg !85
}

Expand All @@ -180,25 +180,25 @@ entry:
%x = alloca i32, align 4
%y = alloca i32, align 4
%N = alloca i64, align 8
store i32 0, i32* %retval, align 4
call void @llvm.dbg.declare(metadata i32* %x, metadata !89, metadata !12), !dbg !90
store i32 5678, i32* %x, align 4, !dbg !90
call void @llvm.dbg.declare(metadata i32* %y, metadata !91, metadata !12), !dbg !92
store i32 1234, i32* %y, align 4, !dbg !92
call void @llvm.dbg.declare(metadata i64* %N, metadata !93, metadata !12), !dbg !94
store i64 9999999, i64* %N, align 8, !dbg !94
%0 = load i32, i32* %x, align 4, !dbg !95
%1 = load i32, i32* %y, align 4, !dbg !96
%2 = load i64, i64* %N, align 8, !dbg !97
%3 = load i32, i32* %x, align 4, !dbg !98
%4 = load i32, i32* %y, align 4, !dbg !99
%5 = load i64, i64* %N, align 8, !dbg !100
store i32 0, ptr %retval, align 4
call void @llvm.dbg.declare(metadata ptr %x, metadata !89, metadata !12), !dbg !90
store i32 5678, ptr %x, align 4, !dbg !90
call void @llvm.dbg.declare(metadata ptr %y, metadata !91, metadata !12), !dbg !92
store i32 1234, ptr %y, align 4, !dbg !92
call void @llvm.dbg.declare(metadata ptr %N, metadata !93, metadata !12), !dbg !94
store i64 9999999, ptr %N, align 8, !dbg !94
%0 = load i32, ptr %x, align 4, !dbg !95
%1 = load i32, ptr %y, align 4, !dbg !96
%2 = load i64, ptr %N, align 8, !dbg !97
%3 = load i32, ptr %x, align 4, !dbg !98
%4 = load i32, ptr %y, align 4, !dbg !99
%5 = load i64, ptr %N, align 8, !dbg !100
%call = call i64 @_Z3fooiil(i32 %3, i32 %4, i64 %5), !dbg !101
%call1 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str, i32 0, i32 0), i32 %0, i32 %1, i64 %2, i64 %call), !dbg !102
%call1 = call i32 (ptr, ...) @printf(ptr @.str, i32 %0, i32 %1, i64 %2, i64 %call), !dbg !102
ret i32 0, !dbg !104
}

declare i32 @printf(i8*, ...) #3
declare i32 @printf(ptr, ...) #3

attributes #0 = { nounwind uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2,+x87" "unsafe-fp-math"="false" "use-soft-float"="false" "use-sample-profile" }
attributes #1 = { nounwind readnone }
Expand Down
16 changes: 8 additions & 8 deletions llvm/test/Transforms/SampleProfile/pseudo-probe-dangle2.ll
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,17 @@
; CHECK-NOT: call void @llvm.pseudoprobe(i64 -4224472938262609671, i64 5

; Function Attrs: nounwind uwtable
define dso_local i32 @foo(i32* nocapture %marker, i32* nocapture %move_ordering, i32* nocapture %moves, i32 %num_moves) local_unnamed_addr #0 !dbg !10 {
define dso_local i32 @foo(ptr nocapture %marker, ptr nocapture %move_ordering, ptr nocapture %moves, i32 %num_moves) local_unnamed_addr #0 !dbg !10 {
entry:
call void @llvm.dbg.value(metadata i32* %marker, metadata !19, metadata !DIExpression()), !dbg !28
call void @llvm.dbg.value(metadata i32* %move_ordering, metadata !20, metadata !DIExpression()), !dbg !28
call void @llvm.dbg.value(metadata i32* %moves, metadata !21, metadata !DIExpression()), !dbg !28
call void @llvm.dbg.value(metadata ptr %marker, metadata !19, metadata !DIExpression()), !dbg !28
call void @llvm.dbg.value(metadata ptr %move_ordering, metadata !20, metadata !DIExpression()), !dbg !28
call void @llvm.dbg.value(metadata ptr %moves, metadata !21, metadata !DIExpression()), !dbg !28
call void @llvm.dbg.value(metadata i32 %num_moves, metadata !22, metadata !DIExpression()), !dbg !28
call void @llvm.pseudoprobe(i64 -4224472938262609671, i64 1, i32 0, i64 -1), !dbg !29
call void @llvm.dbg.value(metadata i32 -1000000, metadata !25, metadata !DIExpression()), !dbg !28
%0 = load i32, i32* %marker, align 4, !dbg !30, !tbaa !31
%0 = load i32, ptr %marker, align 4, !dbg !30, !tbaa !31
%inc = add nsw i32 %0, 1, !dbg !30
store i32 %inc, i32* %marker, align 4, !dbg !30, !tbaa !31
store i32 %inc, ptr %marker, align 4, !dbg !30, !tbaa !31
call void @llvm.dbg.value(metadata i32 %inc, metadata !27, metadata !DIExpression()), !dbg !28
%cmp = icmp slt i32 %0, 9, !dbg !35
br i1 %cmp, label %for.cond, label %if.else, !dbg !37
Expand All @@ -37,8 +37,8 @@ for.cond: ; preds = %entry, %for.inc
for.body: ; preds = %for.cond
call void @llvm.pseudoprobe(i64 -4224472938262609671, i64 4, i32 0, i64 -1), !dbg !46
%idxprom = sext i32 %i.0 to i64, !dbg !46
%arrayidx = getelementptr inbounds i32, i32* %move_ordering, i64 %idxprom, !dbg !46
%1 = load i32, i32* %arrayidx, align 4, !dbg !46, !tbaa !31
%arrayidx = getelementptr inbounds i32, ptr %move_ordering, i64 %idxprom, !dbg !46
%1 = load i32, ptr %arrayidx, align 4, !dbg !46, !tbaa !31
%cmp2 = icmp sgt i32 %1, %best.0, !dbg !49
br i1 %cmp2, label %if.then3, label %for.inc, !dbg !50

Expand Down
10 changes: 5 additions & 5 deletions llvm/test/Transforms/SampleProfile/pseudo-probe-discriminator.ll
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@ bb1:
ret void, !dbg !13

bb2:
; DEBUG: store i32 8, i32* @a, align 4, !dbg ![[INST:[0-9]+]]
; PROBE: store i32 8, i32* @a, align 4, !dbg ![[INST:[0-9]+]]
store i32 8, i32* @a, align 4, !dbg !12
; DEBUG: store i32 8, ptr @a, align 4, !dbg ![[INST:[0-9]+]]
; PROBE: store i32 8, ptr @a, align 4, !dbg ![[INST:[0-9]+]]
store i32 8, ptr @a, align 4, !dbg !12
br label %bb3

bb3:
ret void, !dbg !12
}

declare void @_Z3barv() #1
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) nounwind argmemonly
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) nounwind argmemonly
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) nounwind argmemonly
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) nounwind argmemonly

attributes #0 = { uwtable "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
attributes #1 = { "disable-tail-calls"="false" "less-precise-fpmad"="false" "frame-pointer"="all" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+fxsr,+mmx,+sse,+sse2" "unsafe-fp-math"="false" "use-soft-float"="false" }
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/SampleProfile/pseudo-probe-emit.ll
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ bb1:
; CHECK-MIR: PSEUDO_PROBE [[#GUID]], 4, 0, 0
; CHECK-ASM: .pseudoprobe [[#GUID]] 3 0 0
; CHECK-ASM: .pseudoprobe [[#GUID]] 4 0 0
store i32 6, i32* @a, align 4
store i32 6, ptr @a, align 4
br label %bb3

bb2:
Expand All @@ -36,7 +36,7 @@ bb2:
; CHECK-MIR: PSEUDO_PROBE [[#GUID]], 4, 0, 0
; CHECK-ASM: .pseudoprobe [[#GUID]] 2 0 0
; CHECK-ASM: .pseudoprobe [[#GUID]] 4 0 0
store i32 8, i32* @a, align 4
store i32 8, ptr @a, align 4
br label %bb3

bb3:
Expand All @@ -46,7 +46,7 @@ bb3:

declare void @bar(i32 %x)

define internal void @foo2(void (i32)* %f) !dbg !4 {
define internal void @foo2(ptr %f) !dbg !4 {
entry:
; CHECK-IL: call void @llvm.pseudoprobe(i64 [[#GUID2:]], i64 1, i32 0, i64 -1)
; CHECK-MIR: PSEUDO_PROBE [[#GUID2:]], 1, 0, 0
Expand Down
4 changes: 2 additions & 2 deletions llvm/test/Transforms/SampleProfile/pseudo-probe-inline.ll
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ while.cond:

while.body:
; CHECK: call void @llvm.pseudoprobe(i64 [[#GUID2]], i64 3, i32 0, i64 -1)
%0 = load volatile i32, i32* @factor, align 4, !dbg !32
%0 = load volatile i32, ptr @factor, align 4, !dbg !32
%sub = sub nsw i32 %x.addr.0, %0, !dbg !39
br label %while.cond, !dbg !31

Expand All @@ -62,7 +62,7 @@ while.cond2:

while.body4:
; CHECK: call void @llvm.pseudoprobe(i64 [[#GUID2]], i64 5, i32 0, i64 -1)
%1 = load volatile i32, i32* @factor, align 4, !dbg !45
%1 = load volatile i32, ptr @factor, align 4, !dbg !45
%add = add nsw i32 %x.addr.1, %1, !dbg !48
br label %while.cond2, !dbg !44

Expand Down
68 changes: 34 additions & 34 deletions llvm/test/Transforms/SampleProfile/pseudo-probe-instcombine.ll
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
; RUN: opt -passes=instcombine -available-load-scan-limit=2 -S < %s | FileCheck %s

%struct.nonbonded = type { [2 x %struct.CompAtom*], [2 x %struct.CompAtomExt*], [2 x %struct.CompAtom*], [2 x %class.Vector*], [2 x %class.Vector*], [2 x i32], %class.Vector, double*, double*, %class.ComputeNonbondedWorkArrays*, %class.Pairlists*, i32, i32, double, double, i32, i32, i32, i32 }
%struct.nonbonded = type { [2 x ptr], [2 x ptr], [2 x ptr], [2 x ptr], [2 x ptr], [2 x i32], %class.Vector, ptr, ptr, ptr, ptr, i32, i32, double, double, i32, i32, i32, i32 }
%struct.CompAtomExt = type { i32 }
%struct.CompAtom = type { %class.Vector, float, i16, i8, i8 }
%class.Vector = type { double, double, double }
%class.ComputeNonbondedWorkArrays = type { %class.ResizeArray, %class.ResizeArray.0, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray, %class.ResizeArray.2, %class.ResizeArray.2 }
%class.ResizeArray.0 = type { i32 (...)**, %class.ResizeArrayRaw.1* }
%class.ResizeArrayRaw.1 = type <{ double*, i8*, i32, i32, i32, float, i32, [4 x i8] }>
%class.ResizeArray = type { i32 (...)**, %class.ResizeArrayRaw* }
%class.ResizeArrayRaw = type <{ i16*, i8*, i32, i32, i32, float, i32, [4 x i8] }>
%class.ResizeArray.2 = type { i32 (...)**, %class.ResizeArrayRaw.3* }
%class.ResizeArrayRaw.3 = type <{ %class.Vector*, i8*, i32, i32, i32, float, i32, [4 x i8] }>
%class.Pairlists = type { i16*, i32, i32 }
%class.ResizeArray.0 = type { ptr, ptr }
%class.ResizeArrayRaw.1 = type <{ ptr, ptr, i32, i32, i32, float, i32, [4 x i8] }>
%class.ResizeArray = type { ptr, ptr }
%class.ResizeArrayRaw = type <{ ptr, ptr, i32, i32, i32, float, i32, [4 x i8] }>
%class.ResizeArray.2 = type { ptr, ptr }
%class.ResizeArrayRaw.3 = type <{ ptr, ptr, i32, i32, i32, float, i32, [4 x i8] }>
%class.Pairlists = type { ptr, i32, i32 }

define dso_local void @merge(%struct.nonbonded* nocapture readonly %params) local_unnamed_addr align 2 {
define dso_local void @merge(ptr nocapture readonly %params) local_unnamed_addr align 2 {
;; Check the minPart4 and minPart assignments are merged.
; CHECK-LABEL: @merge(
; CHECK-COUNT-1: getelementptr inbounds %struct.nonbonded, %struct.nonbonded* %params, i64 0, i32 16
; CHECK-NOT: getelementptr inbounds %struct.nonbonded, %struct.nonbonded* %params, i64 0, i32 16
; CHECK-COUNT-1: getelementptr inbounds %struct.nonbonded, ptr %params, i64 0, i32 16
; CHECK-NOT: getelementptr inbounds %struct.nonbonded, ptr %params, i64 0, i32 16
entry:
%savePairlists3 = getelementptr inbounds %struct.nonbonded, %struct.nonbonded* %params, i64 0, i32 11
%0 = load i32, i32* %savePairlists3, align 8
%usePairlists4 = getelementptr inbounds %struct.nonbonded, %struct.nonbonded* %params, i64 0, i32 12
%1 = load i32, i32* %usePairlists4, align 4
%savePairlists3 = getelementptr inbounds %struct.nonbonded, ptr %params, i64 0, i32 11
%0 = load i32, ptr %savePairlists3, align 8
%usePairlists4 = getelementptr inbounds %struct.nonbonded, ptr %params, i64 0, i32 12
%1 = load i32, ptr %usePairlists4, align 4
%tobool54.not = icmp eq i32 %0, 0
br i1 %tobool54.not, label %lor.lhs.false55, label %if.end109

Expand All @@ -31,14 +31,14 @@ lor.lhs.false55: ; preds = %entry
br i1 %tobool56.not, label %if.end109, label %if.end109.thread

if.end109.thread: ; preds = %lor.lhs.false55
%minPart4 = getelementptr inbounds %struct.nonbonded, %struct.nonbonded* %params, i64 0, i32 16
%2 = load i32, i32* %minPart4, align 4
%minPart4 = getelementptr inbounds %struct.nonbonded, ptr %params, i64 0, i32 16
%2 = load i32, ptr %minPart4, align 4
call void @llvm.pseudoprobe(i64 -6172701105289426098, i64 2, i32 0, i64 -1)
br label %if.then138

if.end109: ; preds = %lor.lhs.false55, %entry
%minPart = getelementptr inbounds %struct.nonbonded, %struct.nonbonded* %params, i64 0, i32 16
%3 = load i32, i32* %minPart, align 4
%minPart = getelementptr inbounds %struct.nonbonded, ptr %params, i64 0, i32 16
%3 = load i32, ptr %minPart, align 4
call void @llvm.pseudoprobe(i64 -6172701105289426098, i64 3, i32 0, i64 -1)
%tobool116.not = icmp eq i32 %1, 0
br i1 %tobool116.not, label %if.then117, label %if.then138
Expand All @@ -58,34 +58,34 @@ if.else147: ; preds = %if.then138
ret void
}

define i32 @load(i32* nocapture %a, i32* nocapture %b) {
define i32 @load(ptr nocapture %a, ptr nocapture %b) {
;; Check the last store is deleted.
; CHECK-LABEL: @load(
; CHECK-NEXT: %1 = getelementptr inbounds i32, i32* %a, i64 1
; CHECK-NEXT: %2 = load i32, i32* %1, align 8
; CHECK-NEXT: %3 = getelementptr inbounds i32, i32* %b, i64 1
; CHECK-NEXT: store i32 %2, i32* %3, align 8
; CHECK-NEXT: %1 = getelementptr inbounds i32, ptr %a, i64 1
; CHECK-NEXT: %2 = load i32, ptr %1, align 8
; CHECK-NEXT: %3 = getelementptr inbounds i32, ptr %b, i64 1
; CHECK-NEXT: store i32 %2, ptr %3, align 8
; CHECK-NEXT: call void @llvm.pseudoprobe(i64 5116412291814990879, i64 1, i32 0, i64 -1)
; CHECK-NEXT: ret i32 %[[#]]
%1 = getelementptr inbounds i32, i32* %a, i32 1
%2 = load i32, i32* %1, align 8
%3 = getelementptr inbounds i32, i32* %b, i32 1
store i32 %2, i32* %3, align 8
%4 = getelementptr inbounds i32, i32* %b, i32 1
%1 = getelementptr inbounds i32, ptr %a, i32 1
%2 = load i32, ptr %1, align 8
%3 = getelementptr inbounds i32, ptr %b, i32 1
store i32 %2, ptr %3, align 8
%4 = getelementptr inbounds i32, ptr %b, i32 1
call void @llvm.pseudoprobe(i64 5116412291814990879, i64 1, i32 0, i64 -1)
%5 = load i32, i32* %4, align 8
%5 = load i32, ptr %4, align 8
ret i32 %5
}

define void @dse(i32* %p) {
define void @dse(ptr %p) {
;; Check the first store is deleted.
; CHECK-LABEL: @dse(
; CHECK-NEXT: call void @llvm.pseudoprobe(i64 5116412291814990879, i64 1, i32 0, i64 -1)
; CHECK-NEXT: store i32 0, i32* [[P:%.*]], align 4
; CHECK-NEXT: store i32 0, ptr [[P:%.*]], align 4
; CHECK-NEXT: ret void
store i32 0, i32* %p
store i32 0, ptr %p
call void @llvm.pseudoprobe(i64 5116412291814990879, i64 1, i32 0, i64 -1)
store i32 0, i32* %p
store i32 0, ptr %p
ret void
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
%class.Domain.67 = type { %class.DomainBase.68 }
%class.DomainBase.68 = type { i32 }

define dso_local void @foo(%class.Loc.95* %0) {
define dso_local void @foo(ptr %0) {
; CHECK-LABEL: @foo(
; CHECK-NEXT: br label [[foo:%.*]]
; CHECK: foo.exit:
Expand All @@ -17,13 +17,13 @@ define dso_local void @foo(%class.Loc.95* %0) {
br label %2

2: ; preds = %4, %1
%.0.i.i = phi %class.Loc.95* [ undef, %1 ], [ %5, %4 ]
%3 = icmp ne %class.Loc.95* %.0.i.i, %0
%.0.i.i = phi ptr [ undef, %1 ], [ %5, %4 ]
%3 = icmp ne ptr %.0.i.i, %0
br i1 %3, label %4, label %foo.exit

4: ; preds = %2
call void @llvm.pseudoprobe(i64 6878943695821059507, i64 9, i32 0, i64 -1)
%5 = getelementptr inbounds %class.Loc.95, %class.Loc.95* %.0.i.i, i32 1
%5 = getelementptr inbounds %class.Loc.95, ptr %.0.i.i, i32 1
br label %2

foo.exit: ; preds = %2
Expand Down
22 changes: 11 additions & 11 deletions llvm/test/Transforms/SampleProfile/pseudo-probe-memset.ll
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,20 @@

%struct.MV = type { i16, i16 }

define void @test(i32* nocapture %c) nounwind optsize {
define void @test(ptr nocapture %c) nounwind optsize {
; All the stores in this example should be merged into a single memset.
; CHECK-NOT: store i32 -1
; CHECK: call void @llvm.memset.p0i8.i64
store i32 -1, i32* %c, align 4
%1 = getelementptr inbounds i32, i32* %c, i32 1
store i32 -1, i32* %1, align 4
%2 = getelementptr inbounds i32, i32* %c, i32 2
store i32 -1, i32* %2, align 4
; CHECK: call void @llvm.memset.p0.i64
store i32 -1, ptr %c, align 4
%1 = getelementptr inbounds i32, ptr %c, i32 1
store i32 -1, ptr %1, align 4
%2 = getelementptr inbounds i32, ptr %c, i32 2
store i32 -1, ptr %2, align 4
call void @llvm.pseudoprobe(i64 5116412291814990879, i64 1, i32 0, i64 -1)
%3 = getelementptr inbounds i32, i32* %c, i32 3
store i32 -1, i32* %3, align 4
%4 = getelementptr inbounds i32, i32* %c, i32 4
store i32 -1, i32* %4, align 4
%3 = getelementptr inbounds i32, ptr %c, i32 3
store i32 -1, ptr %3, align 4
%4 = getelementptr inbounds i32, ptr %c, i32 4
store i32 -1, ptr %4, align 4
ret void
}

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/SampleProfile/pseudo-probe-peep.ll
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

define internal i32 @arc_compare() {
entry:
%0 = load i64, i64* undef, align 8
%0 = load i64, ptr undef, align 8
br i1 undef, label %return, label %if.end

if.end: ; preds = %entry
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/pseudo-probe-profile.prof -pass-remarks=sample-profile -S | FileCheck %s
; RUN: opt < %s -passes=sample-profile -sample-profile-file=%S/Inputs/pseudo-probe-profile.prof -pass-remarks=sample-profile -overwrite-existing-weights=1 -S | FileCheck %s -check-prefix=OVW

define dso_local i32 @foo(i32 %x, void (i32)* %f) #0 !dbg !4 !prof !10 {
define dso_local i32 @foo(i32 %x, ptr %f) #0 !dbg !4 !prof !10 {
entry:
%retval = alloca i32, align 4
%x.addr = alloca i32, align 4
store i32 %x, i32* %x.addr, align 4
%0 = load i32, i32* %x.addr, align 4
store i32 %x, ptr %x.addr, align 4
%0 = load i32, ptr %x.addr, align 4
%cmp = icmp eq i32 %0, 0
call void @llvm.pseudoprobe(i64 6699318081062747564, i64 1, i32 0, i64 -1)
br i1 %cmp, label %if.then, label %if.else, !prof !11
Expand All @@ -16,7 +16,7 @@ if.then:
; CHECK: call {{.*}}, !dbg ![[#]], !prof ![[#PROF:]]
; OVW: call {{.*}}, !dbg ![[#]], !prof ![[#PROF:]]
call void %f(i32 1), !dbg !13, !prof !16
store i32 1, i32* %retval, align 4
store i32 1, ptr %retval, align 4
br label %return

if.else:
Expand All @@ -25,12 +25,12 @@ if.else:
;; The block should have a 0 weight. Check the profile metadata is dropped.
; OVW-NOT: call {{.*}}, !dbg ![[#]], !prof
call void %f(i32 2), !dbg !15, !prof !16
store i32 2, i32* %retval, align 4
store i32 2, ptr %retval, align 4
br label %return

return:
call void @llvm.pseudoprobe(i64 6699318081062747564, i64 4, i32 0, i64 -1)
%1 = load i32, i32* %retval, align 4
%1 = load i32, ptr %retval, align 4
ret i32 %1
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@
define dso_local i32 @foo() #0 {
entry:
call void @llvm.pseudoprobe(i64 6699318081062747564, i64 1, i32 0, i64 -1)
%0 = load i32, i32* @yydebug, align 4
%0 = load i32, ptr @yydebug, align 4
%cmp = icmp ne i32 %0, 0
br i1 %cmp, label %b1, label %exit
; CHECK: br i1 %cmp, label %b1, label %exit, !prof ![[ENTRY_PROF:[0-9]+]]

b1:
call void @llvm.pseudoprobe(i64 6699318081062747564, i64 2, i32 0, i64 -1)
%1 = load i32, i32* @yydebug, align 4
%1 = load i32, ptr @yydebug, align 4
switch i32 %1, label %b3 [
i32 124, label %indirectgoto
i32 92, label %b2
Expand All @@ -28,18 +28,18 @@ b2:

b3:
call void @llvm.pseudoprobe(i64 6699318081062747564, i64 4, i32 0, i64 -1)
%2 = load i32, i32* @yydebug, align 4
%2 = load i32, ptr @yydebug, align 4
ret i32 %2

indirectgoto:
%indirect.goto.dest = alloca i8, align 4
call void @llvm.pseudoprobe(i64 6699318081062747564, i64 5, i32 0, i64 -1)
indirectbr i8* %indirect.goto.dest, [label %b1, label %b3, label %b2]
; CHECK: indirectbr i8* %indirect.goto.dest, [label %b1, label %b3, label %b2], !prof ![[GOTO_PROF:[0-9]+]]
indirectbr ptr %indirect.goto.dest, [label %b1, label %b3, label %b2]
; CHECK: indirectbr ptr %indirect.goto.dest, [label %b1, label %b3, label %b2], !prof ![[GOTO_PROF:[0-9]+]]

exit:
call void @llvm.pseudoprobe(i64 6699318081062747564, i64 6, i32 0, i64 -1)
%3 = load i32, i32* @yydebug, align 4
%3 = load i32, ptr @yydebug, align 4
ret i32 %3

}
Expand Down
12 changes: 6 additions & 6 deletions llvm/test/Transforms/SampleProfile/pseudo-probe-profile.ll
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
; RUN: opt < %s -passes=pseudo-probe,sample-profile -sample-profile-file=%S/Inputs/pseudo-probe-profile.prof -pass-remarks=sample-profile -pass-remarks-output=%t.opt.yaml -sample-profile-use-profi=0 -S | FileCheck %s
; RUN: FileCheck %s -check-prefix=YAML < %t.opt.yaml

define dso_local i32 @foo(i32 %x, void (i32)* %f) #0 !dbg !4 {
define dso_local i32 @foo(i32 %x, ptr %f) #0 !dbg !4 {
entry:
%retval = alloca i32, align 4
%x.addr = alloca i32, align 4
store i32 %x, i32* %x.addr, align 4
%0 = load i32, i32* %x.addr, align 4
store i32 %x, ptr %x.addr, align 4
%0 = load i32, ptr %x.addr, align 4
%cmp = icmp eq i32 %0, 0
; CHECK: call void @llvm.pseudoprobe(i64 [[#GUID:]], i64 1, i32 0, i64 -1)
br i1 %cmp, label %if.then, label %if.else
Expand All @@ -16,19 +16,19 @@ if.then:
; CHECK: call {{.*}}, !dbg ![[#PROBE1:]], !prof ![[PROF1:[0-9]+]]
call void %f(i32 1)
; CHECK: call void @llvm.pseudoprobe(i64 [[#GUID:]], i64 2, i32 0, i64 -1)
store i32 1, i32* %retval, align 4
store i32 1, ptr %retval, align 4
br label %return

if.else:
; CHECK: call {{.*}}, !dbg ![[#PROBE2:]], !prof ![[PROF2:[0-9]+]]
call void %f(i32 2)
; CHECK: call void @llvm.pseudoprobe(i64 [[#GUID:]], i64 3, i32 0, i64 -1)
store i32 2, i32* %retval, align 4
store i32 2, ptr %retval, align 4
br label %return

return:
; CHECK: call void @llvm.pseudoprobe(i64 [[#GUID:]], i64 4, i32 0, i64 -1)
%1 = load i32, i32* %retval, align 4
%1 = load i32, ptr %retval, align 4
ret i32 %1
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

define internal i32 @arc_compare() {
entry:
%0 = load i64, i64* undef, align 8
%0 = load i64, ptr undef, align 8
br i1 undef, label %return, label %if.end

if.end: ; preds = %entry
Expand All @@ -14,7 +14,7 @@ if.end: ; preds = %entry
; IR: call void @llvm.pseudoprobe(i64 5116412291814990879, i64 1, i32 0, i64 -1)
; IR: call void @llvm.pseudoprobe(i64 5116412291814990879, i64 3, i32 0, i64 -1)
call void @llvm.pseudoprobe(i64 5116412291814990879, i64 1, i32 0, i64 -1)
%1 = load i16, i16* undef, align 8
%1 = load i16, ptr undef, align 8
call void @llvm.pseudoprobe(i64 5116412291814990879, i64 3, i32 0, i64 -1)
%2 = and i16 %1, 16
%3 = icmp eq i16 %2, 0
Expand Down
6 changes: 3 additions & 3 deletions llvm/test/Transforms/SampleProfile/pseudo-probe-slotindex.ll
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
; REQUIRES: x86_64-linux
; RUN: llc -print-after=slotindexes -stop-after=slotindexes -mtriple=x86_64-- %s -filetype=asm -o %t 2>&1 | FileCheck %s

define void @foo(i32* %p) {
store i32 0, i32* %p
define void @foo(ptr %p) {
store i32 0, ptr %p
call void @llvm.pseudoprobe(i64 5116412291814990879, i64 1, i32 0, i64 -1)
store i32 0, i32* %p
store i32 0, ptr %p
ret void
}

Expand Down
2 changes: 1 addition & 1 deletion llvm/test/Transforms/SampleProfile/pseudo-probe-twoaddr.ll
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

define dso_local double @twoaddressinstruction() local_unnamed_addr {
for.end:
%0 = load i64, i64* undef, align 8
%0 = load i64, ptr undef, align 8
br label %for.body14.preheader

for.body14.preheader: ; preds = %for.end
Expand Down
8 changes: 4 additions & 4 deletions llvm/test/Transforms/SampleProfile/pseudo-probe-verify.ll
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ declare void @foo2() nounwind
define void @foo(i32 %x) {
bb:
; CHECK: call void @llvm.pseudoprobe(i64 [[#GUID:]], i64 1, i32 0, i64 -1)
%tmp = alloca [5 x i32*], align 16
%tmp = alloca [5 x ptr], align 16
br label %bb7.preheader

bb3.loopexit:
Expand All @@ -39,9 +39,9 @@ bb10:
; CHECK: call void @llvm.pseudoprobe(i64 [[#GUID:]], i64 2, i32 0, i64 -1)
%indvars.iv = phi i64 [ 0, %bb7.preheader ], [ %indvars.iv.next, %bb10 ]
%tmp1.14 = phi i32 [ %tmp1.06, %bb7.preheader ], [ %spec.select, %bb10 ]
%tmp13 = getelementptr inbounds [5 x i32*], [5 x i32*]* %tmp, i64 0, i64 %indvars.iv
%tmp14 = load i32*, i32** %tmp13, align 8
%tmp15.not = icmp ne i32* %tmp14, null
%tmp13 = getelementptr inbounds [5 x ptr], ptr %tmp, i64 0, i64 %indvars.iv
%tmp14 = load ptr, ptr %tmp13, align 8
%tmp15.not = icmp ne ptr %tmp14, null
%tmp18 = sext i1 %tmp15.not to i32
%spec.select = add nsw i32 %tmp1.14, %tmp18
call void @foo2(), !dbg !12
Expand Down
28 changes: 14 additions & 14 deletions llvm/test/Transforms/SampleProfile/remap-2.ll
Original file line number Diff line number Diff line change
Expand Up @@ -7,43 +7,43 @@

define i32 @_ZN3foo3barERKN1M1XINS_6detail3quxEEE() #0 !dbg !9 {
entry:
%t0 = load i32, i32* @x.addr, align 4
%t1 = load i32, i32* @y.addr, align 4
%t0 = load i32, ptr @x.addr, align 4
%t1 = load i32, ptr @y.addr, align 4
%add = add nsw i32 %t0, %t1
ret i32 %add
}

define i32 @_ZN1M1XE() #0 !dbg !10 {
entry:
%t0 = load i32, i32* @x.addr, align 4
%t1 = load i32, i32* @y.addr, align 4
%t0 = load i32, ptr @x.addr, align 4
%t1 = load i32, ptr @y.addr, align 4
%sub = sub nsw i32 %t0, %t1
ret i32 %sub
}

define void @test(i32 ()*) #0 !dbg !4 {
%t2 = alloca i32 ()*
store i32 ()* %0, i32 ()** %t2
%t3 = load i32 ()*, i32 ()** %t2
define void @test(ptr) #0 !dbg !4 {
%t2 = alloca ptr
store ptr %0, ptr %t2
%t3 = load ptr, ptr %t2
; Check call i32 %t3 has been indirect call promoted and call i32 @_ZN1M1XE
; has been inlined.
; CHECK-LABEL: @test(
; CHECK: icmp eq i32 ()* %t3, @_ZN3foo3barERKN1M1XINS_6detail3quxEEE
; CHECK: icmp eq ptr %t3, @_ZN3foo3barERKN1M1XINS_6detail3quxEEE
; CHECK-NOT: call i32 @_ZN1M1XE
%t4 = call i32 %t3(), !dbg !7
%t5 = call i32 @_ZN1M1XE(), !dbg !8
ret void
}

define void @_ZN1M1X1YE(i32 ()*) #0 !dbg !11 {
%t2 = alloca i32 ()*
store i32 ()* %0, i32 ()** %t2
%t3 = load i32 ()*, i32 ()** %t2
define void @_ZN1M1X1YE(ptr) #0 !dbg !11 {
%t2 = alloca ptr
store ptr %0, ptr %t2
%t3 = load ptr, ptr %t2
; Check call i32 %t3 has got its profile but is not indirect call promoted
; because the promotion candidate is a recursive call to the current function.
; CHECK-LABEL: @_ZN1M1X1YE(
; CHECK: call i32 %t3(), {{.*}} !prof ![[PROFID:[0-9]+]]
; CHECK-NOT: icmp eq i32 ()* %t3, @_ZN1M1X1YE
; CHECK-NOT: icmp eq ptr %t3, @_ZN1M1X1YE
%t4 = call i32 %t3(), !dbg !12
ret void
}
Expand Down
66 changes: 31 additions & 35 deletions llvm/test/Transforms/SampleProfile/remarks.ll
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@
;YAML: --- !Analysis
;YAML-NEXT: Pass: sample-profile
;YAML-NEXT: Name: AppliedSamples
;YAML-NEXT: DebugLoc: { File: remarks.cc, Line: 5, Column: 8 }
;YAML-NEXT: DebugLoc: { File: remarks.cc, Line: 5, Column: 12 }
;YAML-NEXT: Function: main
;YAML-NEXT: Args:
;YAML-NEXT: - String: 'Applied '
Expand All @@ -121,68 +121,64 @@ define i64 @_Z3foov() #0 !dbg !4 {
entry:
%sum = alloca i64, align 8
%i = alloca i32, align 4
%0 = bitcast i64* %sum to i8*, !dbg !19
call void @llvm.lifetime.start.p0i8(i64 8, i8* %0) #4, !dbg !19
call void @llvm.dbg.declare(metadata i64* %sum, metadata !9, metadata !20), !dbg !21
store i64 0, i64* %sum, align 8, !dbg !21, !tbaa !22
%1 = bitcast i32* %i to i8*, !dbg !26
call void @llvm.lifetime.start.p0i8(i64 4, i8* %1) #4, !dbg !26
call void @llvm.dbg.declare(metadata i32* %i, metadata !10, metadata !20), !dbg !27
store i32 0, i32* %i, align 4, !dbg !27, !tbaa !28
call void @llvm.lifetime.start.p0(i64 8, ptr %sum) #4, !dbg !19
call void @llvm.dbg.declare(metadata ptr %sum, metadata !9, metadata !20), !dbg !21
store i64 0, ptr %sum, align 8, !dbg !21, !tbaa !22
call void @llvm.lifetime.start.p0(i64 4, ptr %i) #4, !dbg !26
call void @llvm.dbg.declare(metadata ptr %i, metadata !10, metadata !20), !dbg !27
store i32 0, ptr %i, align 4, !dbg !27, !tbaa !28
br label %for.cond, !dbg !26

for.cond: ; preds = %for.inc, %entry
%2 = load i32, i32* %i, align 4, !dbg !30, !tbaa !28
%cmp = icmp slt i32 %2, 500000000, !dbg !34
%0 = load i32, ptr %i, align 4, !dbg !30, !tbaa !28
%cmp = icmp slt i32 %0, 500000000, !dbg !34
br i1 %cmp, label %for.body, label %for.cond.cleanup, !dbg !35

for.cond.cleanup: ; preds = %for.cond
%3 = bitcast i32* %i to i8*, !dbg !36
call void @llvm.lifetime.end.p0i8(i64 4, i8* %3) #4, !dbg !36
call void @llvm.lifetime.end.p0(i64 4, ptr %i) #4, !dbg !36
br label %for.end

for.body: ; preds = %for.cond
%4 = load i32, i32* %i, align 4, !dbg !38, !tbaa !28
%cmp1 = icmp slt i32 %4, 1000, !dbg !40
%1 = load i32, ptr %i, align 4, !dbg !38, !tbaa !28
%cmp1 = icmp slt i32 %1, 1000, !dbg !40
br i1 %cmp1, label %if.then, label %if.else, !dbg !41

if.then: ; preds = %for.body
%5 = load i32, i32* %i, align 4, !dbg !42, !tbaa !28
%conv = sext i32 %5 to i64, !dbg !42
%6 = load i64, i64* %sum, align 8, !dbg !43, !tbaa !22
%sub = sub nsw i64 %6, %conv, !dbg !43
store i64 %sub, i64* %sum, align 8, !dbg !43, !tbaa !22
%2 = load i32, ptr %i, align 4, !dbg !42, !tbaa !28
%conv = sext i32 %2 to i64, !dbg !42
%3 = load i64, ptr %sum, align 8, !dbg !43, !tbaa !22
%sub = sub nsw i64 %3, %conv, !dbg !43
store i64 %sub, ptr %sum, align 8, !dbg !43, !tbaa !22
br label %if.end, !dbg !44

if.else: ; preds = %for.body
%7 = load i32, i32* %i, align 4, !dbg !45, !tbaa !28
%sub2 = sub nsw i32 0, %7, !dbg !46
%4 = load i32, ptr %i, align 4, !dbg !45, !tbaa !28
%sub2 = sub nsw i32 0, %4, !dbg !46
%call = call i32 @rand() #4, !dbg !47
%mul = mul nsw i32 %sub2, %call, !dbg !48
%conv3 = sext i32 %mul to i64, !dbg !46
%8 = load i64, i64* %sum, align 8, !dbg !49, !tbaa !22
%add = add nsw i64 %8, %conv3, !dbg !49
store i64 %add, i64* %sum, align 8, !dbg !49, !tbaa !22
%5 = load i64, ptr %sum, align 8, !dbg !49, !tbaa !22
%add = add nsw i64 %5, %conv3, !dbg !49
store i64 %add, ptr %sum, align 8, !dbg !49, !tbaa !22
br label %if.end

if.end: ; preds = %if.else, %if.then
br label %for.inc, !dbg !50

for.inc: ; preds = %if.end
%9 = load i32, i32* %i, align 4, !dbg !51, !tbaa !28
%inc = add nsw i32 %9, 1, !dbg !51
store i32 %inc, i32* %i, align 4, !dbg !51, !tbaa !28
%6 = load i32, ptr %i, align 4, !dbg !51, !tbaa !28
%inc = add nsw i32 %6, 1, !dbg !51
store i32 %inc, ptr %i, align 4, !dbg !51, !tbaa !28
br label %for.cond, !dbg !52

for.end: ; preds = %for.cond.cleanup
%10 = load i64, i64* %sum, align 8, !dbg !53, !tbaa !22
%11 = bitcast i64* %sum to i8*, !dbg !54
call void @llvm.lifetime.end.p0i8(i64 8, i8* %11) #4, !dbg !54
ret i64 %10, !dbg !55
%7 = load i64, ptr %sum, align 8, !dbg !53, !tbaa !22
call void @llvm.lifetime.end.p0(i64 8, ptr %sum) #4, !dbg !54
ret i64 %7, !dbg !55
}

; Function Attrs: nounwind argmemonly
declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture) #1
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1

; Function Attrs: nounwind readnone
declare void @llvm.dbg.declare(metadata, metadata, metadata) #2
Expand All @@ -193,13 +189,13 @@ define i32 @rand() #3 !dbg !59 {
}

; Function Attrs: nounwind argmemonly
declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture) #1
declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1

; Function Attrs: nounwind uwtable
define i32 @main() #0 !dbg !13 {
entry:
%retval = alloca i32, align 4
store i32 0, i32* %retval, align 4
store i32 0, ptr %retval, align 4
%call = call i64 @_Z3foov(), !dbg !56
%cmp = icmp sgt i64 %call, 0, !dbg !57
%conv = zext i1 %cmp to i32, !dbg !56
Expand Down
12 changes: 6 additions & 6 deletions llvm/test/Transforms/SampleProfile/uniqname.ll
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16
target triple = "x86_64-unknown-linux-gnu"

@cond = dso_local global i8 0, align 1
@p = dso_local global void ()* null, align 8
@p = dso_local global ptr null, align 8

; Check the callsite in inlined function with uniq suffix is annotated with
; profile correctly.
Expand All @@ -22,7 +22,7 @@ target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: uwtable mustprogress
define dso_local void @_Z3foov() #0 !dbg !7 {
entry:
store void ()* @_ZL3hoov.__uniq.334154460836426447066042049082945760258, void ()** @p, align 8, !dbg !9, !tbaa !10
store ptr @_ZL3hoov.__uniq.334154460836426447066042049082945760258, ptr @p, align 8, !dbg !9, !tbaa !10
call void @_ZL3goov.__uniq.334154460836426447066042049082945760258.llvm.4206369970847378271(), !dbg !14
call void @_ZL3moov.__uniq.334154460836426447066042049082945760258(), !dbg !15
ret void, !dbg !16
Expand All @@ -38,13 +38,13 @@ entry:
; Check the indirect call target with uniq suffix is promoted and the inlined
; body is annotated with profile.
; CHECK: define internal void @_ZL3goov.__uniq.334154460836426447066042049082945760258.llvm.4206369970847378271{{.*}} !prof ![[PROF_ID3:[0-9]+]]
; CHECK: icmp eq void ()* {{.*}} @_ZL3hoov.__uniq.334154460836426447066042049082945760258
; CHECK: icmp eq ptr {{.*}} @_ZL3hoov.__uniq.334154460836426447066042049082945760258
; CHECK: call void @_Z10hoo_calleev(), {{.*}} !prof ![[PROF_ID4:[0-9]+]]

; Function Attrs: noinline uwtable mustprogress
define internal void @_ZL3goov.__uniq.334154460836426447066042049082945760258.llvm.4206369970847378271() #2 !dbg !20 {
entry:
%0 = load void ()*, void ()** @p, align 8, !dbg !21, !tbaa !10
%0 = load ptr, ptr @p, align 8, !dbg !21, !tbaa !10
call void %0(), !dbg !22
ret void, !dbg !23
}
Expand All @@ -53,7 +53,7 @@ entry:
define internal void @_ZL3moov.__uniq.334154460836426447066042049082945760258() #1 !dbg !24 {
entry:
call void @_Z10moo_calleev(), !dbg !25
%0 = load volatile i8, i8* @cond, align 1, !dbg !26, !tbaa !27, !range !29
%0 = load volatile i8, ptr @cond, align 1, !dbg !26, !tbaa !27, !range !29
%tobool.not = icmp eq i8 %0, 0, !dbg !26
br i1 %tobool.not, label %if.end, label %if.then, !dbg !26

Expand All @@ -72,7 +72,7 @@ declare !dbg !33 dso_local void @_Z10moo_calleev() #3
; Function Attrs: uwtable mustprogress
define internal void @_ZL3noov.__uniq.334154460836426447066042049082945760258() #1 !dbg !34 {
entry:
%0 = load volatile i8, i8* @cond, align 1, !dbg !35, !tbaa !27, !range !29
%0 = load volatile i8, ptr @cond, align 1, !dbg !35, !tbaa !27, !range !29
%tobool.not = icmp eq i8 %0, 0, !dbg !35
br i1 %tobool.not, label %if.end, label %if.then, !dbg !35

Expand Down
32 changes: 16 additions & 16 deletions llvm/test/Transforms/SampleProfile/use-sample-profile-attr.ll
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ define i32 @foo(i32 %x, i32 %y) #0 !dbg !4 {
entry:
%x.addr = alloca i32, align 4
%y.addr = alloca i32, align 4
store i32 %x, i32* %x.addr, align 4
store i32 %y, i32* %y.addr, align 4
%0 = load i32, i32* %x.addr, align 4, !dbg !11
%1 = load i32, i32* %y.addr, align 4, !dbg !11
store i32 %x, ptr %x.addr, align 4
store i32 %y, ptr %y.addr, align 4
%0 = load i32, ptr %x.addr, align 4, !dbg !11
%1 = load i32, ptr %y.addr, align 4, !dbg !11
%add = add nsw i32 %0, %1, !dbg !11
ret i32 %add, !dbg !11
}
Expand All @@ -30,48 +30,48 @@ entry:
%retval = alloca i32, align 4
%s = alloca i32, align 4
%i = alloca i32, align 4
store i32 0, i32* %retval
store i32 0, i32* %i, align 4, !dbg !12
store i32 0, ptr %retval
store i32 0, ptr %i, align 4, !dbg !12
br label %while.cond, !dbg !13

while.cond: ; preds = %if.end, %entry
%0 = load i32, i32* %i, align 4, !dbg !14
%0 = load i32, ptr %i, align 4, !dbg !14
%inc = add nsw i32 %0, 1, !dbg !14
store i32 %inc, i32* %i, align 4, !dbg !14
store i32 %inc, ptr %i, align 4, !dbg !14
%cmp = icmp slt i32 %0, 400000000, !dbg !14
br i1 %cmp, label %while.body, label %while.end, !dbg !14

while.body: ; preds = %while.cond
%1 = load i32, i32* %i, align 4, !dbg !16
%1 = load i32, ptr %i, align 4, !dbg !16
%cmp1 = icmp ne i32 %1, 100, !dbg !16
br i1 %cmp1, label %if.then, label %if.else, !dbg !16


if.then: ; preds = %while.body
%2 = load i32, i32* %i, align 4, !dbg !18
%3 = load i32, i32* %s, align 4, !dbg !18
%2 = load i32, ptr %i, align 4, !dbg !18
%3 = load i32, ptr %s, align 4, !dbg !18
;; @foo is inlined because the callsite is hot and @foo has use-sample-profile
;; attribute.
; CHECK: if.then:
; CHECK-NOT: call i32 @foo
%call = call i32 @foo(i32 %2, i32 %3), !dbg !18
store i32 %call, i32* %s, align 4, !dbg !18
store i32 %call, ptr %s, align 4, !dbg !18
br label %if.end, !dbg !18

if.else: ; preds = %while.body
;; @goo is not inlined because @goo doesn't have use-sample-profile attribute.
; CHECK: if.else:
; CHECK: call void @goo
call void @goo(), !dbg !27
store i32 30, i32* %s, align 4, !dbg !20
store i32 30, ptr %s, align 4, !dbg !20
br label %if.end

if.end: ; preds = %if.else, %if.then
br label %while.cond, !dbg !22

while.end: ; preds = %while.cond
%4 = load i32, i32* %s, align 4, !dbg !24
%call2 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %4), !dbg !24
%4 = load i32, ptr %s, align 4, !dbg !24
%call2 = call i32 (ptr, ...) @printf(ptr @.str, i32 %4), !dbg !24
ret i32 0, !dbg !25
}

Expand All @@ -81,7 +81,7 @@ while.end: ; preds = %while.cond
attributes #0 = {"use-sample-profile"}
attributes #1 = {"use-sample-profile"}

declare i32 @printf(i8*, ...)
declare i32 @printf(ptr, ...)

!llvm.dbg.cu = !{!0}
!llvm.module.flags = !{!8, !9}
Expand Down
40 changes: 20 additions & 20 deletions llvm/test/Transforms/SampleProfile/warm-inline-instance.ll
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ define i32 @foo(i32 %x, i32 %y) #0 !dbg !4 {
entry:
%x.addr = alloca i32, align 4
%y.addr = alloca i32, align 4
store i32 %x, i32* %x.addr, align 4
store i32 %y, i32* %y.addr, align 4
%t0 = load i32, i32* %x.addr, align 4, !dbg !11
%t1 = load i32, i32* %y.addr, align 4, !dbg !11
store i32 %x, ptr %x.addr, align 4
store i32 %y, ptr %y.addr, align 4
%t0 = load i32, ptr %x.addr, align 4, !dbg !11
%t1 = load i32, ptr %y.addr, align 4, !dbg !11
%add = add nsw i32 %t0, %t1, !dbg !11
ret i32 %add, !dbg !11
}
Expand All @@ -19,10 +19,10 @@ define i32 @goo(i32 %x, i32 %y) #0 {
entry:
%x.addr = alloca i32, align 4
%y.addr = alloca i32, align 4
store i32 %x, i32* %x.addr, align 4
store i32 %y, i32* %y.addr, align 4
%t0 = load i32, i32* %x.addr, align 4, !dbg !11
%t1 = load i32, i32* %y.addr, align 4, !dbg !11
store i32 %x, ptr %x.addr, align 4
store i32 %y, ptr %y.addr, align 4
%t0 = load i32, ptr %x.addr, align 4, !dbg !11
%t1 = load i32, ptr %y.addr, align 4, !dbg !11
%add = add nsw i32 %t0, %t1, !dbg !11
ret i32 %add, !dbg !11
}
Expand All @@ -33,33 +33,33 @@ entry:
%retval = alloca i32, align 4
%s = alloca i32, align 4
%i = alloca i32, align 4
store i32 0, i32* %retval
store i32 0, i32* %i, align 4, !dbg !12
store i32 0, ptr %retval
store i32 0, ptr %i, align 4, !dbg !12
br label %while.cond, !dbg !13

while.cond: ; preds = %if.end, %entry
%t0 = load i32, i32* %i, align 4, !dbg !14
%t0 = load i32, ptr %i, align 4, !dbg !14
%inc = add nsw i32 %t0, 1, !dbg !14
store i32 %inc, i32* %i, align 4, !dbg !14
store i32 %inc, ptr %i, align 4, !dbg !14
%cmp = icmp slt i32 %t0, 400000000, !dbg !14
br i1 %cmp, label %while.body, label %while.end, !dbg !14

while.body: ; preds = %while.cond
%t1 = load i32, i32* %i, align 4, !dbg !16
%t1 = load i32, ptr %i, align 4, !dbg !16
%cmp1 = icmp ne i32 %t1, 100, !dbg !16
br i1 %cmp1, label %if.then, label %if.else, !dbg !16

if.then: ; preds = %while.body
%t2 = load i32, i32* %i, align 4, !dbg !18
%t3 = load i32, i32* %s, align 4, !dbg !18
%t2 = load i32, ptr %i, align 4, !dbg !18
%t3 = load i32, ptr %s, align 4, !dbg !18
; Although the ratio of total samples of @foo vs total samples of @main is
; small, since the total samples count is larger than hot cutoff computed by
; ProfileSummaryInfo, we will still regard the callsite of foo as hot and
; early inlining will inline it.
; CHECK-LABEL: @main(
; CHECK-NOT: call i32 @foo(i32 %t2, i32 %t3)
%call1 = call i32 @foo(i32 %t2, i32 %t3), !dbg !18
store i32 %call1, i32* %s, align 4, !dbg !18
store i32 %call1, ptr %s, align 4, !dbg !18
br label %if.end, !dbg !18

if.else: ; preds = %while.body
Expand All @@ -68,19 +68,19 @@ if.else: ; preds = %while.body
; CHECK-NOT: !prof
; CHECK-SAME: {{$}}
%call2 = call i32 @goo(i32 2, i32 3), !dbg !26
store i32 %call2, i32* %s, align 4, !dbg !20
store i32 %call2, ptr %s, align 4, !dbg !20
br label %if.end

if.end: ; preds = %if.else, %if.then
br label %while.cond, !dbg !22

while.end: ; preds = %while.cond
%t4 = load i32, i32* %s, align 4, !dbg !24
%call3 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str, i32 0, i32 0), i32 %t4), !dbg !24
%t4 = load i32, ptr %s, align 4, !dbg !24
%call3 = call i32 (ptr, ...) @printf(ptr @.str, i32 %t4), !dbg !24
ret i32 0, !dbg !25
}

declare i32 @printf(i8*, ...) #2
declare i32 @printf(ptr, ...) #2

attributes #0 = { "use-sample-profile" }

Expand Down