@@ -176,3 +176,32 @@ void foo7() {
176176// OGCG: store float %[[TMP_A]], ptr %[[C_REAL_PTR]], align 4
177177// OGCG: store float 2.000000e+00, ptr %[[C_IMAG_PTR]], align 4
178178
179+ void foo8 () {
180+ double _Complex c = 2 .00i;
181+ }
182+
183+ // CIR: %[[COMPLEX:.*]] = cir.const #cir.const_complex<#cir.fp<0.000000e+00> : !cir.double, #cir.fp<2.000000e+00> : !cir.double> : !cir.complex<!cir.double>
184+
185+ // LLVM: %[[COMPLEX:.*]] = alloca { double, double }, i64 1, align 8
186+ // LLVM: store { double, double } { double 0.000000e+00, double 2.000000e+00 }, ptr %[[COMPLEX]], align 8
187+
188+ // OGCG: %[[COMPLEX:.*]] = alloca { double, double }, align 8
189+ // OGCG: %[[C_REAL_PTR:.*]] = getelementptr inbounds nuw { double, double }, ptr %[[COMPLEX]], i32 0, i32 0
190+ // OGCG: %[[C_IMAG_PTR:.*]] = getelementptr inbounds nuw { double, double }, ptr %[[COMPLEX]], i32 0, i32 1
191+ // OGCG: store double 0.000000e+00, ptr %[[C_REAL_PTR]], align 8
192+ // OGCG: store double 2.000000e+00, ptr %[[C_IMAG_PTR]], align 8
193+
194+ void foo14 () {
195+ int _Complex c = 2i;
196+ }
197+
198+ // CIR: %[[COMPLEX:.*]] = cir.const #cir.const_complex<#cir.int<0> : !s32i, #cir.int<2> : !s32i> : !cir.complex<!s32i>
199+
200+ // LLVM: %[[COMPLEX:.*]] = alloca { i32, i32 }, i64 1, align 4
201+ // LLVM: store { i32, i32 } { i32 0, i32 2 }, ptr %[[COMPLEX]], align 4
202+
203+ // OGCG: %[[COMPLEX:.*]] = alloca { i32, i32 }, align 4
204+ // OGCG: %[[C_REAL_PTR:.*]] = getelementptr inbounds nuw { i32, i32 }, ptr %[[COMPLEX]], i32 0, i32 0
205+ // OGCG: %[[C_IMAG_PTR:.*]] = getelementptr inbounds nuw { i32, i32 }, ptr %[[COMPLEX]], i32 0, i32 1
206+ // OGCG: store i32 0, ptr %[[C_REAL_PTR]], align 4
207+ // OGCG: store i32 2, ptr %[[C_IMAG_PTR]], align 4
0 commit comments