https://github.com/AmrDeveloper created https://github.com/llvm/llvm-project/pull/148033
Use ZeroAttr as a zeroinitializer for ComplexType, similar to what we did in CXXScalarValueInitExpr https://github.com/llvm/llvm-project/issues/141365 >From 0f584ac188b3c6eb9cc61ffc44464741360ff9c0 Mon Sep 17 00:00:00 2001 From: AmrDeveloper <am...@programmer.net> Date: Thu, 10 Jul 2025 20:52:04 +0200 Subject: [PATCH] [CIR] Use ZeroAttr as zeroinitializer for ComplexType --- clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp | 8 ++------ clang/test/CIR/CodeGen/complex.cpp | 4 ++-- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp b/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp index 24a9bf13e1880..9564069901f0a 100644 --- a/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp +++ b/clang/lib/CIR/CodeGen/CIRGenExprComplex.cpp @@ -291,12 +291,8 @@ mlir::Value ComplexExprEmitter::VisitInitListExpr(const InitListExpr *e) { } assert(e->getNumInits() == 0 && "Unexpected number of inits"); - QualType complexElemTy = - e->getType()->castAs<clang::ComplexType>()->getElementType(); - mlir::Type complexElemLLVMTy = cgf.convertType(complexElemTy); - mlir::TypedAttr defaultValue = builder.getZeroInitAttr(complexElemLLVMTy); - auto complexAttr = cir::ConstComplexAttr::get(defaultValue, defaultValue); - return builder.create<cir::ConstantOp>(loc, complexAttr); + mlir::Type compleTy = cgf.convertType(e->getType()); + return builder.getNullValue(compleTy, loc); } mlir::Value diff --git a/clang/test/CIR/CodeGen/complex.cpp b/clang/test/CIR/CodeGen/complex.cpp index 6e7e889df146f..f33909150044e 100644 --- a/clang/test/CIR/CodeGen/complex.cpp +++ b/clang/test/CIR/CodeGen/complex.cpp @@ -31,7 +31,7 @@ float _Complex cf2 = { 1.0f, 2.0f }; void foo() { int _Complex c = {}; } // CIR: %[[INIT:.*]] = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["c", init] -// CIR: %[[COMPLEX:.*]] = cir.const #cir.const_complex<#cir.int<0> : !s32i, #cir.int<0> : !s32i> : !cir.complex<!s32i> +// CIR: %[[COMPLEX:.*]] = cir.const #cir.zero : !cir.complex<!s32i> // CIR: cir.store{{.*}} %[[COMPLEX]], %[[INIT]] : !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>> // LLVM: %[[INIT:.*]] = alloca { i32, i32 }, i64 1, align 4 @@ -741,7 +741,7 @@ void foo29() { } // CIR: %[[INIT:.*]] = cir.alloca !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>>, ["a", init] -// CIR: %[[COMPLEX:.*]] = cir.const #cir.const_complex<#cir.int<0> : !s32i, #cir.int<0> : !s32i> : !cir.complex<!s32i> +// CIR: %[[COMPLEX:.*]] = cir.const #cir.zero : !cir.complex<!s32i> // CIR: cir.store{{.*}} %[[COMPLEX]], %[[INIT]] : !cir.complex<!s32i>, !cir.ptr<!cir.complex<!s32i>> // LLVM: %[[INIT:.*]] = alloca { i32, i32 }, i64 1, align 4 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits