xref: /llvm-project/llvm/test/Instrumentation/InstrProfiling/runtime-counter-relocation.ll (revision d4dc8e4a85c4a88a9080ac7b4e478498cb5edd33)
1acead46aSFangrui Song; RUN: opt < %s -S -passes=instrprof | FileCheck %s
2acead46aSFangrui Song; RUN: opt < %s -S -passes=instrprof -runtime-counter-relocation | FileCheck -check-prefixes=RELOC %s
3cfc22605SNAKAMURA Takumi; RUN: opt < %s -S -passes=instrprof,inline,gvn -runtime-counter-relocation | FileCheck -check-prefixes=RELOC,RELOCOPT %s
4cfc22605SNAKAMURA Takumi; RUN: opt < %s -S -passes=instrprof            -runtime-counter-relocation -instrprof-atomic-counter-update-all | FileCheck -check-prefixes=ATOMIC %s
5cfc22605SNAKAMURA Takumi; RUN: opt < %s -S -passes=instrprof,inline,gvn -runtime-counter-relocation -instrprof-atomic-counter-update-all | FileCheck -check-prefixes=ATOMIC,ATOMICOPT %s
6d3db13afSPetr Hosek
7d3db13afSPetr Hosektarget triple = "x86_64-unknown-linux-gnu"
8d3db13afSPetr Hosek
99f506fc7SFangrui Song@__profn_foo = private constant [3 x i8] c"foo"
10cfc22605SNAKAMURA Takumi@__profn_bar = private constant [3 x i8] c"bar"
1154902e00SPetr Hosek; RELOC: $__llvm_profile_counter_bias = comdat any
1254902e00SPetr Hosek; RELOC: @__llvm_profile_counter_bias = linkonce_odr hidden global i64 0, comdat
13d3db13afSPetr Hosek
14d3db13afSPetr Hosek; CHECK-LABEL: define void @foo
15a5128542SNAKAMURA Takumi; CHECK-NEXT: %[[PGOCOUNT:.+]] = load i64, ptr @__profc_foo
16a5128542SNAKAMURA Takumi; CHECK-NEXT: %[[PGOCOUNTINC:.+]] = add i64 %[[PGOCOUNT]], 1
17a5128542SNAKAMURA Takumi; CHECK-NEXT: store i64 %[[PGOCOUNTINC]], ptr @__profc_foo
18d3db13afSPetr Hosek; RELOC-LABEL: define void @foo
19*d4dc8e4aSNAKAMURA Takumi; RELOC-NEXT: %[[BIAS:.+]] = load i64, ptr @__llvm_profile_counter_bias, align {{[0-9]+}}, !invariant.load !0
20a5128542SNAKAMURA Takumi; RELOC-NEXT: %[[PROFC_BIAS:.+]] = add i64 ptrtoint (ptr @__profc_foo to i64), %[[BIAS]]
21a5128542SNAKAMURA Takumi; RELOC-NEXT: %[[PROFC_ADDR:.+]] = inttoptr i64 %[[PROFC_BIAS]] to ptr
22a5128542SNAKAMURA Takumi; RELOC-NEXT: %[[PGOCOUNT:.+]] = load i64, ptr %[[PROFC_ADDR]]
23a5128542SNAKAMURA Takumi; RELOC-NEXT: %[[PGOCOUNTINC:.+]] = add i64 %[[PGOCOUNT]], 1
24a5128542SNAKAMURA Takumi; RELOC-NEXT: store i64 %[[PGOCOUNTINC]], ptr %[[PROFC_ADDR]]
25cfc22605SNAKAMURA Takumi; RELOCOPT-NEXT: %[[PROFC_BIAS1:.+]] = add i64 ptrtoint (ptr @__profc_bar to i64), %[[BIAS]]
26cfc22605SNAKAMURA Takumi; RELOCOPT-NEXT: %[[PROFC_ADDR1:.+]] = inttoptr i64 %[[PROFC_BIAS1]] to ptr
27cfc22605SNAKAMURA Takumi; RELOCOPT-NEXT: %[[PGOCOUNT1:.+]] = load i64, ptr %[[PROFC_ADDR1]]
28cfc22605SNAKAMURA Takumi; RELOCOPT-NEXT: %[[PGOCOUNTINC1:.+]] = add i64 %[[PGOCOUNT1]], 1
29cfc22605SNAKAMURA Takumi; RELOCOPT-NEXT: store i64 %[[PGOCOUNTINC1]], ptr %[[PROFC_ADDR1]]
30cfc22605SNAKAMURA Takumi; ATOMIC-LABEL: define void @foo
31*d4dc8e4aSNAKAMURA Takumi; ATOMIC-NEXT: %[[BIAS:.+]] = load i64, ptr @__llvm_profile_counter_bias, align {{[0-9]+}}, !invariant.load !0
32cfc22605SNAKAMURA Takumi; ATOMIC-NEXT: %[[PROFC_BIAS:.+]] = add i64 ptrtoint (ptr @__profc_foo to i64), %[[BIAS]]
33cfc22605SNAKAMURA Takumi; ATOMIC-NEXT: %[[PROFC_ADDR:.+]] = inttoptr i64 %[[PROFC_BIAS]] to ptr
34cfc22605SNAKAMURA Takumi; ATOMIC-NEXT: %[[PGOCOUNTINC:.+]] = atomicrmw add ptr %[[PROFC_ADDR]], i64 1 monotonic
35cfc22605SNAKAMURA Takumi; ATOMICOPT-NEXT: %[[PROFC_BIAS1:.+]] = add i64 ptrtoint (ptr @__profc_bar to i64), %[[BIAS]]
36cfc22605SNAKAMURA Takumi; ATOMICOPT-NEXT: %[[PROFC_ADDR1:.+]] = inttoptr i64 %[[PROFC_BIAS1]] to ptr
37cfc22605SNAKAMURA Takumi; ATOMICOPT-NEXT: %[[PGOCOUNTINC1:.+]] = atomicrmw add ptr %[[PROFC_ADDR1]], i64 1 monotonic
38cfc22605SNAKAMURA Takumi
39cfc22605SNAKAMURA Takumidefine void @bar() {
40cfc22605SNAKAMURA Takumi  call void @llvm.instrprof.increment(ptr @__profn_bar, i64 0, i32 1, i32 0)
41cfc22605SNAKAMURA Takumi  ret void
42cfc22605SNAKAMURA Takumi}
43cfc22605SNAKAMURA Takumi
44d3db13afSPetr Hosekdefine void @foo() {
459ff36df5SFangrui Song  call void @llvm.instrprof.increment(ptr @__profn_foo, i64 0, i32 1, i32 0)
46cfc22605SNAKAMURA Takumi  call void @bar()
47d3db13afSPetr Hosek  ret void
48d3db13afSPetr Hosek}
49d3db13afSPetr Hosek
509ff36df5SFangrui Songdeclare void @llvm.instrprof.increment(ptr, i64, i32, i32)
51