7
7
8
8
// For LLVM IR checks, the structs are defined before the variables, so these
9
9
// checks are at the top.
10
+ // CIR-DAG: !rec_IncompleteS = !cir.record<struct "IncompleteS" incomplete>
11
+ // CIR-DAG: !rec_CompleteS = !cir.record<struct "CompleteS" {!s32i, !s8i}>
12
+ // CIR-DAG: !rec_OuterS = !cir.record<struct "OuterS" {!rec_InnerS, !s32i}>
13
+ // CIR-DAG: !rec_InnerS = !cir.record<struct "InnerS" {!s32i, !s8i}>
14
+ // CIR-DAG: !rec_PackedS = !cir.record<struct "PackedS" packed {!s32i, !s8i}>
15
+ // CIR-DAG: !rec_PackedAndPaddedS = !cir.record<struct "PackedAndPaddedS" packed padded {!s32i, !s8i, !u8i}>
10
16
// LLVM-DAG: %struct.CompleteS = type { i32, i8 }
11
17
// LLVM-DAG: %struct.OuterS = type { %struct.InnerS, i32 }
12
18
// LLVM-DAG: %struct.InnerS = type { i32, i8 }
20
26
21
27
struct IncompleteS * p ;
22
28
23
- // CIR: cir.global external @p = #cir.ptr<null> : !cir.ptr<!cir.record<struct
24
- // CIR-SAME: "IncompleteS" incomplete>>
29
+ // CIR: cir.global external @p = #cir.ptr<null> : !cir.ptr<!rec_IncompleteS>
25
30
// LLVM-DAG: @p = dso_local global ptr null
26
31
// OGCG-DAG: @p = global ptr null, align 8
27
32
@@ -30,10 +35,9 @@ struct CompleteS {
30
35
char b ;
31
36
} cs ;
32
37
33
- // CIR: cir.global external @cs = #cir.zero : !cir.record<struct
34
- // CIR-SAME: "CompleteS" {!s32i, !s8i}>
35
- // LLVM-DAG: @cs = dso_local global %struct.CompleteS zeroinitializer
36
- // OGCG-DAG: @cs = global %struct.CompleteS zeroinitializer, align 4
38
+ // CIR: cir.global external @cs = #cir.zero : !rec_CompleteS
39
+ // LLVM-DAG: @cs = dso_local global %struct.CompleteS zeroinitializer
40
+ // OGCG-DAG: @cs = global %struct.CompleteS zeroinitializer, align 4
37
41
38
42
struct InnerS {
39
43
int a ;
@@ -47,10 +51,9 @@ struct OuterS {
47
51
48
52
struct OuterS os ;
49
53
50
- // CIR: cir.global external @os = #cir.zero : !cir.record<struct
51
- // CIR-SAME: "OuterS" {!cir.record<struct "InnerS" {!s32i, !s8i}>, !s32i}>
52
- // LLVM-DAG: @os = dso_local global %struct.OuterS zeroinitializer
53
- // OGCG-DAG: @os = global %struct.OuterS zeroinitializer, align 4
54
+ // CIR: cir.global external @os = #cir.zero : !rec_OuterS
55
+ // LLVM-DAG: @os = dso_local global %struct.OuterS zeroinitializer
56
+ // OGCG-DAG: @os = global %struct.OuterS zeroinitializer, align 4
54
57
55
58
#pragma pack(push)
56
59
#pragma pack(1)
@@ -60,20 +63,18 @@ struct PackedS {
60
63
char a1 ;
61
64
} ps ;
62
65
63
- // CIR: cir.global external @ps = #cir.zero : !cir.record<struct "PackedS"
64
- // CIR-SAME: packed {!s32i, !s8i}>
65
- // LLVM-DAG: @ps = dso_local global %struct.PackedS zeroinitializer
66
- // OGCG-DAG: @ps = global %struct.PackedS zeroinitializer, align 1
66
+ // CIR: cir.global external @ps = #cir.zero : !rec_PackedS
67
+ // LLVM-DAG: @ps = dso_local global %struct.PackedS zeroinitializer
68
+ // OGCG-DAG: @ps = global %struct.PackedS zeroinitializer, align 1
67
69
68
70
struct PackedAndPaddedS {
69
71
int b0 ;
70
72
char b1 ;
71
73
} __attribute__((aligned (2 ))) pps ;
72
74
73
- // CIR: cir.global external @pps = #cir.zero : !cir.record<struct
74
- // CIR-SAME: "PackedAndPaddedS" packed padded {!s32i, !s8i, !u8i}>
75
- // LLVM-DAG: @pps = dso_local global %struct.PackedAndPaddedS zeroinitializer
76
- // OGCG-DAG: @pps = global %struct.PackedAndPaddedS zeroinitializer, align 2
75
+ // CIR: cir.global external @pps = #cir.zero : !rec_PackedAndPaddedS
76
+ // LLVM-DAG: @pps = dso_local global %struct.PackedAndPaddedS zeroinitializer
77
+ // OGCG-DAG: @pps = global %struct.PackedAndPaddedS zeroinitializer, align 2
77
78
78
79
#pragma pack(pop)
79
80
@@ -82,9 +83,7 @@ void f(void) {
82
83
}
83
84
84
85
// CIR: cir.func @f()
85
- // CIR-NEXT: cir.alloca !cir.ptr<!cir.record<struct "IncompleteS" incomplete>>,
86
- // CIR-SAME: !cir.ptr<!cir.ptr<!cir.record<struct
87
- // CIR-SAME: "IncompleteS" incomplete>>>, ["p"]
86
+ // CIR-NEXT: cir.alloca !cir.ptr<!rec_IncompleteS>, !cir.ptr<!cir.ptr<!rec_IncompleteS>>, ["p"] {alignment = 8 : i64}
88
87
// CIR-NEXT: cir.return
89
88
90
89
// LLVM: define void @f()
@@ -101,9 +100,7 @@ void f2(void) {
101
100
}
102
101
103
102
// CIR: cir.func @f2()
104
- // CIR-NEXT: cir.alloca !cir.record<struct "CompleteS" {!s32i, !s8i}>,
105
- // CIR-SAME: !cir.ptr<!cir.record<struct "CompleteS" {!s32i, !s8i}>>,
106
- // CIR-SAME: ["s"] {alignment = 4 : i64}
103
+ // CIR-NEXT: cir.alloca !rec_CompleteS, !cir.ptr<!rec_CompleteS>, ["s"] {alignment = 4 : i64}
107
104
// CIR-NEXT: cir.return
108
105
109
106
// LLVM: define void @f2()
@@ -160,7 +157,7 @@ char f4(int a, struct CompleteS *p) {
160
157
return p -> b ;
161
158
}
162
159
163
- // CIR: cir.func @f4(%[[ARG_A:.*]]: !s32i {{.*}}, %[[ARG_P:.*]]: !cir.ptr<!cir.record<struct "CompleteS" {!s32i, !s8i}> >
160
+ // CIR: cir.func @f4(%[[ARG_A:.*]]: !s32i {{.*}}, %[[ARG_P:.*]]: !cir.ptr<!rec_CompleteS >
164
161
// CIR-NEXT: %[[A_ADDR:.*]] = cir.alloca {{.*}} ["a", init] {alignment = 4 : i64}
165
162
// CIR-NEXT: %[[P_ADDR:.*]] = cir.alloca {{.*}} ["p", init] {alignment = 8 : i64}
166
163
// CIR-NEXT: %[[RETVAL_ADDR:.*]] = cir.alloca {{.*}} ["__retval"] {alignment = 1 : i64}
0 commit comments