1
1
; 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
3
2
; 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
4
4
;
5
5
; #include <pthread.h>
6
6
;
19
19
; Verify the constant values NULL and &GlobalVPtr are propagated into foo and
20
20
; bar, respectively.
21
21
;
22
- target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-z0:1-z2:neg1-z3:neg1-z5:neg1-S128"
23
22
24
23
%union.pthread_attr_t = type { i64 , [48 x i8 ] }
25
24
@@ -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
31
30
;.
32
31
; CHECK: @GlobalVPtr = common dso_local global ptr null, align 8
33
32
;.
33
+ ; CHECK-DL: @GlobalVPtr = common dso_local global ptr null, align 8
34
+ ;.
34
35
define 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
52
53
;
53
54
entry:
54
55
%alloc1 = alloca i8 , align 8
@@ -66,21 +67,34 @@ declare !callback !0 dso_local i32 @pthread_create(ptr, ptr, ptr, ptr)
66
67
define internal ptr @foo (ptr %arg ) {
67
68
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
68
69
; 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]+]] {
70
71
; 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
72
79
;
73
80
entry:
74
81
ret ptr %arg
75
82
}
76
83
84
+
77
85
define internal ptr @bar (ptr %arg ) {
78
86
; CHECK: Function Attrs: mustprogress nofree norecurse nosync nounwind willreturn memory(none)
79
87
; CHECK-LABEL: define {{[^@]+}}@bar
80
88
; CHECK-SAME: (ptr noalias nocapture nofree nonnull readnone align 8 dereferenceable(8) [[ARG:%.*]]) #[[ATTR0]] {
81
89
; CHECK-NEXT: entry:
82
90
; CHECK-NEXT: ret ptr @GlobalVPtr
83
91
;
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
+ ;
84
98
entry:
85
99
ret ptr %arg
86
100
}
@@ -92,6 +106,12 @@ define internal ptr @baz(ptr %arg) {
92
106
; CHECK-NEXT: entry:
93
107
; CHECK-NEXT: ret ptr [[ARG]]
94
108
;
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
+ ;
95
115
entry:
96
116
ret ptr %arg
97
117
}
@@ -103,20 +123,29 @@ define internal ptr @buz(ptr %arg) {
103
123
; CHECK-NEXT: entry:
104
124
; CHECK-NEXT: ret ptr [[ARG]]
105
125
;
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
+ ;
106
132
entry:
107
133
ret ptr %arg
108
134
}
109
135
110
136
!1 = !{i64 2 , i64 3 , i1 false }
111
137
!0 = !{!1 }
112
138
;.
113
- ; TUNIT : attributes #[[ATTR0]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }
139
+ ; CHECK : attributes #[[ATTR0]] = { mustprogress nofree norecurse nosync nounwind willreturn memory(none) }
114
140
;.
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) }
116
142
;.
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}
119
145
;.
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}
122
148
;.
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