11; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --function-signature --check-attributes --check-globals
2- ; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
32; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
3+ ; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal -attributor-annotate-decl-cs -data-layout=z0:1-z2:neg1-z3:neg1-z5:neg1 -S < %s | FileCheck %s --check-prefixes=CHECK-DL,CGSCC-DL
44;
55; #include <pthread.h>
66;
1919; Verify the constant values NULL and &GlobalVPtr are propagated into foo and
2020; bar, respectively.
2121;
22- target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-z0:1-z2:neg1-z3:neg1-z5:neg1-S128"
2322
2423%union.pthread_attr_t = type { i64 , [48 x i8 ] }
2524
@@ -31,24 +30,26 @@ target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-z0:1-z2:neg1-z3:neg1-z5:ne
3130;.
3231; CHECK: @GlobalVPtr = common dso_local global ptr null, align 8
3332;.
33+ ; CHECK-DL: @GlobalVPtr = common dso_local global ptr null, align 8
34+ ;.
3435define dso_local i32 @main () {
35- ; TUNIT -LABEL: define {{[^@]+}}@main() {
36- ; TUNIT -NEXT: entry:
37- ; TUNIT -NEXT: [[ALLOC11 :%.*]] = alloca i8, i32 0 , align 8
38- ; TUNIT -NEXT: [[ALLOC22 :%.*]] = alloca i8, i32 0 , align 8
39- ; TUNIT -NEXT: [[THREAD:%.*]] = alloca i64, align 8
40- ; TUNIT -NEXT: [[CALL:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @foo, ptr nofree readnone align 4294967296 undef )
41- ; TUNIT -NEXT: [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @bar, ptr noalias nocapture nofree nonnull readnone align 8 dereferenceable(8) undef )
42- ; TUNIT -NEXT: [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @baz, ptr noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC11 ]])
43- ; TUNIT -NEXT: [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @buz, ptr noalias nofree noundef nonnull readnone align 8 dereferenceable(1) "no-capture-maybe-returned" [[ALLOC22 ]])
44- ; TUNIT -NEXT: ret i32 0
45- ;
46- ; CGSCC -LABEL: define {{[^@]+}}@main() {
47- ; CGSCC -NEXT: entry:
48- ; CGSCC -NEXT: [[ALLOC1:%.*]] = alloca i8, align 8
49- ; CGSCC -NEXT: [[ALLOC2:%.*]] = alloca i8, align 8
50- ; CGSCC -NEXT: [[THREAD:%.*]] = alloca i64, align 8
51- ; CGSCC -NEXT: unreachable
36+ ; CHECK -LABEL: define {{[^@]+}}@main() {
37+ ; CHECK -NEXT: entry:
38+ ; CHECK -NEXT: [[ALLOC1 :%.*]] = alloca i8, align 8
39+ ; CHECK -NEXT: [[ALLOC2 :%.*]] = alloca i8, align 8
40+ ; CHECK -NEXT: [[THREAD:%.*]] = alloca i64, align 8
41+ ; CHECK -NEXT: [[CALL:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @foo, ptr nofree noundef readnone align 4294967296 null )
42+ ; CHECK -NEXT: [[CALL1:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @bar, ptr noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(8) @GlobalVPtr )
43+ ; CHECK -NEXT: [[CALL2:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @baz, ptr noalias nocapture nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC1 ]])
44+ ; CHECK -NEXT: [[CALL3:%.*]] = call i32 @pthread_create(ptr noundef nonnull align 8 dereferenceable(8) [[THREAD]], ptr noundef align 4294967296 null, ptr noundef nonnull @buz, ptr noalias nofree noundef nonnull readnone align 8 dereferenceable(1) [[ALLOC2 ]])
45+ ; CHECK -NEXT: ret i32 0
46+ ;
47+ ; CHECK-DL -LABEL: define {{[^@]+}}@main() {
48+ ; CHECK-DL -NEXT: entry:
49+ ; CHECK-DL -NEXT: [[ALLOC1:%.*]] = alloca i8, align 8
50+ ; CHECK-DL -NEXT: [[ALLOC2:%.*]] = alloca i8, align 8
51+ ; CHECK-DL -NEXT: [[THREAD:%.*]] = alloca i64, align 8
52+ ; CHECK-DL -NEXT: unreachable
5253;
5354entry:
5455 %alloc1 = alloca i8 , align 8
@@ -66,21 +67,34 @@ declare !callback !0 dso_local i32 @pthread_create(ptr, ptr, ptr, ptr)
6667define internal ptr @foo (ptr %arg ) {
6768; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
6869; CHECK-LABEL: define {{[^@]+}}@foo
69- ; CHECK-SAME: (ptr noalias nocapture nofree nonnull readnone align 4294967296 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
70+ ; CHECK-SAME: (ptr noalias nocapture nofree readnone align 4294967296 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
7071; CHECK-NEXT: entry:
71- ; CHECK-NEXT: unreachable
72+ ; CHECK-NEXT: ret ptr null
73+ ;
74+ ; CHECK-DL: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
75+ ; CHECK-DL-LABEL: define {{[^@]+}}@foo
76+ ; CHECK-DL-SAME: (ptr noalias nocapture nofree nonnull readnone align 4294967296 [[ARG:%.*]]) #[[ATTR0:[0-9]+]] {
77+ ; CHECK-DL-NEXT: entry:
78+ ; CHECK-DL-NEXT: unreachable
7279;
7380entry:
7481 ret ptr %arg
7582}
7683
84+
7785define internal ptr @bar (ptr %arg ) {
7886; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
7987; CHECK-LABEL: define {{[^@]+}}@bar
8088; CHECK-SAME: (ptr noalias nocapture nofree nonnull readnone align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] {
8189; CHECK-NEXT: entry:
8290; CHECK-NEXT: ret ptr @GlobalVPtr
8391;
92+ ; CHECK-DL: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
93+ ; CHECK-DL-LABEL: define {{[^@]+}}@bar
94+ ; CHECK-DL-SAME: (ptr noalias nocapture nofree nonnull readnone align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] {
95+ ; CHECK-DL-NEXT: entry:
96+ ; CHECK-DL-NEXT: ret ptr @GlobalVPtr
97+ ;
8498entry:
8599 ret ptr %arg
86100}
@@ -92,6 +106,12 @@ define internal ptr @baz(ptr %arg) {
92106; CHECK-NEXT: entry:
93107; CHECK-NEXT: ret ptr [[ARG]]
94108;
109+ ; CHECK-DL: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
110+ ; CHECK-DL-LABEL: define {{[^@]+}}@baz
111+ ; CHECK-DL-SAME: (ptr noalias nofree noundef nonnull readnone returned align 8 dereferenceable(1) "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR0]] {
112+ ; CHECK-DL-NEXT: entry:
113+ ; CHECK-DL-NEXT: ret ptr [[ARG]]
114+ ;
95115entry:
96116 ret ptr %arg
97117}
@@ -103,20 +123,29 @@ define internal ptr @buz(ptr %arg) {
103123; CHECK-NEXT: entry:
104124; CHECK-NEXT: ret ptr [[ARG]]
105125;
126+ ; CHECK-DL: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
127+ ; CHECK-DL-LABEL: define {{[^@]+}}@buz
128+ ; CHECK-DL-SAME: (ptr noalias nofree noundef nonnull readnone returned align 8 dereferenceable(1) "no-capture-maybe-returned" [[ARG:%.*]]) #[[ATTR0]] {
129+ ; CHECK-DL-NEXT: entry:
130+ ; CHECK-DL-NEXT: ret ptr [[ARG]]
131+ ;
106132entry:
107133 ret ptr %arg
108134}
109135
110136!1 = !{i64 2 , i64 3 , i1 false }
111137!0 = !{!1 }
112138;.
113- ; TUNIT : attributes #[[ATTR0]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }
139+ ; CHECK : attributes #[[ATTR0]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }
114140;.
115- ; CGSCC : attributes #[[ATTR0]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }
141+ ; CHECK-DL : attributes #[[ATTR0]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }
116142;.
117- ; TUNIT : [[META0:![0-9]+]] = !{[[META1:![0-9]+]]}
118- ; TUNIT : [[META1]] = !{i64 2, i64 3, i1 false}
143+ ; CHECK : [[META0:![0-9]+]] = !{[[META1:![0-9]+]]}
144+ ; CHECK : [[META1]] = !{i64 2, i64 3, i1 false}
119145;.
120- ; CGSCC : [[META0:![0-9]+]] = !{[[META1:![0-9]+]]}
121- ; CGSCC : [[META1]] = !{i64 2, i64 3, i1 false}
146+ ; CHECK-DL : [[META0:![0-9]+]] = !{[[META1:![0-9]+]]}
147+ ; CHECK-DL : [[META1]] = !{i64 2, i64 3, i1 false}
122148;.
149+ ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
150+ ; CGSCC: {{.*}}
151+ ; CGSCC-DL: {{.*}}
0 commit comments