77
88// For LLVM IR checks, the structs are defined before the variables, so these
99// 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}>
1016// LLVM-DAG: %struct.CompleteS = type { i32, i8 }
1117// LLVM-DAG: %struct.OuterS = type { %struct.InnerS, i32 }
1218// LLVM-DAG: %struct.InnerS = type { i32, i8 }
2026
2127struct IncompleteS * p ;
2228
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>
2530// LLVM-DAG: @p = dso_local global ptr null
2631// OGCG-DAG: @p = global ptr null, align 8
2732
@@ -30,10 +35,9 @@ struct CompleteS {
3035 char b ;
3136} cs ;
3237
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
3741
3842struct InnerS {
3943 int a ;
@@ -47,10 +51,9 @@ struct OuterS {
4751
4852struct OuterS os ;
4953
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
5457
5558#pragma pack(push)
5659#pragma pack(1)
@@ -60,20 +63,18 @@ struct PackedS {
6063 char a1 ;
6164} ps ;
6265
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
6769
6870struct PackedAndPaddedS {
6971 int b0 ;
7072 char b1 ;
7173} __attribute__((aligned (2 ))) pps ;
7274
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
7778
7879#pragma pack(pop)
7980
@@ -82,9 +83,7 @@ void f(void) {
8283}
8384
8485// 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}
8887// CIR-NEXT: cir.return
8988
9089// LLVM: define void @f()
@@ -101,9 +100,7 @@ void f2(void) {
101100}
102101
103102// 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}
107104// CIR-NEXT: cir.return
108105
109106// LLVM: define void @f2()
@@ -160,7 +157,7 @@ char f4(int a, struct CompleteS *p) {
160157 return p -> b ;
161158}
162159
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 >
164161// CIR-NEXT: %[[A_ADDR:.*]] = cir.alloca {{.*}} ["a", init] {alignment = 4 : i64}
165162// CIR-NEXT: %[[P_ADDR:.*]] = cir.alloca {{.*}} ["p", init] {alignment = 8 : i64}
166163// CIR-NEXT: %[[RETVAL_ADDR:.*]] = cir.alloca {{.*}} ["__retval"] {alignment = 1 : i64}
0 commit comments