Skip to content

Commit df3f291

Browse files
committed
[TBAA] Add tests with pointers to structs to tbaa-pointers.c.
Precommit tests for follow-up improvements to Clang's TBAA emission. Also add variants with -pointer-tbaa to tbaa-reference.cpp.
1 parent 92a8b81 commit df3f291

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

clang/test/CodeGen/tbaa-pointers.c

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,43 @@ void p2struct(struct S1 **ptr) {
116116
// COMMON-LABEL: define void @p2struct(
117117
// COMMON-SAME: ptr noundef [[PTR:%.+]])
118118
// COMMON: [[PTR_ADDR:%.+]] = alloca ptr, align 8
119-
// ENABLED-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[P2S1_0:!.+]]
120-
// ENABLED-NEXT: [[BASE:%.+]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[P2S1_0]]
121-
// ENABLED-NEXT: store ptr null, ptr [[BASE]], align 8, !tbaa [[P1S1_:!.+]]
122-
// DEFAULT-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR]]
123-
// DEFAULT-NEXT: [[BASE:%.+]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR]]
124-
// DEFAULT-NEXT: store ptr null, ptr [[BASE]], align 8, !tbaa [[ANYPTR]]
119+
// ENABLED-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR:!.+]]
120+
// DEFAULT-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR]]
121+
// COMMON-NEXT: [[BASE:%.+]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR]]
122+
// COMMON-NEXT: store ptr null, ptr [[BASE]], align 8, !tbaa [[ANYPTR]]
123+
// COMMON-NEXT: ret void
124+
//
125+
*ptr = 0;
126+
}
127+
128+
void p2struct_const(struct S1 const **ptr) {
129+
// COMMON-LABEL: define void @p2struct_const(
130+
// COMMON-SAME: ptr noundef [[PTR:%.+]])
131+
// COMMON: [[PTR_ADDR:%.+]] = alloca ptr, align 8
132+
// COMMON-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR]]
133+
// COMMON-NEXT: [[BASE:%.+]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR]]
134+
// COMMON-NEXT: store ptr null, ptr [[BASE]], align 8, !tbaa [[ANYPTR]]
125135
// COMMON-NEXT: ret void
126136
//
127137
*ptr = 0;
128138
}
129139

140+
struct S2 {
141+
struct S1 *s;
142+
};
143+
144+
void p2struct2(struct S2 *ptr) {
145+
// COMMON-LABEL: define void @p2struct2(
146+
// COMMON-SAME: ptr noundef [[PTR:%.+]])
147+
// COMMON: [[PTR_ADDR:%.+]] = alloca ptr, align 8
148+
// COMMON-NEXT: store ptr [[PTR]], ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR]]
149+
// COMMON-NEXT: [[BASE:%.+]] = load ptr, ptr [[PTR_ADDR]], align 8, !tbaa [[ANYPTR]]
150+
// COMMON-NEXT: [[S:%.+]] = getelementptr inbounds nuw %struct.S2, ptr [[BASE]], i32 0, i32 0
151+
// COMMON-NEXT: store ptr null, ptr [[S]], align 8, !tbaa [[S2_S_TAG:!.+]]
152+
// COMMON-NEXT: ret void
153+
ptr->s = 0;
154+
}
155+
130156
// ENABLED: [[P2INT_0]] = !{[[P2INT:!.+]], [[P2INT]], i64 0}
131157
// ENABLED: [[P2INT]] = !{!"p2 int", [[ANY_POINTER:!.+]], i64 0}
132158
// DEFAULT: [[ANYPTR]] = !{[[ANY_POINTER:!.+]], [[ANY_POINTER]], i64 0}
@@ -145,3 +171,5 @@ void p2struct(struct S1 **ptr) {
145171
// ENABLED: [[P2CHAR]] = !{!"p2 omnipotent char", [[ANY_POINTER]], i64 0}
146172
// ENABLED: [[P1CHAR_0]] = !{[[P1CHAR:!.+]], [[P1CHAR]], i64 0}
147173
// ENABLED: [[P1CHAR]] = !{!"p1 omnipotent char", [[ANY_POINTER]], i64 0}
174+
// COMMON: [[S2_S_TAG]] = !{[[S2_TY:!.+]], [[ANY_POINTER]], i64 0}
175+
// COMMON: [[S2_TY]] = !{!"S2", [[ANY_POINTER]], i64 0}

clang/test/CodeGen/tbaa-reference.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// RUN: %clang_cc1 -triple x86_64-linux -O1 -disable-llvm-passes %s -emit-llvm -o - | FileCheck %s -check-prefixes=CHECK,OLD-PATH
2+
// RUN: %clang_cc1 -triple x86_64-linux -O1 -disable-llvm-passes -pointer-tbaa %s -emit-llvm -o - | FileCheck %s -check-prefixes=CHECK,OLD-PATH
23
// RUN: %clang_cc1 -triple x86_64-linux -O1 -disable-llvm-passes %s -emit-llvm -new-struct-path-tbaa -o - | FileCheck %s -check-prefixes=CHECK,NEW-PATH
4+
// RUN: %clang_cc1 -triple x86_64-linux -O1 -disable-llvm-passes %s -pointer-tbaa -emit-llvm -new-struct-path-tbaa -o - | FileCheck %s -check-prefixes=CHECK,NEW-PATH
35
//
46
// Check that we generate correct TBAA information for reference accesses.
57

0 commit comments

Comments
 (0)