• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes
2; RUN: opt -attributor -enable-new-pm=0 -attributor-manifest-internal  -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=3 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_NPM,NOT_CGSCC_OPM,NOT_TUNIT_NPM,IS__TUNIT____,IS________OPM,IS__TUNIT_OPM
3; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal  -attributor-max-iterations-verify -attributor-annotate-decl-cs -attributor-max-iterations=3 -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_CGSCC_OPM,NOT_CGSCC_NPM,NOT_TUNIT_OPM,IS__TUNIT____,IS________NPM,IS__TUNIT_NPM
4; RUN: opt -attributor-cgscc -enable-new-pm=0 -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_NPM,IS__CGSCC____,IS________OPM,IS__CGSCC_OPM
5; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,NOT_TUNIT_NPM,NOT_TUNIT_OPM,NOT_CGSCC_OPM,IS__CGSCC____,IS________NPM,IS__CGSCC_NPM
6target datalayout = "E-p:64:64:64-a0:0:8-f32:32:32-f64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-v64:64:64-v128:128:128"
7
8; Checks if !prof metadata is corret in deadargelim.
9
10define void @caller() #0 {
11; IS________OPM-LABEL: define {{[^@]+}}@caller() {
12; IS________OPM-NEXT:    [[X:%.*]] = alloca i32, align 4
13; IS________OPM-NEXT:    store i32 42, i32* [[X]], align 4
14; IS________OPM-NEXT:    call void @promote_i32_ptr(i32* noalias nocapture noundef nonnull readonly align 4 dereferenceable(4) [[X]]), !prof !0
15; IS________OPM-NEXT:    ret void
16;
17; IS________NPM-LABEL: define {{[^@]+}}@caller() {
18; IS________NPM-NEXT:    [[X:%.*]] = alloca i32, align 4
19; IS________NPM-NEXT:    store i32 42, i32* [[X]], align 4
20; IS________NPM-NEXT:    [[TMP1:%.*]] = load i32, i32* [[X]], align 4
21; IS________NPM-NEXT:    call void @promote_i32_ptr(i32 [[TMP1]]), !prof !0
22; IS________NPM-NEXT:    ret void
23;
24  %x = alloca i32
25  store i32 42, i32* %x
26  call void @promote_i32_ptr(i32* %x), !prof !0
27  ret void
28}
29
30define internal void @promote_i32_ptr(i32* %xp) {
31; IS________OPM-LABEL: define {{[^@]+}}@promote_i32_ptr
32; IS________OPM-SAME: (i32* noalias nocapture noundef nonnull readonly align 4 dereferenceable(4) [[XP:%.*]]) {
33; IS________OPM-NEXT:    [[X:%.*]] = load i32, i32* [[XP]], align 4
34; IS________OPM-NEXT:    call void @use_i32(i32 [[X]])
35; IS________OPM-NEXT:    ret void
36;
37; IS________NPM-LABEL: define {{[^@]+}}@promote_i32_ptr
38; IS________NPM-SAME: (i32 [[TMP0:%.*]]) {
39; IS________NPM-NEXT:    [[XP_PRIV:%.*]] = alloca i32, align 4
40; IS________NPM-NEXT:    store i32 [[TMP0]], i32* [[XP_PRIV]], align 4
41; IS________NPM-NEXT:    [[X:%.*]] = load i32, i32* [[XP_PRIV]], align 4
42; IS________NPM-NEXT:    call void @use_i32(i32 [[X]])
43; IS________NPM-NEXT:    ret void
44;
45  %x = load i32, i32* %xp
46  call void @use_i32(i32 %x)
47  ret void
48}
49
50declare void @use_i32(i32)
51
52!0 = !{!"branch_weights", i32 30}
53