33
44declare void @foo (ptr )
55
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+
624define ptr @align_replacement_does_not_have_align_metadata (ptr noalias %p ) {
725; CHECK-LABEL: define ptr @align_replacement_does_not_have_align_metadata(
826; CHECK-SAME: ptr noalias [[P:%.*]]) {
927; CHECK-NEXT: [[L_1:%.*]] = load ptr, ptr [[P]], align 8
1028; CHECK-NEXT: call void @foo(ptr [[L_1]])
1129; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[L_1]], i64 4
1230; CHECK-NEXT: store ptr [[GEP]], ptr [[P]], align 8
31+ ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[GEP]], i64 4) ]
1332; CHECK-NEXT: ret ptr [[GEP]]
1433;
1534 %l.1 = load ptr , ptr %p , align 8
1635 call void @foo (ptr %l.1 )
1736 %l.2 = load ptr , ptr %p , align 8
1837 %gep = getelementptr i8 , ptr %l.2 , i64 4
1938 store ptr %gep , ptr %p , align 8
20- %l.3 = load ptr , ptr %p , align 8 , !align !0
39+ %l.3 = load ptr , ptr %p , align 8 , !align !0 , !noundef !{}
2140 ret ptr %l.3
2241}
2342
@@ -27,12 +46,13 @@ define ptr @align_replacement_does_not_have_align_metadata2(ptr noalias %p) {
2746; CHECK-NEXT: [[L_1:%.*]] = load ptr, ptr [[P]], align 8
2847; CHECK-NEXT: [[GEP:%.*]] = getelementptr i8, ptr [[L_1]], i64 4
2948; CHECK-NEXT: store ptr [[GEP]], ptr [[P]], align 8
49+ ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[GEP]], i64 4) ]
3050; CHECK-NEXT: ret ptr [[GEP]]
3151;
3252 %l.1 = load ptr , ptr %p , align 8
3353 %gep = getelementptr i8 , ptr %l.1 , i64 4
3454 store ptr %gep , ptr %p , align 8
35- %l.2 = load ptr , ptr %p , align 8 , !align !0
55+ %l.2 = load ptr , ptr %p , align 8 , !align !0 , !noundef !{}
3656 ret ptr %l.2
3757}
3858
@@ -54,11 +74,12 @@ define ptr @align_replacement_has_smaller_alignment(ptr noalias %p) {
5474; CHECK-SAME: ptr noalias [[P:%.*]]) {
5575; CHECK-NEXT: [[L_1:%.*]] = load ptr, ptr [[P]], align 8, !align [[META0]]
5676; CHECK-NEXT: call void @foo(ptr [[L_1]])
77+ ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "align"(ptr [[L_1]], i64 8) ]
5778; CHECK-NEXT: ret ptr [[L_1]]
5879;
5980 %l.1 = load ptr , ptr %p , align 8 , !align !0
6081 call void @foo (ptr %l.1 )
61- %l.2 = load ptr , ptr %p , align 8 , !align !1
82+ %l.2 = load ptr , ptr %p , align 8 , !align !1 , !noundef !{}
6283 ret ptr %l.2
6384}
6485
@@ -67,12 +88,12 @@ define ptr @align_replacement_has_larger_alignment(ptr %p) {
6788; CHECK-SAME: ptr [[P:%.*]]) {
6889; CHECK-NEXT: [[L_1:%.*]] = load ptr, ptr [[P]], align 8, !align [[META1:![0-9]+]]
6990; CHECK-NEXT: call void @foo(ptr [[L_1]])
70- ; 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]+]]
7192; CHECK-NEXT: ret ptr [[L_2]]
7293;
7394 %l.1 = load ptr , ptr %p , align 8 , !align !1
7495 call void @foo (ptr %l.1 )
75- %l.2 = load ptr , ptr %p , align 8 , !align !0
96+ %l.2 = load ptr , ptr %p , align 8 , !align !0 , !noundef !{}
7697 ret ptr %l.2
7798}
7899
@@ -81,12 +102,12 @@ define ptr @align_1(ptr %p) {
81102; CHECK-SAME: ptr [[P:%.*]]) {
82103; CHECK-NEXT: [[L_1:%.*]] = load ptr, ptr [[P]], align 8
83104; CHECK-NEXT: call void @foo(ptr [[L_1]])
84- ; 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 ]]
85106; CHECK-NEXT: ret ptr [[L_2]]
86107;
87108 %l.1 = load ptr , ptr %p , align 8
88109 call void @foo (ptr %l.1 )
89- %l.2 = load ptr , ptr %p , align 8 , !align !2
110+ %l.2 = load ptr , ptr %p , align 8 , !align !2 , !noundef !{}
90111 ret ptr %l.2
91112}
92113
@@ -96,5 +117,6 @@ define ptr @align_1(ptr %p) {
96117;.
97118; CHECK: [[META0]] = !{i64 4}
98119; CHECK: [[META1]] = !{i64 8}
99- ; CHECK: [[META2]] = !{i64 1}
120+ ; CHECK: [[META2]] = !{}
121+ ; CHECK: [[META3]] = !{i64 1}
100122;.
0 commit comments