3
3
4
4
declare void @foo (ptr )
5
5
6
+ define ptr @align_replacement_does_not_have_align_metadata_missing_noundef (ptr noalias %p ) {
7
+ ; CHECK-LABEL: define ptr @align_replacement_does_not_have_align_metadata_missing_noundef(
8
+ ; CHECK-SAME: ptr noalias [[P:%.*]]) {
9
+ ; CHECK-NEXT: [[L_1:%.*]] = load ptr, ptr [[P]], align 8
10
+ ; CHECK-NEXT: call void @foo(ptr [[L_1]])
11
+ ; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[L_1]], i64 4
12
+ ; CHECK-NEXT: store ptr [[GEP]], ptr [[P]], align 8
13
+ ; CHECK-NEXT: ret ptr [[GEP]]
14
+ ;
15
+ %l.1 = load ptr , ptr %p , align 8
16
+ call void @foo (ptr %l.1 )
17
+ %l.2 = load ptr , ptr %p , align 8
18
+ %gep = getelementptr i8 , ptr %l.2 , i64 4
19
+ store ptr %gep , ptr %p , align 8
20
+ %l.3 = load ptr , ptr %p , align 8 , !align !0
21
+ ret ptr %l.3
22
+ }
23
+
6
24
define ptr @align_replacement_does_not_have_align_metadata (ptr noalias %p ) {
7
25
; CHECK-LABEL: define ptr @align_replacement_does_not_have_align_metadata(
8
26
; CHECK-SAME: ptr noalias [[P:%.*]]) {
@@ -18,7 +36,7 @@ define ptr @align_replacement_does_not_have_align_metadata(ptr noalias %p) {
18
36
%l.2 = load ptr , ptr %p , align 8
19
37
%gep = getelementptr i8 , ptr %l.2 , i64 4
20
38
store ptr %gep , ptr %p , align 8
21
- %l.3 = load ptr , ptr %p , align 8 , !align !0
39
+ %l.3 = load ptr , ptr %p , align 8 , !align !0 , !noundef !{}
22
40
ret ptr %l.3
23
41
}
24
42
@@ -34,7 +52,7 @@ define ptr @align_replacement_does_not_have_align_metadata2(ptr noalias %p) {
34
52
%l.1 = load ptr , ptr %p , align 8
35
53
%gep = getelementptr i8 , ptr %l.1 , i64 4
36
54
store ptr %gep , ptr %p , align 8
37
- %l.2 = load ptr , ptr %p , align 8 , !align !0
55
+ %l.2 = load ptr , ptr %p , align 8 , !align !0 , !noundef !{}
38
56
ret ptr %l.2
39
57
}
40
58
@@ -61,7 +79,7 @@ define ptr @align_replacement_has_smaller_alignment(ptr noalias %p) {
61
79
;
62
80
%l.1 = load ptr , ptr %p , align 8 , !align !0
63
81
call void @foo (ptr %l.1 )
64
- %l.2 = load ptr , ptr %p , align 8 , !align !1
82
+ %l.2 = load ptr , ptr %p , align 8 , !align !1 , !noundef !{}
65
83
ret ptr %l.2
66
84
}
67
85
@@ -70,12 +88,12 @@ define ptr @align_replacement_has_larger_alignment(ptr %p) {
70
88
; CHECK-SAME: ptr [[P:%.*]]) {
71
89
; CHECK-NEXT: [[L_1:%.*]] = load ptr, ptr [[P]], align 8, !align [[META1:![0-9]+]]
72
90
; CHECK-NEXT: call void @foo(ptr [[L_1]])
73
- ; CHECK-NEXT: [[L_2:%.*]] = load ptr, ptr [[P]], align 8, !align [[META0]]
91
+ ; CHECK-NEXT: [[L_2:%.*]] = load ptr, ptr [[P]], align 8, !align [[META0]], !noundef [[META2:![0-9]+]]
74
92
; CHECK-NEXT: ret ptr [[L_2]]
75
93
;
76
94
%l.1 = load ptr , ptr %p , align 8 , !align !1
77
95
call void @foo (ptr %l.1 )
78
- %l.2 = load ptr , ptr %p , align 8 , !align !0
96
+ %l.2 = load ptr , ptr %p , align 8 , !align !0 , !noundef !{}
79
97
ret ptr %l.2
80
98
}
81
99
@@ -84,12 +102,12 @@ define ptr @align_1(ptr %p) {
84
102
; CHECK-SAME: ptr [[P:%.*]]) {
85
103
; CHECK-NEXT: [[L_1:%.*]] = load ptr, ptr [[P]], align 8
86
104
; CHECK-NEXT: call void @foo(ptr [[L_1]])
87
- ; CHECK-NEXT: [[L_2:%.*]] = load ptr, ptr [[P]], align 8, !align [[META2 :![0-9]+]]
105
+ ; CHECK-NEXT: [[L_2:%.*]] = load ptr, ptr [[P]], align 8, !align [[META3 :![0-9]+]], !noundef [[META2 ]]
88
106
; CHECK-NEXT: ret ptr [[L_2]]
89
107
;
90
108
%l.1 = load ptr , ptr %p , align 8
91
109
call void @foo (ptr %l.1 )
92
- %l.2 = load ptr , ptr %p , align 8 , !align !2
110
+ %l.2 = load ptr , ptr %p , align 8 , !align !2 , !noundef !{}
93
111
ret ptr %l.2
94
112
}
95
113
@@ -99,5 +117,6 @@ define ptr @align_1(ptr %p) {
99
117
;.
100
118
; CHECK: [[META0]] = !{i64 4}
101
119
; CHECK: [[META1]] = !{i64 8}
102
- ; CHECK: [[META2]] = !{i64 1}
120
+ ; CHECK: [[META2]] = !{}
121
+ ; CHECK: [[META3]] = !{i64 1}
103
122
;.
0 commit comments