Skip to content

Commit 723bc5c

Browse files
andykaylorsvkeerthy
authored andcommitted
[CIR] Update tests for global vars (#141854)
This change updates a few tests for global variable handling to also check classic codegen output so we can easily verify consistency between the two and will be alerted if the classic codegen changes. This was useful in developing forthcoming changes to global linkage handling.
1 parent dd8cf3a commit 723bc5c

File tree

3 files changed

+114
-44
lines changed

3 files changed

+114
-44
lines changed
Lines changed: 72 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,103 +1,140 @@
11
// Global variables of intergal types
2-
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o - | FileCheck %s
2+
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t-cir.ll
3+
// RUN: FileCheck %s --input-file %t-cir.ll
4+
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.ll
5+
// RUN: FileCheck %s -check-prefix=OGCG --input-file %t.ll
36

4-
// Note: Currently unsupported features include alignment..
7+
// Note: The differences between CHECK and OGCG represent incorrect IR lowering
8+
// with ClangIR enabled and will be fixed in a future patch.
59

610
char c;
7-
// CHECK: @c = dso_local global i8 0
11+
// CHECK: @c = dso_local global i8 0, align 1
12+
// OGCG: @c = global i8 0, align 1
813

914
signed char sc;
10-
// CHECK: @sc = dso_local global i8 0
15+
// CHECK: @sc = dso_local global i8 0, align 1
16+
// OGCG: @sc = global i8 0, align 1
1117

1218
unsigned char uc;
13-
// CHECK: @uc = dso_local global i8 0
19+
// CHECK: @uc = dso_local global i8 0, align 1
20+
// OGCG: @uc = global i8 0, align 1
1421

1522
short ss;
16-
// CHECK: @ss = dso_local global i16 0
23+
// CHECK: @ss = dso_local global i16 0, align 2
24+
// OGCG: @ss = global i16 0, align 2
1725

1826
unsigned short us = 100;
19-
// CHECK: @us = dso_local global i16 100
27+
// CHECK: @us = dso_local global i16 100, align 2
28+
// OGCG: @us = global i16 100, align 2
2029

2130
int si = 42;
22-
// CHECK: @si = dso_local global i32 42
31+
// CHECK: @si = dso_local global i32 42, align 4
32+
// OGCG: @si = global i32 42, align 4
2333

2434
unsigned ui;
25-
// CHECK: @ui = dso_local global i32 0
35+
// CHECK: @ui = dso_local global i32 0, align 4
36+
// OGCG: @ui = global i32 0, align 4
2637

2738
long sl;
28-
// CHECK: @sl = dso_local global i64 0
39+
// CHECK: @sl = dso_local global i64 0, align 8
40+
// OGCG: @sl = global i64 0, align 8
2941

3042
unsigned long ul;
31-
// CHECK: @ul = dso_local global i64 0
43+
// CHECK: @ul = dso_local global i64 0, align 8
44+
// OGCG: @ul = global i64 0, align 8
3245

3346
long long sll;
34-
// CHECK: @sll = dso_local global i64 0
47+
// CHECK: @sll = dso_local global i64 0, align 8
48+
// OGCG: @sll = global i64 0, align 8
3549

3650
unsigned long long ull = 123456;
37-
// CHECK: @ull = dso_local global i64 123456
51+
// CHECK: @ull = dso_local global i64 123456, align 8
52+
// OGCG: @ull = global i64 123456, align 8
3853

3954
__int128 s128;
40-
// CHECK: @s128 = dso_local global i128 0
55+
// CHECK: @s128 = dso_local global i128 0, align 16
56+
// OGCG: @s128 = global i128 0, align 16
4157

4258
unsigned __int128 u128;
43-
// CHECK: @u128 = dso_local global i128 0
59+
// CHECK: @u128 = dso_local global i128 0, align 16
60+
// OGCG: @u128 = global i128 0, align 16
4461

4562
wchar_t wc;
46-
// CHECK: @wc = dso_local global i32 0
63+
// CHECK: @wc = dso_local global i32 0, align 4
64+
// OGCG: @wc = global i32 0, align 4
4765

4866
char8_t c8;
49-
// CHECK: @c8 = dso_local global i8 0
67+
// CHECK: @c8 = dso_local global i8 0, align 1
68+
// OGCG: @c8 = global i8 0, align 1
5069

5170
char16_t c16;
52-
// CHECK: @c16 = dso_local global i16 0
71+
// CHECK: @c16 = dso_local global i16 0, align 2
72+
// OGCG: @c16 = global i16 0, align 2
5373

5474
char32_t c32;
55-
// CHECK: @c32 = dso_local global i32 0
75+
// CHECK: @c32 = dso_local global i32 0, align 4
76+
// OGCG: @c32 = global i32 0, align 4
5677

5778
_BitInt(20) sb20;
58-
// CHECK: @sb20 = dso_local global i20 0
79+
// CHECK: @sb20 = dso_local global i20 0, align 4
80+
// OGCG: @sb20 = global i32 0, align 4
5981

6082
unsigned _BitInt(48) ub48;
61-
// CHECK: @ub48 = dso_local global i48 0
83+
// CHECK: @ub48 = dso_local global i48 0, align 8
84+
// OGCG: @ub48 = global i64 0, align 8
6285

6386
bool boolfalse = false;
64-
// CHECK: @boolfalse = dso_local global i8 0
87+
// CHECK: @boolfalse = dso_local global i8 0, align 1
88+
// OGCG: @boolfalse = global i8 0, align 1
6589

6690
_Float16 f16;
67-
// CHECK: @f16 = dso_local global half
91+
// CHECK: @f16 = dso_local global half 0xH0000, align 2
92+
// OGCG: @f16 = global half 0xH0000, align 2
6893

6994
__bf16 bf16;
70-
// CHECK: @bf16 = dso_local global bfloat
95+
// CHECK: @bf16 = dso_local global bfloat 0xR0000, align 2
96+
// OGCG: @bf16 = global bfloat 0xR0000, align 2
7197

7298
float f;
73-
// CHECK: @f = dso_local global float 0.000000e+00
99+
// CHECK: @f = dso_local global float 0.000000e+00, align 4
100+
// OGCG: @f = global float 0.000000e+00, align 4
74101

75102
double d = 1.25;
76-
// CHECK: @d = dso_local global double 1.250000e+00
103+
// CHECK: @d = dso_local global double 1.250000e+00, align 8
104+
// OGCG: @d = global double 1.250000e+00, align 8
77105

78106
long double ld;
79-
// CHECK: @ld = dso_local global x86_fp80 0xK00
107+
// CHECK: @ld = dso_local global x86_fp80 0xK00000000000000000000, align 16
108+
// OGCG: @ld = global x86_fp80 0xK00000000000000000000, align 16
80109

81110
__float128 f128;
82-
// CHECK: @f128 = dso_local global fp128 0xL00
111+
// CHECK: @f128 = dso_local global fp128 0xL00000000000000000000000000000000, align 16
112+
// OGCG: @f128 = global fp128 0xL00000000000000000000000000000000, align 16
83113

84114
void *vp;
85-
// CHECK: @vp = dso_local global ptr null
115+
// CHECK: @vp = dso_local global ptr null, align 8
116+
// OGCG: @vp = global ptr null, align 8
86117

87118
int *ip = 0;
88-
// CHECK: @ip = dso_local global ptr null
119+
// CHECK: @ip = dso_local global ptr null, align 8
120+
// OGCG: @ip = global ptr null, align 8
89121

90122
double *dp;
91-
// CHECK: @dp = dso_local global ptr null
123+
// CHECK: @dp = dso_local global ptr null, align 8
124+
// OGCG: @dp = global ptr null, align 8
92125

93126
char **cpp;
94-
// CHECK: @cpp = dso_local global ptr null
127+
// CHECK: @cpp = dso_local global ptr null, align 8
128+
// OGCG: @cpp = global ptr null, align 8
95129

96130
void (*fp)();
97-
// CHECK: @fp = dso_local global ptr null
131+
// CHECK: @fp = dso_local global ptr null, align 8
132+
// OGCG: @fp = global ptr null, align 8
98133

99134
int (*fpii)(int) = 0;
100-
// CHECK: @fpii = dso_local global ptr null
135+
// CHECK: @fpii = dso_local global ptr null, align 8
136+
// OGCG: @fpii = global ptr null, align 8
101137

102138
void (*fpvar)(int, ...);
103-
// CHECK: @fpvar = dso_local global ptr null
139+
// CHECK: @fpvar = dso_local global ptr null, align 8
140+
// OGCG: @fpvar = global ptr null, align 8

clang/test/CIR/Lowering/hello.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,18 @@
11
// Smoke test for ClangIR-to-LLVM IR code generation
2-
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o - | FileCheck %s
2+
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t-cir.ll
3+
// RUN: FileCheck %s --input-file %t-cir.ll
4+
// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.ll
5+
// RUN: FileCheck %s -check-prefix=OGCG --input-file %t.ll
6+
7+
// Note: The differences between CHECK and OGCG represent incorrect IR lowering
8+
// with ClangIR enabled and will be fixed in a future patch.
39

410
int b = 2;
511

6-
// CHECK: @b = dso_local global i32 2
12+
// CHECK: @b = dso_local global i32 2, align 4
13+
// OGCG: @b = global i32 2, align 4
714

815
int a;
916

10-
// CHECK: @a = dso_local global i32 0
17+
// CHECK: @a = dso_local global i32 0, align 4
18+
// OGCG: @a = global i32 0, align 4

clang/test/CIR/global-var-linkage.cpp

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,36 @@
11
// Linkage types of global variables
2-
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o - | FileCheck %s
2+
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o %t.cir
3+
// RUN: FileCheck %s -check-prefix=CIR --input-file %t.cir
4+
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t-cir.ll
5+
// RUN: FileCheck %s -check-prefix=LLVM --input-file %t-cir.ll
6+
// RUN: %clang_cc1 -std=c++20 -triple x86_64-unknown-linux-gnu -emit-llvm %s -o %t.ll
7+
// RUN: FileCheck %s -check-prefix=OGCG --input-file %t.ll
8+
9+
// Note: The differences between CHECK and OGCG represent incorrect IR lowering
10+
// with ClangIR enabled and will be fixed in a future patch.
311

412
int aaaa;
5-
// CHECK: cir.global external @aaaa
13+
// CIR: cir.global external @aaaa
14+
// LLVM: @aaaa = dso_local global i32 0
15+
// OGCG: @aaaa = global i32 0
16+
17+
[[gnu::selectany]] int dddd;
18+
// CIR: cir.global weak_odr @dddd
19+
// LLVM: @dddd = weak_odr dso_local global i32 0
20+
// OGCG: @dddd = weak_odr global i32 0, comdat
21+
622
static int bbbb;
7-
// CHECK: cir.global internal @_ZL4bbbb
23+
// CIR: cir.global internal @_ZL4bbbb
24+
// LLVM: @_ZL4bbbb = internal global i32 0
25+
// OGCG: @_ZL4bbbb = internal global i32 0
26+
827
inline int cccc;
9-
// CHECK: cir.global linkonce_odr @cccc
10-
[[gnu::selectany]] int dddd;
11-
// CHECK: cir.global weak_odr @dddd
28+
// CIR: cir.global linkonce_odr @cccc
29+
// LLVM: @cccc = linkonce_odr dso_local global i32 0
30+
// OGCG: @cccc = linkonce_odr global i32 0
31+
32+
// Force the global variables to be emitted
33+
void reference_vars() {
34+
bbbb;
35+
cccc;
36+
}

0 commit comments

Comments
 (0)